feat(runner-policy): register link-check and pulumi runner-input contracts - #156
Conversation
|
Claude finished @kyle-sexton's task in 2m 24s —— View job Code Review
Overall: Clean, minimal, well-structured draft PR. The contracts are correctly shaped, the golden assertions match the policy exactly, and the README fix is accurate. The only blocker is the placeholder SHA, which is already tracked in the finalize step.
|
…racts Register runner-input contracts for the link-check and Pulumi version-drift reusables so strict private consumers can route these privileged scheduled maintenance lanes through the governed selector instead of a fixed hosted image. Each names an exact allowedCallerPermissions of contents:read plus issues:write -- the narrow write-capable caller token its rolling tracking-issue lane needs -- honored only while genuinely selector-routed; the reusables' own permissions are unchanged. Wave 2 of the private-repo hosted-floor elimination (melodic-software/github-iac#78), consuming the reusable-source runner inputs added in ci-workflows PR #124. The contract SHAs are a `feedface...` placeholder pending that PR's squash-merge. Finalize by replacing that value in policy.json, the runner-policy test constant, and the README review note with the merged main commit SHA (all three reusables share it). standards-sync is intentionally deferred: its App-token caller is read-only, so runner-input's write-requiring allowedCallerPermissions waiver does not fit cleanly, and its registration awaits a contract-model decision. hostedExceptionReasons is unchanged; enum-tightening remains the separate last wave. Update the runner-policy golden fixture to assert both new contracts and adjust the README review note and fixed-hosted list. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K3QehVwmWzkBLpKokNCkkt
74f99cf to
d3692ba
Compare
|
Claude finished @kyle-sexton's task in 2m 29s —— View job Code Review
Overall: Correct, minimal, and well-structured draft PR. All three files are internally consistent. No secrets, no injection risk, no tenant concerns. The only thing blocking merge is the placeholder SHA replacement already tracked in the PR's finalize step.
|
Replace the `feedface...` placeholder with ci-workflows PR #124's squash-merge commit 3dfb18452a8c6059a22e62456390d84feb10b42f, which carries the governed runner input for all three reusables, in policy.json (both contract keys), the runner-policy golden-fixture constant, and the README review note. The registered link-check and pulumi-version-drift-check runner-input contracts now pin the reviewed reusable source. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K3QehVwmWzkBLpKokNCkkt
|
Claude finished @kyle-sexton's task in 1m 47s —— View job Code Review
Overall: The finalize commit correctly replaced all four
|
|
Claude finished @kyle-sexton's task in 2m 41s —— View job Code Review
Overall: Functionally correct. The contracts are well-formed, golden assertions are consistent with
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 53a2e9bfd1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The wave-1 merge SHA is now the reviewed ci-workflows floor-conversion commit, not a pending placeholder. Correct the README review note and the runner-policy fixture comment so neither describes 3dfb18452a8c6059a22e62456390d84feb10b42f as an unresolved placeholder or a non-real SHA now that the contracts allowlist it as production. Addresses the Codex review on #156. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K3QehVwmWzkBLpKokNCkkt
|
Claude finished @kyle-sexton's task in 1m 43s —— View job Code Review
Overall: The latest commit ( Latest commit — stale-prose fixes
// The reviewed ci-workflows floor-conversion merge commit that carries these
// reusables' runner input; shared by both runner-input contracts.Accurate. ✅
Accurate — the merge has landed and the SHA is finalized. ✅ Remaining files (unchanged from prior approval)
No outstanding findings. All three prior review rounds are resolved. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2e82ac21d9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Summary
Register
runner-inputcontracts incomponents/runner-policy/policy.jsonfor two floor-conversion reusables, both pinning ci-workflows PR #124's squash-merge commit3dfb18452a8c6059a22e62456390d84feb10b42f(the reviewed source that carries the governedrunnerinput):link-check.yml—allowedInputs: ["runner", "args"],allowedCallerPermissions: {contents: read, issues: write}.pulumi-version-drift-check.yml—allowedInputs: ["runner"],allowedCallerPermissions: {contents: read, issues: write}.Each carries
allowedCallerPermissionsbecause its rolling tracking-issue lane writes issues through the callerGITHUB_TOKEN; the waiver is honored only while the call is genuinely selector-routed, and the reusables' own permissions are unchanged. This also corrects the now-false README claim that the Pulumi version-drift monitor "remains fixed to explicit GitHub-hosted images," adds a review note for both contracts, and extends the runner-policy golden fixture (runner-policy.test.mjs) to assert them.hostedExceptionReasonsis unchanged — enum-tightening is the separate last wave and must not land before every consumer has dropped its floor exceptions.Why
Wave 2 of the private-repo hosted-floor elimination (melodic-software/github-iac#78, decision of record 2026-07-16). ci-workflows PR #124 (Wave 1) added the governed
runnerinput to these reusables' source; this PR registers the reviewed contracts so each private consumer (Wave 3) can add aselect-runnerjob, route the reusable to the fleet, and drop itshosted-control-plane/privileged-control-planeexception.policy.jsonis the upstream source of truth synced to five consumers, so the contract belongs here.Deferred — standards-sync
The third floor-conversion reusable,
standards-sync.yml, is intentionally not registered here. Its callerGITHUB_TOKENis read-only (sync.ymldeclarespermissions: contents: read; all writes go through a minted App token), but arunner-inputcontract that passes secrets must carryallowedCallerPermissions, which the validator requires to include at least onewrite(runner-policy.mjs:186-198). There is no honest caller write to declare, so registering it would bake a least-privilege inaccuracy into the managed contract. This is a contract-model gap (the secrets waiver is coupled to a write requirement) routed to the runner-policy component owner for a "reviewed secrets + read-only caller" contract shape;standards-synckeeps its hosted-only contract until that lands.Test plan
npm run test:runner-policy— passing with two new golden assertions on the registered contracts: 143/143 on this branch base, and 146/146 verified against a local rebase onto currentmain(post feat(runner-policy): admit review-tier variable as a governed selector input #155 review-tier admission, feat(dependabot-policy): add org Dependabot policy analyzer component #153 dependabot-policy component).npm run lint:runner-policy(GITHUB_REPOSITORY=melodic-software/standards) —Runner policy passedon both the branch base and the current-mainrebase (the feat(runner-policy): admit review-tier variable as a governed selector input #155 validator).3dfb184…(PR docs(issue-tracker): codify closing-keyword, title, and comment house style #124 squash-merge) acrosspolicy.json(both contract keys), the golden-fixture constant, and the README review note.Related
No linked standards issue. Cross-repo references:
🤖 Generated with Claude Code
https://claude.ai/code/session_01K3QehVwmWzkBLpKokNCkkt