Skip to content

feat(runner-policy): register ci-workflows v0.61.0 intake and review contracts - #843

Merged
kyle-sexton merged 2 commits into
mainfrom
feat/runner-policy-ci-workflows-v0.61.0
Oct 22, 2026
Merged

kyle-sexton merged 2 commits into
mainfrom
feat/runner-policy-ci-workflows-v0.61.0

Conversation

@kyle-sexton

Copy link
Copy Markdown
Member

Refs: melodic-software/claude-code-account-rotation#288

Summary

Registers the ci-workflows v0.61.0 tag (164c2809f6150429b6f24d4a2777bb377af953d9) contracts for intake-triage.yml, pr-review.yml and pr-review-security.yml, in the same shape as #842 did for v0.60.0.

Fix

  • components/runner-policy/policy.json: three entries keyed @164c2809…, verbatim copies of the @82ca5ca… (v0.60.0) entries, each placed right after its v0.60.0 entry.
  • components/runner-policy/README.md: a v0.61.0 sign-off paragraph after the v0.60.0 one.
  • components/runner-policy/runner-policy.test.mjs: REPINE_LANE_SHA_V0_61_0 and a test that the three v0.61.0 contracts equal their v0.60.0 entries and that exactly three v0.61.0 contracts exist.

v0.61.0 is v0.60.0 plus melodic-software/ci-workflows#856 and melodic-software/ci-workflows#857 (git log 82ca5ca..164c280). In git diff 82ca5ca 164c280:

  • intake-triage.yml: no change to workflow_call inputs, secrets, job permissions or runs-on; only steps, job outputs and the status job change.
  • pr-review.yml and pr-review-security.yml: each adds two optional inputs, credential-name (default CLAUDE_CODE_OAUTH_TOKEN) and fallback-credential-name (default empty). Callers do not pass them, so allowedInputs stays as at v0.60.0. Secrets, permissions and routing are unchanged.

Verification

  • npm run test:runner-policy: 328 tests, 328 pass, 0 fail, including the new v0.61.0 test.
  • Adding credential-name to the new pr-review entry made the new test fail (1 fail); the file was then restored.
  • npm run lint:runner-policy: Runner policy passed.
  • biome (components/biome/biome.json) on components/runner-policy, markdownlint, typos, editorconfig-checker and gitleaks: clean (lefthook pre-commit also passed).

Related

🤖 Generated with Claude Code

…contracts

Carry the intake-triage, pr-review and pr-review-security contracts
forward verbatim to the v0.61.0 tag (164c2809). The review workflows'
new optional credential-name inputs are not passed by callers, so the
allowed inputs stay as at v0.60.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-22T13:59:16.312696Z 2aeadc6 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

claude-review reviewed e19b8d0e0dcc9855ad2bab26743e6882a0e04c25: 0 finding(s), 0 as inline comments.

Incremental review (e19b8d0, since 2aeadc6)

I found nothing to report. The only change is in components/runner-policy/README.md, in the v0.61.0 paragraph.

  • Sign-off wording: the paragraph now says the owner approved on 2026-10-22 on condition that an independent security review of the v0.60.0 to v0.61.0 diff passed. It also says that review found nothing above informational. I read the new sentence against the rest of the paragraph and found nothing that contradicts it.
  • Review-workflow description: "the review workflows report the first attempt's usage limit as its own record, a step that needs a fallback token no allowed caller can pass" is consistent with the PR body. The body says fallback-credential-name defaults to empty, callers don't pass it, and allowedInputs is unchanged. That is also why the README says neither new input is allowed.
  • Test coverage: runner-policy.test.mjs does not read README prose, so this wording change can't break a test.

Two things I could not check from this diff:

  • I couldn't verify that the independent security review happened or what it found. The README presents it as the owner's recorded approval condition, so it rests on the owner's word.
  • The unchanged first sentence of the paragraph is hard to read. After "informational," the list "intake-triage, pr-review and pr-review-security" could be taken as part of the preceding clause. That is a style point, so I did not report it.

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

claude-security-review needs no new review of e19b8d0e0dcc9855ad2bab26743e6882a0e04c25: every file in scope matches docs-only-paths.

Security review: PR #843 (head 2aeadc6)

No security findings.

