Summary
Add a reviewed, fail-closed post-pilot capacity-promotion procedure and prove one consumer workload at exactly two-runner capacity.
Context
- The existing pilot preflight intentionally hardcodes
MIN=0 and MAX=1.
- Host-addition documentation permits later capacity growth only after measurement.
- No reviewed operational
MAX>1 promotion procedure currently exists.
- Preserve the one-runner pilot gate; add a separate post-pilot capacity preflight.
Related:
Required repository change
- Keep the strict pilot preflight at
MIN=0, MAX=1.
- Add a separate explicit post-pilot capacity validator for a requested target MAX.
- Validate CPU, memory, Docker-filesystem, controller, credential-file metadata, scale-set identity, routing label, runner group, and idle/drained state.
- Fail closed for active managed runners, active fleet jobs, inadequate headroom, disk pressure, OOM evidence, or unrelated workloads.
- Distinguish configured MAX from effective controller MAX.
- Never print secrets or arbitrary environment contents.
- Add deterministic tests and a documented drain/change/recreate/verify procedure.
Live proof
- Back up the exact host-local configuration as a root-only file.
- Change only
CI_FLEET_MAX_RUNNERS=1 to CI_FLEET_MAX_RUNNERS=2.
- Recreate only the controller and verify effective
MIN=0, MAX=2.
- Dispatch exactly one separately authorized two-runner consumer proof: the downstream-consumer experimental Fast matrix.
- Record resource-budget, concurrency, runner lifecycle, cleanup, health, and retain-or-restore evidence.
- Restore the prior MAX when any capacity, isolation, cleanup, or health criterion fails.
Boundaries
- No unrelated controller or runner mutation.
- No runner-group, repository-access, routing-label, runner-limit, or MIN change.
- No MAX above two.
- No unrestricted Docker prune.
- No production, development, deployment, package, or image publication capability.
Acceptance criteria
Summary
Add a reviewed, fail-closed post-pilot capacity-promotion procedure and prove one consumer workload at exactly two-runner capacity.
Context
MIN=0andMAX=1.MAX>1promotion procedure currently exists.Related:
Required repository change
MIN=0,MAX=1.Live proof
CI_FLEET_MAX_RUNNERS=1toCI_FLEET_MAX_RUNNERS=2.MIN=0,MAX=2.Boundaries
Acceptance criteria
MAX=1hard gate remains unchanged and tested.MAX=2preflight is reviewed and tested.