Reusable workflows, and the inputs that became an API

A reusable workflow shared across four repositories, and the eleventh input added because one repository was different.

on:
  workflow_call:
    inputs:
      php-version:      { type: string, default: '8.3' }
      run-integration:  { type: boolean, default: true }
      coverage:         { type: boolean, default: false }
      # ... and eight more, each added for one caller

Every input is a branch in the workflow and eleven of them is a configuration language with no type checking beyond string and boolean. The version that worked was three inputs and a second workflow for the repository that was genuinely different — duplication between two files that each read straightforwardly, rather than one file with eleven conditionals nobody can evaluate in their head.