Repository navigation
fix(OMN-15978): reconcile runner fleet config to live 88-runner fleet - #2791
Conversation
The .201 runner host was scaled 72 -> 88 by the controller on operator authorization; all 88 registered and are working. The repo's authoritative config/runner_fleet.yaml and docker/docker-compose.runners.yml still said 72. scripts/deploy-runners.sh rsyncs the repo compose over the host and runs `up -d --remove-orphans` -- at 72 in the repo, the next deploy would have deleted live runners 73-88. - config/runner_fleet.yaml: expected_count/burst_count 72 -> 88, plus the adjacent doc comments that encode the fleet size as current architecture (not historical measurement snapshots, which are left untouched). - docker/docker-compose.runners.yml: append runner-73..88 service blocks and their creds volumes, exactly matching runner-72's block shape (the repo's `!!merge <<:` convention -- the live host's ad-hoc 73-88 additions omit the explicit `!!merge` tag on the merge key, which is semantically identical YAML but inconsistent with the rest of the file; matched repo convention for internal consistency, not byte-identical to the live artifact). - tests/unit/observability/runner_health/test_runner_fleet_config.py: the two tests hardcoding the fleet size as 72 are updated to 88 (including a rename of test_runner_compose_reconciled_to_saturation_scale_72_fleet). Verified: `docker compose config` validates the full 89-service (88 runners + deploy-runner) file with dummy env vars; targeted runner-fleet-config unit + integration + CI-drift + deploy-sync tests all pass (48/48); pre-commit run --files on the changed files passes end to end. OMN-15978 is the prior saturation-scale ticket (72), reused here for the 72->88 reconciliation -- no fresher fleet-scale ticket exists in Linear for this specific change as of 2026-08-18.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (3)
Included review availability: 0 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 1 review per hour. 📝 WalkthroughWalkthroughThe runner fleet increases from 72 to 88 steady-state runners. Configuration, Docker Compose services, credential volumes, capacity documentation, and reconciliation tests now use the 88-runner topology. ChangesRunner fleet expansion
Estimated code review effort: 2 (Simple) | ~10 minutes Merge Risk: ⚪ Minimal · up to This change reconciles the declared runner fleet from 72 to 88 and adds the matching runner services and tests; no actionable merge-blocking risk remains after normal checks and review. Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Comment |
|
| Verdict | Meaning | Blocks merge? |
|---|---|---|
passed |
No critical findings | No |
blocked |
CRITICAL findings found | Yes |
degraded |
All models unavailable (infra) | No (pilot) |
Powered by omniintelligence.review_pairing.cli_review — node-based adversarial review via HandlerLlmCliSubprocess (OMN-8468/OMN-8524)
#6698) * evidence: OCC companion pass 1 for OmniNode-ai/omnibase_infra#2791 * evidence: OCC companion self-bind for #6698 --------- Co-authored-by: node-occ-companion-effect <occ-companion-effect@omninode.ai> Co-authored-by: Jonah Gray <jonah@omninode.ai>
Summary
The
.201self-hosted runner host (omninode-pc.tail75df5e.ts.net) was scaled 72 -> 88 by the fleet controller on operator authorization; all 88 runners are registered with GitHub orgOmniNode-aiand working. The repo's authoritative fleet config (config/runner_fleet.yaml) and compose file (docker/docker-compose.runners.yml) were left at 72.Danger this PR removes:
scripts/deploy-runners.shrsyncs the repo's compose file over the host and runsdocker compose ... up -d --remove-orphans. With the repo at 72, the next deploy would have deleted the live runners 73-88 out from under the fleet.Ordering: live-first, reconcile-second. The host is already correct (88 running, registered, healthy); this PR only brings the repo's declared source of truth into agreement with it, so the deploy script stops being a latent fleet-shrinking hazard.
Changes
config/runner_fleet.yaml:expected_count/burst_count72 -> 88, plus the adjacent doc comments that describe current fleet architecture (not dated historical-measurement snapshots, which are intentionally left untouched — e.g. the 2026-08-14 "MEASURED STATE: 72/72 runners warm" tool-cache note still says 72 because that's what was literally measured then).docker/docker-compose.runners.yml: appendedomninode-runner-73..omninode-runner-88service blocks and theirrunner-N-credsnamed volumes, matchingomninode-runner-72's block shape exactly (5 volume mounts,container_name,RUNNER_NAME, the repo's!!merge <<: *runner-base/*runner-envanchor convention). Also updated the resource-allocation and egress-concurrency doc comments that state "72 runners" as current architecture.<<: *runner-base(no explicit!!mergetag), while runners 1-72 on both the host and the repo use!!merge <<: *runner-base. Both forms are semantically identical YAML merge keys —docker compose configrenders them the same. I matched the established repo/host convention (!!merge) for internal file consistency rather than the inconsistent ad-hoc host edit.tests/unit/observability/runner_health/test_runner_fleet_config.py: the two tests that hardcoded the fleet size as 72 are updated to 88, including renamingtest_runner_compose_reconciled_to_saturation_scale_72_fleet->..._88_fleet.Verification
docker compose -f docker/docker-compose.runners.yml config --quietvalidates cleanly with dummy env vars (RUNNER_TOKEN,DEPLOY_RUNNER_TOKEN,DEPLOY_RUNNER_OMNI_HOME,DEPLOY_RUNNER_OPERATOR_ENV_FILE,OMNI_HOME) — 89 services (88 runners +omninode-deploy-runner), 88runner-N-credsvolumes.tests/unit/observability/runner_health/test_runner_fleet_config.py,tests/integration/observability/test_runner_fleet_config_contract.py,tests/ci/test_check_runner_fleet_image_drift.py,tests/scripts/test_deploy_runners_sync_paths.py,tests/unit/observability/runner_health/test_cli_runner_health.py— 48/48 passed.pre-commit run --files <changed files>passes end to end (ruff format/check, yamlfmt, ONEX architecture/contract/pattern/naming validators, SPDX, deploy-scope DoD, etc.).ssh jonah@192.168.86.201:docker-compose.runners.ymlon the host has 89container_name:entries and runnersomninode-runner-73..88present and registered, matching what this PR now declares.Ticket
OMN-15978 is the prior saturation-scale ticket (48 -> 64 -> 72). No fresher Linear ticket exists specifically for the 72 -> 88 reconciliation (searched "runner fleet scale", "88 runner", "reconcile runner fleet" — nothing newer matched), so it's reused here per the OMN-15978 pattern of prior fleet-config reconciliations (OMN-12582 did the same for the 48-runner fleet).
dod_evidence
Deploy-scoped surface (
docker/docker-compose.runners.yml) touched; verification evidence is the test run +docker compose configoutput + pre-commit pass cited above. This is a pure config-reconciliation change (no new behavior) bringing the repo in line with an already-live, already-approved host state.Evidence-Ticket: OMN-15978
Evidence-Source: OCC#6698
Summary by CodeRabbit