Skip to content

fix(runner-policy): approve pr-review-cli.yml v0.66.1 contract with status job reads - #900

Merged
kyle-sexton merged 1 commit into
mainfrom
fix/runner-policy-pr-review-cli-v0.66.1
Oct 29, 2026
Merged

kyle-sexton merged 1 commit into
mainfrom
fix/runner-policy-pr-review-cli-v0.66.1

Conversation

@kyle-sexton

Copy link
Copy Markdown
Member

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

Summary

This PR registers the reviewed pr-review-cli.yml contract at the
ci-workflows v0.66.1
tag (20a822d73b6e2d7e21d48e609a01b427e0e161e7), so callers can pin that
release. Auto-approval declines it today: "jobPermissions changed since the
previously reviewed ...pr-review-cli.yml@3180217". The change is
ci-workflows#904:
the status job adds actions: read and checks: read so the cost hold can
read its earlier runs' check-run notices. The owner approved those read-only
scopes for this lane (claude-code-plugins#9635, Q1(a)).

Fix

  • policy.json: the v0.66.1 pr-review-cli.yml entry copies its v0.65.14
    (3180217) entry forward unchanged. A hosted-only contract has no field for
    caller permissions (the schema refuses minimumCallerPermissions without
    runnerInput), so the reviewed change is recorded in the README and test,
    not in the entry.
  • README.md: one paragraph on the v0.66.1 contract and the reviewed
    permission change.
  • runner-policy.test.mjs: a test that the v0.66.1 entry equals the v0.65.14
    entry.

Verification

  • Surface diff of pr-review-cli.yml between 3180217 and 20a822d
    (comments excluded): the status job's actions: read and checks: read
    lines and one STATUS_JOB step env value. on.workflow_call inputs,
    secrets and runs-on do not change.
  • node --test components/runner-policy/runner-policy.test.mjs components/claude-lanes/repin-policy-lockstep.test.mjs:
    398 pass, 0 fail.
  • runner-policy.mjs --root <claude-code-plugins#10782 head d4b21de>:
    • with this policy.json: Runner policy passed.
    • with the currently synced policy.json: the two pr-review-cli.yml@20a822d
      runner-target-contract findings that fail #10782's lint-repo.
  • Left out: pr-review-cli.yml@9a886d5 (v0.66.0). No caller pins it.

Related

  • claude-code-plugins#10782:
    repins the review callers to v0.66.1. Its lint-repo and ci-status
    fail on this missing contract and pass once it syncs.
  • #895: the claude-lanes
    re-pin to v0.66.0. It copies forward pr-review.yml,
    pr-review-security.yml and maintenance-sync-standards.yml but not
    pr-review-cli.yml.
  • #885: the v0.65.14
    pr-review-cli.yml registration, which this follows.
  • ci-workflows#904:
    the permission change reviewed here.

🤖 Generated with Claude Code

…tatus job reads

Register the reviewed pr-review-cli.yml contract at the ci-workflows v0.66.1
tag (20a822d73b6e2d7e21d48e609a01b427e0e161e7). Since v0.65.14 the
workflow's only surface change is the status job's permissions block,
which adds actions: read and checks: read so the cost hold can read its
earlier runs' check-run notices (ci-workflows#904). Both are read-only
scopes the callers already grant, and a hosted-only contract records no
caller permissions, so the entry copies v0.65.14 forward unchanged.
Auto-approval declines on that jobPermissions change, so the entry is
added by hand.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@kyle-sexton
kyle-sexton marked this pull request as ready for review October 28, 2026 23:04
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 28, 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-28T23:05:36.121418Z 4c47234 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 4c4723465914b3a5a5e7d0d95d2cad879a61a993: 0 finding(s), 0 as inline comments.

No findings. I read the full diff (policy.json, README.md and runner-policy.test.mjs) and the PR context, and compared the new policy.json entry with the v0.65.14 one by eye.

  • Policy entry: the new pr-review-cli.yml@20a822d… entry matches the @3180217… entry field for field: routing, fixedRunsOn, the 11 allowedInputs and the 3 allowedSecrets. The new test checks the same equality, so the claim in the PR body holds.
  • README: the new v0.66.1 paragraph follows the v0.65.14 one. It records the reviewed actions: read and checks: read change on the status job, which a hosted-only contract has no field for. The old "At the same tag, the claude-lanes re-pin…" now reads "At the v0.65.14 tag…", which keeps the claude-lanes paragraph attached to the right tag.
  • Test: the new test follows the pattern of the v0.65.14 one. It asserts that the previous entry exists and that the two are deeply equal.
  • Closing issue: the PR uses Refs: claude-code-plugins#9635, so there is no closing issue and no acceptance criteria to check. The PR body has the required sections.
  • Not verified: I did not run the test suite, and I did not check the PR body's claim about the pr-review-cli.yml surface diff between v0.65.14 and v0.66.1. Both are author-claimed.
  • Hold: none. The change grants no new caller permissions and nothing here can start a charge.

@github-actions

Copy link
Copy Markdown

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

Security review: PR #900 @ 4c47234

critical-findings: 0

No security findings.

What I read: the full diff via gh pr diff 900 (no FULL DIFF: or PR CONTEXT: file was supplied), plus the neighbouring v0.65.14 entry in components/runner-policy/policy.json.

What changed: the PR adds one approved-contract entry to policy.json for pr-review-cli.yml at the v0.66.1 SHA. It also adds a README paragraph and a test.

Trust-control check: the new entry matches the v0.65.14 entry field for field. I compared the two entries as printed in the diff and at policy.json lines 1390-1411.

  • Routing is hosted-only with fixedRunsOn: ["ubuntu-24.04"].
  • The 11 allowedInputs, including hold-paths and hold-label, are identical.
  • The three allowedSecrets map to the same REVIEWS_* and FALLBACK_* secrets with no new ones.

So the entry admits no new input, secret, or runner target. It only lets callers pin one more SHA that has the same contract. The listed trust controls under .github/actions/ and .github/scripts/pr-merge/ are untouched. hold-paths is unchanged, so no merge hold is weakened.

Not verified: the README says v0.66.1 adds actions: read and checks: read to the status job. Those are read-only scopes, and the PR records an owner approval for them (claude-code-plugins#9635 Q1(a)). I couldn't run the compare of the two ci-workflows tags to confirm the upstream diff, so I took that claim from the PR text. A hosted-only contract has no field for caller permissions, so policy.json can't widen them. Granting them is the callers' job, and those callers aren't in this diff.

Manifest items: none hit, since no plugin.json or marketplace.json changed. Instruction-surface deletions: none.

@kyle-sexton
kyle-sexton merged commit 63cafbf into main Oct 29, 2026
24 checks passed
@kyle-sexton
kyle-sexton deleted the fix/runner-policy-pr-review-cli-v0.66.1 branch October 29, 2026 01:01
kyle-sexton added a commit that referenced this pull request Oct 29, 2026
…#901)

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

## Summary

Every re-pin pull request whose lockstep copies a runner-policy contract
forward fails
`check-typescript`, because `repin-policy-lockstep.mjs` writes
`policy.json` with
`JSON.stringify(policy, null, 2)`. That spreads short arrays such as
`allowedInputs` over one
line per item, and Biome's format check (`File content differs from
formatting output`) rejects
the file. #895 failed this way at 09f6f35.

## Fix

`maintenance-repin-ci-workflows.yml` gains a step after the lockstep
step, gated on the same
`steps.repin.outputs.changed == 'true'`. It runs `npm ci
--ignore-scripts` at the root and
`node_modules/.bin/biome format --write
--config-path=components/biome/biome.json` on
`components/runner-policy/policy.json`. The root lockfile pins
`@biomejs/biome` 2.5.15, the
version `check-typescript`'s biome action derives from the root
`package.json`, and the config
is the one `check-typescript` passes. No new action and no new
permission.

## Verification

- Ran the step's commands on #895's unformatted `policy.json` (09f6f35):
the output is
byte-identical to the hand-formatted fix cc1d460, on which
`check-typescript` and `ci-status`
  pass.
- `actionlint` and `zizmor` (offline) report nothing for the workflow.
- No existing test covers this workflow's step list;
`repin-callers.test.sh` covers the script.

## Related

- #895, the re-pin pull request this failure
blocked.
- #900, which also edits
`components/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