Skip to content

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

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

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

Conversation

@kyle-sexton

Copy link
Copy Markdown
Member

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

Summary

Registers ci-workflows v0.60.0
(82ca5ca9be6e18a1addb7986eae15689339aedbc) contracts for intake-triage.yml,
pr-review.yml and pr-review-security.yml, so claude-code-plugins can repin
intake triage from v0.58.0 and both review lanes from v0.59.1 to v0.60.0. The
intake-triage repin carries ci-workflows#854,
which claude-code-plugins#8491 needs.

Review: the GitHub Security & Cost session reviews this PR. The gate cannot
auto-approve these entries, so the copies rest on the review below. The README
rollout line says "sign-off pending"; replace it with "signed off by hand on
" at sign-off.

Fix

  • components/runner-policy/policy.json: verbatim copies at 82ca5ca9 of the
    v0.58.0 (5e18f3d6) intake-triage entry and the v0.59.1 (8bd4d7f9)
    pr-review and pr-review-security entries. No input, secret mapping, caller
    permission or routing is added or widened.
  • components/runner-policy/README.md: the v0.60.0 rollout line, sign-off
    pending.
  • components/runner-policy/runner-policy.test.mjs: a test that the three
    v0.60.0 entries equal their previous entries and are the only keys at that SHA.

Review basis

Git blob SHAs of the workflow files and tree SHAs of the commit-relative ($/)
actions they use, from the contents API at each ref:

