Skip to content

feat(runner-policy): register the ci-workflows v0.63.0 pr-review-cli contract - #848

Merged
kyle-sexton merged 1 commit into
mainfrom
feat/runner-policy-pr-review-cli-security
Oct 23, 2026
Merged

kyle-sexton merged 1 commit into
mainfrom
feat/runner-policy-pr-review-cli-security

Conversation

@kyle-sexton

Copy link
Copy Markdown
Member

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

Summary

Registers the runner-policy contract for ci-workflows v0.63.0 pr-review-cli.yml (8778094736e414233110f3e0d6d9948628ba77b5), so claude-code-plugins can move its live security review lane onto it.

Fix

  • policy.json: a hosted-only contract, fixedRunsOn: ["ubuntu-24.04"], the inputs lane, publish, role, model-args, allowed-bot-sender-ids, allowed-author-ids, docs-only-paths, incremental-review and cli-version, and both reviews-role secrets: CLAUDE_API_KEY from REVIEWS_CLAUDE_API_KEY (tried first) and CLAUDE_CODE_OAUTH_TOKEN from REVIEWS_CLAUDE_CODE_OAUTH_TOKEN (after a key handoff).
  • README.md: the v0.63.0 entry.
  • runner-policy.test.mjs: pins the contract; the secret expressions are escaped template literals.

Supersedes the key-only #847.

Verification

  • node --test components/runner-policy/runner-policy.test.mjs: 336 pass, 0 fail.
  • node components/runner-policy/runner-policy.mjs --root .: passed.
  • This branch's analyzer run against the claude-code-plugins security caller that moves to pr-review-cli.yml@8778094 with both secrets: passed; the currently synced policy rejects the same caller with runner-target-contract.
  • biome and markdownlint clean on the changed files.

Related

🤖 Generated with Claude Code

…contract

pr-review-cli is hosted-only: every job runs on ubuntu-24.04. The contract
admits the reviews role's API key and its subscription token, so a caller
can run the key leg first and the subscription leg after a handoff.

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

chatgpt-codex-connector Bot commented Oct 23, 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-23T03:53:05.210166Z 2d477ce 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

Copy link
Copy Markdown

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

Code review: no findings

I reviewed all 3 files in PR #848 (policy.json, README.md, runner-policy.test.mjs), which register the ci-workflows v0.63.0 pr-review-cli contract. I found nothing to flag.

  • Contract shape: the new policy.json entry has the same shape as the neighbouring hosted-only review contracts. It uses routing: hosted-only and fixedRunsOn: ["ubuntu-24.04"]. The secrets use the ${{ secrets.REVIEWS_* }} expression form already used by the existing entries.
  • Docs and tests: the README paragraph matches the contract: the same SHA, the same nine inputs and both secrets. The new test pins the full contract and asserts exactly one entry for that SHA. The escaped template literals produce the same strings as the JSON.
  • Closing issue: the PR uses Refs:, so it closes nothing and there are no acceptance criteria to check. The body follows the PR body contract (Refs: line, then Summary, Fix, Verification, Related).
  • Not independently verified:
    • I could not run the test suite or the analyzer, because the sandbox blocked the commands. The "336 pass" and analyzer results in the PR body are author-claimed.
    • I did not check the input and secret lists against the upstream pr-review-cli.yml at 8778094, because that repo is outside this PR's scope.
  • Minor observation, not a finding: the v0.62.0 README entry records its registration date, and the new v0.63.0 entry does not. It is not required by anything I could find.

@github-actions

Copy link
Copy Markdown

claude-security-review reviewed 2d477cebde42420f448c280eb29908d646f54123: 0 finding(s), 0 as inline comments.

Security review: PR 848 (head 2d477ce)

No security findings. No inline comments posted.

critical-findings: 0

Scope. The PR adds one hosted-only reusable-workflow contract for ci-workflows/.github/workflows/pr-review-cli.yml@8778094736e414233110f3e0d6d9948628ba77b5 to components/runner-policy/policy.json, plus a README entry and a pinning test. The policy file is the org's trust allowlist, so I reviewed it rather than applying the skip gate.

Checked (policy.json L756-L773):

  • The reference is pinned to a full 40-character commit SHA.
  • Routing is hosted-only with fixedRunsOn: ["ubuntu-24.04"], and no runner input is admitted, so a caller cannot redirect jobs to another runner.
  • Only CLAUDE_API_KEY and CLAUDE_CODE_OAUTH_TOKEN are admitted, each mapped to a REVIEWS_-prefixed secret. This matches the existing AUTOMATIONS_ contracts, and the test at runner-policy.test.mjs line 3816 already has a REVIEWS_CLAUDE_API_KEY precedent.
  • The nine admitted inputs include two caller-supplied trust lists, allowed-bot-sender-ids and allowed-author-ids. Whether the workflow honors them is a property of the pinned workflow, not of this diff.
  • No instruction surfaces (CLAUDE.md, AGENTS.md, rules, skills, hooks) are changed, and no plugin manifests are touched, so there are no manifest <field> lines.
  • The PR body contains no embedded instructions aimed at the reviewer.

Not verified. I could not read the pinned pr-review-cli.yml source or confirm that the SHA is the v0.63.0 tag commit, because the approval prompt for the gh api call went unanswered. I did not confirm what the workflow does with the two secrets (the README says the OAuth token is used only after the API-key handoff). This is a residual note for the merger, not a finding.

The instruction-exception register was not consulted, because the diff has no instruction-surface changes.

@kyle-sexton
kyle-sexton merged commit 09697fe into main Oct 23, 2026
22 checks passed
@kyle-sexton
kyle-sexton deleted the feat/runner-policy-pr-review-cli-security branch October 23, 2026 04:23
kyle-sexton added a commit that referenced this pull request Oct 23, 2026
…contract (#849)

Refs: melodic-software/claude-code-plugins#9307

## Summary

Registers `pr-review-cli.yml@83b739f625b501ad40c65dee7168d836883195e1`
(ci-workflows
[v0.63.1](https://github.com/melodic-software/ci-workflows/releases/tag/v0.63.1))
so claude-code-plugins#9307 can re-pin its security lane to it.

## Fix

v0.63.1 changes only the publish step
([ci-workflows#865](melodic-software/ci-workflows#865):
titled completion notice, demoted CRITICAL findings counted). The
contract copies the v0.63.0 entry forward verbatim: same routing, inputs
and secrets.

## Verification

- `node --test runner-policy.test.mjs` in `components/runner-policy`:
337 pass, including the new copy-forward test.

## Related

- Same shape as #848 (v0.63.0).

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

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Oct 23, 2026
Refs: melodic-software/claude-code-plugins#9276

## Summary

Registers `pr-review-cli.yml@4edeccd87cf60ef539ce5109b78454217d5f2049`
(ci-workflows
[v0.64.0](https://github.com/melodic-software/ci-workflows/releases/tag/v0.64.0))
so callers can pin it and pass its two new optional inputs, `hold-label`
and
`hold-paths`.

## Fix

v0.64.0 adds an optional hold step to the status job

([ci-workflows#864](melodic-software/ci-workflows#864)).
The new contract copies the v0.63.1 entry forward and appends
`hold-label` and
`hold-paths` to `allowedInputs`. Routing (`hosted-only`), `fixedRunsOn`
(`ubuntu-24.04`) and the two reviews-role secrets are unchanged. No
caller
permission is added: the hold step writes through the status job's
existing
`pull-requests: write` grant. A diff of the workflow between v0.63.1 and
v0.64.0
shows no other input, secret or `runs-on` change.

## Verification

- `node --test runner-policy.test.mjs` in `components/runner-policy`:
338 pass,
0 fail, including the new test that the v0.64.0 entry equals v0.63.1
plus the
  two hold inputs.
- `npm run lint:runner-policy`: passed.
- `node --test components/claude-lanes/repin-policy-lockstep.test.mjs`:
23 pass.
- Pre-commit (typos, editorconfig, markdownlint, gitleaks, biome):
clean.

## Related

- Same shape as #849 (v0.63.1) and #848 (v0.63.0).
- After merge, the push-triggered `maintenance-sync-standards` run opens
the
sync PR into claude-code-plugins'
`.github/standards/runner-policy/policy.json`.

🤖 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