The PR adds three allowlist entries to components/runner-policy/policy.json for ci-workflows v0.61.0 (164c2809…): intake-triage, pr-review and pr-review-security. It also adds a README paragraph and a test that checks the new entries against the old ones.

  • Entries match v0.60.0. I compared each new entry with its v0.60.0 entry (82ca5ca9…) using jq, and all three are identical. They have the same allowedInputs, allowedSecrets, allowedCallerPermissions and routing. Nothing widens: no new input, no new secret, no higher caller permission.
  • New optional inputs stay out. The credential-name and fallback-credential-name inputs that v0.61.0 adds to pr-review and pr-review-security are not in allowedInputs. A caller that passed them would be rejected by the policy gate, which is the safe default.
  • Pin is a full SHA. Every added entry is keyed on the full 40-character commit SHA, not a tag or branch. I could not check that the SHA is the v0.61.0 tag, because the sandbox gave no cross-repo access. The README says it was signed off by hand.
  • Test only reads data. The added test reads the policy and compares entries. It adds no execution surface and does not weaken any assertion.
  • Skip gates and register. No .claude-plugin manifests changed, so there are no manifest <field> lines. No standing instruction was deleted, narrowed or softened, so the instruction-exception register did not apply.

Replace "signed off by hand" with the actual approval: the owner approved on
the condition that an independent security review of the v0.60.0 to v0.61.0
diff passed, and it did. Name the review-lane change as a workflow change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kyle-sexton
kyle-sexton enabled auto-merge (squash) October 22, 2026 14:05
@kyle-sexton
kyle-sexton merged commit 9807988 into main Oct 22, 2026
22 checks passed
@kyle-sexton
kyle-sexton deleted the feat/runner-policy-ci-workflows-v0.61.0 branch October 22, 2026 14:15
kyle-sexton added a commit that referenced this pull request Oct 22, 2026
…contracts (#846)

No related issue: registers the ci-workflows v0.62.0 contracts so
claude-code-plugins can repin to it.

## Summary

Registers the ci-workflows
[v0.62.0](https://github.com/melodic-software/ci-workflows/releases/tag/v0.62.0)
tag (`2fe38c031867900824c164e33a140a335ed9ecf0`) contracts for
`intake-triage.yml`, `pr-review.yml` and `pr-review-security.yml`, in
the same shape as
[#843](#843) (v0.61.0)
and [#842](#842)
(v0.60.0). v0.62.0 adds only
[ci-workflows#858](melodic-software/ci-workflows#858),
which bounds the subprocess isolation install that timed out in two
hosted security-review runs on claude-code-plugins.

## Fix

- `components/runner-policy/policy.json`: three entries keyed
`@2fe38c03…`, verbatim copies of the `@164c2809…` (v0.61.0) entries,
each placed right after its v0.61.0 entry.
- `components/runner-policy/README.md`: a v0.62.0 rollout paragraph
after the v0.61.0 one.
- `components/runner-policy/runner-policy.test.mjs`:
`REPINE_LANE_SHA_V0_62_0` and a test that the three v0.62.0 contracts
equal their v0.61.0 entries and that exactly three v0.62.0 contracts
exist.

### Review basis

`git diff 164c2809 2fe38c03` (ci-workflows compare API) touches four
files: the three workflows and
`.github/scripts/claude-lane-install-isolation.test.cjs`. No
commit-relative action changes.

- For each workflow, `yq` comparison of `.on` (`workflow_call` inputs
and secrets), `.permissions`, each job's `permissions`, `runs-on` and
`timeout-minutes`, the job list, and every step's `uses`: identical
between the two tags.
- The only hunks are the "Install subprocess isolation" step
(`pr-review.yml`, `pr-review-security.yml`) and the two "Isolate the
runner" steps (`intake-triage.yml`): apt is skipped when `bwrap` and
`socat` are present, every `apt-get` call runs under `sudo timeout`
against one shared deadline (50 s in the review lanes, 100 s in intake),
and the final check requires both tools.

## Verification

- `npm run test:runner-policy`: 335 tests, 335 pass, 0 fail, including
`✔ the intake-triage and review contracts at the v0.62.0 tag copy their
v0.61.0 entries forward verbatim`.
- `npm run lint:runner-policy`: `Runner policy passed.`
- Against the claude-code-plugins repin worktree (three callers moved to
`@2fe38c03…`): its vendored policy gives three `runner-target-contract`
failures (auto-approval declined); this branch's `runner-policy.mjs` and
`policy.json` give `Runner policy passed.`
- lefthook pre-commit (typos, editorconfig, markdownlint, gitleaks,
biome): clean.
- Left out: nothing.

## Related

-
[ci-workflows#858](melodic-software/ci-workflows#858),
released in
[v0.62.0](https://github.com/melodic-software/ci-workflows/releases/tag/v0.62.0).
- The claude-code-plugins repin PR passes its runner-policy gate once
this merges and syncs.
- [#844](#844)
(automated repin of the standards lane components to v0.61.0) is
separate and not touched here.

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

Co-authored-by: Claude Opus 5.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