Path 5e18f3d6 (v0.58.0) 8bd4d7f9 (v0.59.1) 82ca5ca9 (v0.60.0)
workflows/intake-triage.yml 8ff8eac3 8ff8eac3 0c69f08c
workflows/pr-review.yml 47a2b1c9 4f3d4e44 4f3d4e44
workflows/pr-review-security.yml 16e9be5b 30b595b9 30b595b9
actions/check-subprocess-sandbox d9d60153 d9d60153 92d69c1b
actions/report-lane-outcome 5f583be1 5f583be1 0b6bb70a
actions/run-claude-cli 0edc45c1 0edc45c1 6234a8b1
actions/apply-claude-managed-settings 1301e911 1301e911 1301e911
actions/check-author-trust 3517c76f 3517c76f 3517c76f
  1. intake-triage.yml (v0.58.0..v0.60.0, four hunks per job pair, none in
    on.workflow_call, permissions or runs-on): the issue file gives each
    comment's html_url and the prompt says the model reads it
    (ci-workflows#854);
    the report step passes lane-id: intake-triage to report-lane-outcome.
  2. report-lane-outcome (ci-workflows#853):
    new optional lane-id and handoff inputs; with a lane id and a credential
    secret name that maps to a kind, each annotation also carries a
    lane-outcome {json} record built from the same closed-pattern facts as the
    existing tokens. The credential appears as its secret name only, never a value.
  3. check-subprocess-sandbox and run-claude-cli/lane.cjs
    (ci-workflows#849):
    the sandbox probe's error text names Docker's seccomp profile. Message text
    only.

The review workflow files are byte-identical to v0.59.1; their change is the
commit-relative actions above, which is the diff the gate declines to
auto-approve.

Verification

  • npm run test:runner-policy: 327 pass, 0 fail, including ✔ the intake-triage and review contracts at the v0.60.0 tag copy their previous entries forward verbatim.
  • npm run lint:runner-policy: Runner policy passed.
  • In the claude-code-plugins repin worktree, node .github/standards/runner-policy/runner-policy.mjs --root .:
    • with its vendored policy (identical to standards main): three
      runner-target-contract failures, auto-approval declined for
      intake-triage.yml, pr-review.yml and pr-review-security.yml at
      82ca5ca9;
    • with this branch's policy.json copied in: Runner policy passed. (file
      restored afterwards).
  • lefthook pre-commit (typos, editorconfig, markdownlint, gitleaks, biome): clean.

Related

  • The claude-code-plugins repin PR passes its runner-policy gate once this
    merges and syncs.
  • ci-workflows v0.60.0.
  • Precedent: #838 (v0.59.1 review contracts).

🤖 Generated with Claude Code

…contracts

Copies the v0.58.0 intake-triage entry and the v0.59.1 pr-review and
pr-review-security entries verbatim to the v0.60.0 tag 82ca5ca9, so
claude-code-plugins can repin those callers (claude-code-plugins#8491).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Security review passed the PR at 83b057e
on 2026-10-22 and authorized the sign-off. README wording only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kyle-sexton
kyle-sexton marked this pull request as ready for review October 22, 2026 13:26
@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:27:38.291723Z 9cc1640 Draft marked ready
ℹ️ 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 9cc1640f96fd2662b92199920d23b628afe8564e: 0 finding(s), 0 as inline comments.

No findings. I reviewed all three changed files and posted no inline comments.

What I checked

  • Copies: I read policy.json and compared each new v0.60.0 entry with its source. The intake-triage entry at 82ca5ca9 matches the v0.58.0 (5e18f3d6) entry on routing, role, inputs, secrets and caller permissions. I did not open the v0.59.1 pr-review and pr-review-security source entries myself; the new runner-policy.test.mjs test asserts they match.
  • Test: It checks that the three new entries equal their previous entries, and that exactly these three keys exist at the v0.60.0 SHA.
  • README: The new rollout paragraph sits after the v0.59.1 paragraph. Its SHA, dates and ci-workflows PR references agree with policy.json and the PR context.
  • Closing issue: There is none. The PR uses Refs: melodic-software/claude-code-plugins#8491, so there are no acceptance criteria to check.
  • Path-scoped rules: The only rule, pr-body-contract.md, covers the PR body. The body opens with a Refs: line and has Summary, Fix, Verification and Related sections.
  • Plugin manifests: The diff changes none.
  • Paved paths: I did not resolve the standards index, so I checked nothing about paved paths.

What I did not verify

  • I did not run the tests or the lint. The PR's claims of 327 passing tests and Runner policy passed. are the author's and are unverified.
  • I did not compare the blob and tree SHAs in the PR's "Review basis" table against ci-workflows. That table is also the author's.

Observation, not a finding

  • The README line for v0.58.0 still says "sign-off pending", and this PR copies that entry forward. That line is on untouched lines.

@github-actions

Copy link
Copy Markdown

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

Security review: PR #842 at 9cc1640

Result: no security findings. The PR is open and the diff has security-relevant surface, so I read all three files.

What changed. The PR registers three reusable-workflow contracts in components/runner-policy/policy.json at ci-workflows SHA 82ca5ca9be6e18a1addb7986eae15689339aedbc (the v0.60.0 tag): intake-triage, pr-review and pr-review-security. It also adds a README rollout note and a test.

Why it is safe.

  • Verbatim copies. I compared each new entry against its predecessor by hand. intake-triage matches the 5e18f3d entry, and pr-review and pr-review-security match the 8bd4d7f entries. For each, routing, runnerInput, role, allowedInputs, allowedSecrets and allowedCallerPermissions are identical.
  • No widening. The new entries add no input, secret mapping or caller permission. id-token: write and the secret names are carried over unchanged.
  • Test guard. The new test in runner-policy.test.mjs asserts that each v0.60.0 entry deep-equals its predecessor. It also asserts that exactly three keys carry the new SHA, so a stray extra approval would fail.
  • Pinning. The new keys are full 40-character SHA pins, not tags or branches.
  • No instruction-surface deletions. The diff removes nothing, so the instruction-exception register was not needed. No plugin manifests are touched, so there are no manifest <field> lines.

Not verified. The README says the upstream v0.60.0 workflow files keep the same interface. I could not confirm that against the ci-workflows repo, because the gh api call to the tag was blocked in this environment. The in-repo gates, including the commit-relative actions diff that the README says needs manual sign-off, are the control for that claim. It is not something this diff gets wrong.

@kyle-sexton
kyle-sexton merged commit 2d0979f into main Oct 22, 2026
24 checks passed
@kyle-sexton
kyle-sexton deleted the feat/runner-policy-ci-workflows-v0.60.0 branch October 22, 2026 13:33
kyle-sexton added a commit that referenced this pull request Oct 22, 2026
…contracts (#843)

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

- #842 (v0.60.0 registration this copies)
- melodic-software/ci-workflows#856
- melodic-software/ci-workflows#857
- melodic-software/claude-code-account-rotation#288

🤖 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 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>
kyle-sexton added a commit that referenced this pull request Oct 23, 2026
…contract (#848)

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

- melodic-software/ci-workflows#862
- #842 (precedent), #847 (closed, key-only)

🤖 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