Skip to content

[P1][Fleet] Add and prove post-pilot two-runner capacity promotion #30

Description

@Nickfost

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

  • Pilot MAX=1 hard gate remains unchanged and tested.
  • Separate post-pilot MAX=2 preflight is reviewed and tested.
  • Resource accounting and objective rollback thresholds are documented before the live proof.
  • Drain, backup, exact edit, controller-only recreation, effective-state verification, retain, and restore procedures are documented.
  • Exactly one downstream consumer Fast matrix is observed at a maximum of two runners.
  • Actual two-runner and two-job overlap is proven without a third runner.
  • Every ephemeral runner and project resource is destroyed automatically.
  • Controller and Docker health remain good with no OOM or residue.
  • Final MAX retain-or-restore decision is recorded.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions