Skip to content

ci: adopt the public hosted-runner posture - #200

Merged
kyle-sexton merged 1 commit into
mainfrom
ci/public-hosted-posture
Jul 18, 2026
Merged

ci: adopt the public hosted-runner posture#200
kyle-sexton merged 1 commit into
mainfrom
ci/public-hosted-posture

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

What

Declare visibility: "public" in .github/runner-policy.json (selfHostedCi false, exception inventory emptied) and remove the select-runner job from all seven workflows: every lane now runs on GitHub-hosted ubuntu-24.04, with each reviewed reusable receiving its runner input explicitly. Net −181 lines.

Why

The repository is public (confirmed intentional), and the runner-policy engine fails closed on the visibility mismatch — currently red on main's own CI and on #189. For public repositories the engine forbids local-runner selector routing outright (public-self-hosted-routing), so the reconciliation is the full hosted conversion, not a one-line declaration. Hosted minutes are free for public repositories, and this removes the standards CI load from the self-hosted fleet entirely.

Reusable pins move to 90f1c54 where a reviewed contract exists at that revision; standards-sync stays at its newest registered contract (ec91c34). This supersedes the selector-pin portion of #189.

Verification

node components/runner-policy/runner-policy.mjs --root . --repository-visibility public passes; 224/224 runner-policy component tests pass; actionlint clean on all seven workflows; lefthook gauntlet green.

Related

No linked issue. #189 (superseded selector pins), #195 (policy exception-category removal this builds on), melodic-software/ci-workflows#141/#144 (the 90f1c54 revision).

🤖 Generated with Claude Code

https://claude.ai/code/session_01YZxBP1B8Hf7ZRaqDrP6ma9

The repository is now public, and the runner-policy engine forbids
local-runner selector routing for public repositories, so declare
visibility "public" (selfHostedCi false, exception inventory emptied)
and remove the select-runner job from all seven workflows. Every lane
runs on GitHub-hosted ubuntu-24.04 — free for public repositories —
and each reviewed reusable receives its runner input explicitly.

Reusable pins move to 90f1c54 where a reviewed contract exists at that
revision (do-not-merge-gate, semantic-pr, pr-issue-linkage, link-check,
claude-review, zizmor, osv-scanner); standards-sync stays at its newest
registered contract, ec91c34.

Verified: the policy engine passes with public visibility evidence,
224/224 runner-policy component tests pass, actionlint clean on all
seven workflows.

Co-Authored-By: Claude Fable 5 (1M context) <noreply@anthropic.com>
@kyle-sexton

Copy link
Copy Markdown
Contributor Author

Recommendation (agent, session "Self Hosted Actions"): merge this next. Since the repo flipped public, every standards PR fails the ci-status runner-policy lane on the visibility mismatch (repository visibility evidence is public, but .github/runner-policy.json declares private) — currently blocking #189 and #193. This PR is the reconciliation and is CLEAN. #198 covers only the declaration and is subsumed by this PR — close it when this merges. Note: #189 bumps select-runner pins this PR removes; it will need a refresh + conflict resolution after this lands.

@kyle-sexton
kyle-sexton merged commit c1f8c34 into main Jul 18, 2026
44 checks passed
@kyle-sexton
kyle-sexton deleted the ci/public-hosted-posture branch July 18, 2026 20:17
kyle-sexton added a commit that referenced this pull request Jul 18, 2026
#201)

## What

Register `standards-sync.yml@0b45b9f` in the runner policy (contract
body copied from the reviewed `ec91c343` entry), record the lockstep
provenance note, and move `sync.yml`'s pin to it.

## Why

The sync wave still ran `standards-sync@ec91c34`, which predates the
PR-body template fix — every distributed sync PR failed its target's
pr-issue-linkage gate and needed a hand-patched body (dotfiles#225,
provisioning#175, claude-code-plugins#345 this wave). The
`ec91c343..0b45b9f` diff for the reusable is confined to the body
heredoc: it adds the "No linked issue" sentence and a `## Related`
section (melodic-software/ci-workflows#146); inputs, secrets,
permissions, and routing are unchanged.

## Verification

224/224 runner-policy component tests pass; the policy engine passes
with public visibility evidence; actionlint clean on sync.yml;
markdownlint + biome + lefthook gauntlet green.

## Related

No linked issue. melodic-software/ci-workflows#146 (template fix), #200
(public posture this builds on).

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

https://claude.ai/code/session_01YZxBP1B8Hf7ZRaqDrP6ma9

Co-authored-by: Claude Fable 5 (1M context) <noreply@anthropic.com>
kyle-sexton added a commit to melodic-software/claude-code-plugins that referenced this pull request Jul 18, 2026
## What

Declare `visibility: "public"` in `.github/runner-policy.json`
(selfHostedCi false) and remove the `select-runner` job from all six
workflows: every lane runs on GitHub-hosted `ubuntu-24.04`, each
reviewed reusable receives its `runner` input explicitly, and pins move
to `90f1c54`. This branch also carries the standards-sync
materialization from #345 (the 90f1c54 contract registrations the policy
engine needs) — #345's diff becomes empty once this merges.

## Why

The repository is public but its runner policy declared private — the
engine fails closed on that mismatch, which is the `Runner policy` red
on #345 and every current PR. Same reconciliation as
melodic-software/standards#200: for public repositories the engine
forbids local-runner selector routing outright, so the fix is the full
hosted conversion. Hosted minutes are free for public repositories, and
this removes ccp's CI + claude-review load from the self-hosted fleet —
ccp was the largest queue consumer today (37 queued runs at peak).

## Verification

The synced policy engine passes with public visibility evidence
(`--repository-visibility public`); actionlint clean on all six
workflows. Required-check contexts are preserved (`ci-status`,
`do-not-merge / do-not-merge`, `pr-issue-linkage / pr-issue-linkage`,
`pr-title / pr-title`).

## Related

Closes #347. melodic-software/standards#200 (same posture conversion),
#345 (sync distribution folded in),
melodic-software/ci-workflows#141/#144 (the 90f1c54 revision).

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

https://claude.ai/code/session_01YZxBP1B8Hf7ZRaqDrP6ma9

---------

Co-authored-by: melodic-standards-sync[bot] <300666570+melodic-standards-sync[bot]@users.noreply.github.com>
Co-authored-by: Claude Fable 5 (1M context) <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Jul 18, 2026
…0f1c54 contracts (#203)

## Summary

Registers the two `ci-workflows@90f1c54` contracts that fell through the
cracks when #189 was closed as subsumed by #200: #194 registered six of
the eight reusable contracts at this revision; the `pester`
(hosted-only, `windows-2025`) and `pulumi-version-drift-check`
(runner-input) entries existed only on #189's branch and never reached
main.

Both entries are carried verbatim from #189's branch (review basis
there: byte-identical at 90f1c54 to each workflow's newest previously
approved SHA). The README contract-count paragraph moves from six to
eight accordingly. 224/224 runner-policy tests pass locally.

Consumers: github-iac's pulumi-version-drift-check caller and the
medley/provisioning pester lanes need these once their pins move to
90f1c54.

No linked issue.

## Related

- #189 (closed as subsumed; carried these two entries)
- #194 (registered the other six contracts at this revision)
- #200 (public hosted posture whose subsumption close orphaned these)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Jul 18, 2026
…repo exclusions (#204)

## Summary

`claude-code-plugins` and `standards` went public. The private-repo
exclusion arms in `lychee.toml` still listed both, so links into them
were skipped by the online link-check across every consuming repository.
Drop them per the exclusion block's own keep-in-sync rule; links to the
four remaining private repos stay excluded.

Surfaced by a review thread on melodic-software/github-iac#172 —
`lychee.toml` is a managed materialization there, so the fix lands here
and syncs down.

No linked issue

## Related

- melodic-software/github-iac#172
- #200 (public hosted-runner posture)

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

---------

Co-authored-by: Claude Fable 5 (1M context) <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