Skip to content

fix(OMN-15978): reconcile runner fleet config to live 88-runner fleet - #2791

Merged
jonahgabriel merged 2 commits into
devfrom
jonah/omn-15978-reconcile-fleet-72-to-88
Aug 22, 2026
Merged

jonahgabriel merged 2 commits into
devfrom
jonah/omn-15978-reconcile-fleet-72-to-88

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented Aug 18, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

The .201 self-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 org OmniNode-ai and 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.sh rsyncs the repo's compose file over the host and runs docker 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_count 72 -> 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: appended omninode-runner-73 .. omninode-runner-88 service blocks and their runner-N-creds named volumes, matching omninode-runner-72's block shape exactly (5 volume mounts, container_name, RUNNER_NAME, the repo's !!merge <<: *runner-base / *runner-env anchor convention). Also updated the resource-allocation and egress-concurrency doc comments that state "72 runners" as current architecture.
    • Note on live-host byte-shape: the live host's ad-hoc 73-88 additions use plain <<: *runner-base (no explicit !!merge tag), 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 config renders 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 renaming test_runner_compose_reconciled_to_saturation_scale_72_fleet -> ..._88_fleet.

Verification

  • docker compose -f docker/docker-compose.runners.yml config --quiet validates 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), 88 runner-N-creds volumes.
  • Targeted tests all green: 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.).
  • Live host confirmed via ssh jonah@192.168.86.201: docker-compose.runners.yml on the host has 89 container_name: entries and runners omninode-runner-73..88 present 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 config output + 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

  • Infrastructure
    • Expanded the runner fleet from 72 to 88 steady-state instances.
    • Increased burst capacity to support up to 88 runners.
    • Added persistent credentials and services for the additional runners.
  • Documentation
    • Updated runner fleet capacity, resource, and egress references to reflect 88 runners.
  • Tests
    • Updated fleet validation checks to verify all 88 services and credential volumes.

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.
@coderabbitai

coderabbitai Bot commented Aug 18, 2026 •

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e3d6fa86-c116-4af4-8696-72be9027db62

📥 Commits

Reviewing files that changed from the base of the PR and between b99e1a9 and 6415a7e.

📒 Files selected for processing (3)
  • config/runner_fleet.yaml
  • docker/docker-compose.runners.yml
  • tests/unit/observability/runner_health/test_runner_fleet_config.py

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.


📝 Walkthrough

Walkthrough

The 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.

Changes

Runner fleet expansion

Layer / File(s) Summary
Fleet capacity contract
config/runner_fleet.yaml, docker/docker-compose.runners.yml, tests/unit/observability/runner_health/test_runner_fleet_config.py
Expected and burst capacity change to 88 runners. Related resource, egress, mirror, and test documentation now references 88 runners.
Runner Compose topology
docker/docker-compose.runners.yml
Runner services omninode-runner-73 through omninode-runner-88 and their dedicated credential volumes are added.
Fleet reconciliation validation
tests/unit/observability/runner_health/test_runner_fleet_config.py
The reconciliation test validates 88 contiguous runner services and credential volumes with the existing health-check and credential requirements.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 6415a

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: ci:ready

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes reconciling the runner fleet configuration with the live 88-runner fleet.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jonah/omn-15978-reconcile-fleet-72-to-88

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Aug 19, 2026 •

Copy link
Copy Markdown
Contributor

⚠️ Hostile Reviewer — DEGRADED (informational)

Blocking findings (critical): 0
Total findings: 0
Models succeeded: none

Note: All reviewer models failed or were unavailable. Degraded results are informational during the pilot phase (OMN-8468/OMN-8524) and do not block merge. Error: cli_review exited non-zero (fewer than 2 models succeeded — partial/total outage — or binary error)


Gate semantics (pilot phase)

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)

jonahgabriel added a commit to OmniNode-ai/onex_change_control that referenced this pull request Aug 20, 2026
#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>
@jonahgabriel
jonahgabriel merged commit e197a8d into dev Aug 22, 2026
202 of 224 checks passed
@jonahgabriel
jonahgabriel deleted the jonah/omn-15978-reconcile-fleet-72-to-88 branch August 22, 2026 14:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant