Skip to content

feat(ci): add governed local runner routing#55

Merged
kyle-sexton merged 7 commits into
mainfrom
codex/local-runner-routing
Jul 12, 2026
Merged

feat(ci): add governed local runner routing#55
kyle-sexton merged 7 commits into
mainfrom
codex/local-runner-routing

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Jul 11, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Routes eligible private Linux CI workloads through the centralized immutable selector with explicit ubuntu-24.04 hosted fallback.
  • Keeps Zizmor, runner-policy enforcement, ci-status, Claude review, link checking, public/fork execution, and privileged control-plane jobs on GitHub-hosted runners.
  • Preserves required-check and merge-queue behavior.
  • Adds the governed runner-policy contract and dependency-update coverage.
  • Does not change plugin or catalog behavior.

Merged dependencies

  • melodic-software/ci-workflows#74: 99ac2f8c5b09dbb785d4eaf18465cbd96c30290c
  • melodic-software/standards#85: ff4b47341693dcd6bd8a55e52aa5f7fe7a1eacd8
  • melodic-software/github-iac#55: 3e1fa5d882ea1738b45b1ee50f7da55ff6a5066c

Final reviewed evidence

  • Exact signed PR head: 6f46fc6500f63606dd312a936f1217656d1b147d
  • Final selector pin: 99ac2f8c5b09dbb785d4eaf18465cbd96c30290c
  • Final selector references: 42
  • Superseded c34f0aa / fd9a74d references: 0
  • Intentional 1d3762c compatibility references retained unchanged: 6
  • All 20 unique pinned action/workflow paths exist at the immutable final selector commit.
  • Runner policy is byte-identical to Standards ff4b473, Git blob b3cf17a861fa59b19536d371b8ede21640fab48a.
  • Independent implementation review: PASS, no code findings.
  • Runner policy, checksum-verified Actionlint/ShellCheck, structural plugin/catalog validation, canonical-reference checks, and diff checks: PASS.
  • Zizmor has zero medium/high findings and improves versus the base branch.
  • Hosted GitHub checks at the exact PR head: 33/33 successful.
  • plugins/ and .claude-plugin/ remain byte-identical to the PR base.

Rollout gate

This PR intentionally remains draft and unmerged. It will be reconciled with main only after the immutable fleet release, desktop canary, two-host HA proof, and the organization rollout gate are ready. Keeping it draft prevents CI routing from becoming active before the live control plane is proven.


Note

High Risk
Large CI workflow refactor changes where jobs execute and how required checks fail closed; mis-routing or org-variable gaps could block merges or shift untrusted work onto the local fleet.

Overview
Introduces governed CI runner routing so eligible private Linux validation lanes run through per-job select-runner reusable workflows (org vars + pinned ci-workflows SHAs), with ubuntu-24.04 only as an explicit fallback when selection succeeds—not as a silent escape from strict self-hosted-only misconfiguration.

ci.yml gains a selector job ahead of each quality lane, merge_group triggers, a hosted runner-policy enforcement job, pinned ci-workflows@99ac2f8, and stricter ci-status aggregation (workloads must be success; skipped no longer passes). pr-title.yml mirrors the selector pattern and adds a small hosted pr-title / pr-title gateway that fails if routing or semantic validation fails.

Adds .github/runner-policy.json, docs/CI-RUNNER-ROUTING.md, and locked CI toolchains: root package.json / package-lock.json (Biome + Claude Code via npm ci), hash-pinned Ruff in .github/requirements-ci.txt, and expanded Dependabot coverage for npm/pip plus the standards runner-policy package root. plugin-gate installs those locked tools instead of mutable global installs so hosted and self-hosted contract tests see the same binaries.

Reviewed by Cursor Bugbot for commit 394ab0d. Bugbot is set up for automated code reviews on this repo. Configure here.

@kyle-sexton
kyle-sexton marked this pull request as ready for review July 12, 2026 07:48
@cursor

cursor Bot commented Jul 12, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_a1676679-db74-4a6e-9c43-24fb47d60391)

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Risk: medium. Not approving because Cursor Bugbot was present but skipped (usage limit reached), so automated review results are incomplete. Human review is needed; no reviewers were assigned because no non-author collaborators are available on this repository.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@kyle-sexton
kyle-sexton merged commit 414f448 into main Jul 12, 2026
42 of 44 checks passed
@kyle-sexton
kyle-sexton deleted the codex/local-runner-routing branch July 12, 2026 07:52
kyle-sexton added a commit that referenced this pull request Jul 16, 2026
)

## Summary

Closes decision #55 (`metadata-claude-md-encode-github-conventions`) for
this repo. Adds a **Branching & PRs** section to `CLAUDE.md` mirroring
medley's citation pattern (`AGENTS.md` "Branching & PRs": terse rule
inline + one pointer to the full convention source).

- Inline rule: PRs required, squash merge, Conventional Commits branch
`<type>/<description>` — already enforced here by
`.github/workflows/pr-title.yml`.
- Pointer: `melodic-software/standards` `conventions/` as the org-wide
convention home.

The pointer targets the `conventions/` directory rather than
`conventions/engineering/naming.md` specifically: `naming.md` today
covers only Clean-Code identifier naming (classes, files, variables),
not branch/PR grammar. Promoting medley's branch-naming grammar into
`standards` org-wide is tracked separately as decision #24
(`naming-branch-convention-org-wide`, WP-11). Once that lands,
`naming.md` (or wherever it lands) becomes the sharper anchor — the
directory-level pointer stays valid either way per `standards`'
`conventions/engineering/reference-dont-duplicate.md` (cite a stable
anchor, never a copy that can drift).

Decisions Log:
https://claude.ai/code/artifact/232ecdce-8316-4880-8c0a-dc3c7dcf3a63

## Test plan

- [x] `npx markdownlint-cli2 CLAUDE.md` — 0 errors
- [x] Manual read-through against medley's `AGENTS.md` "Branching & PRs"
and `.claude/rules/worktree/{branch-naming,pr-conventions}.md` for
pattern fidelity

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01Us4azyXMBuXGV2sshG7UuB

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
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