Repository navigation
fix(pr-review-cli): read #<number> in a cost decision as merge-holds does - #876
Conversation
…does The hold step's matcher for `#<number>` in a linked-issue decision differed from merge-holds.mjs namesPull (claude-code-plugins#9569). It took `.#7` and `-#7` and refused `##7` and ``. It now uses the same pattern, so the hold step and the merge-side readers agree on which decisions name the pull request. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Claude finished @kyle-sexton's task in 1m 28s —— View job Security review — PR #876
Scope: hold.cjs#L135-L142 renames and re-implements the Analysis: No new vulnerability is introduced by this change, and GitHub Actions trigger/permission hardening (zizmor's lane) doesn't apply — no workflow YAML, Manifest check: not applicable — no No security issues found. critical-findings: 0 |
|
Claude finished @kyle-sexton's task in 1m 51s —— View job CI code review — PR #876
Scope. This PR replaces the Findings: none.
claude-lane-summary: lane=claude-review sha=9d3ed2de736240d706f5c95d1dad00b07d31d293 run=40064268897 |
|
claude-security-review has reviewed this pull request through 5c726a1; a later push is reviewed from there. |
|
claude-review has reviewed this pull request through 5c726a1; a later push is reviewed from there. |
…ter one #9436's case: the owner lifts the cost hold at head A, a base-only merge makes head B, and the review holds for cost again at B. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 43s —— View job CI code review — PR #876 (incremental)
Scope. Since this lane's last review ( Analysis. The new test records a cost decision ( Findings: none. I could not execute
claude-lane-summary: lane=claude-review sha=a6edea3f7989c0d4dc01d9a2e892f9f75053e11e run=40064546026 |
|
Claude finished @kyle-sexton's task in 29s —— View job Security review — PR #876 (incremental)
Scope. Since this lane's last review at Skip gate: met (item 2 — no security-relevant surface). This diff only adds a test case; it does not modify No security issues found. critical-findings: 0 |
…r check claude-code-plugins#9569 (head 6c3b6ae9) now also refuses `##<n>` and `&#<n>`, and takes a Refs target only when the issue read answers that same number and is not a pull request. The hold step matches both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 58s —— View job CI code review — PR #876 (incremental)
Scope. Since this lane's last review (
Plus matching coverage in Analysis.
Findings: none.
claude-lane-summary: lane=claude-review sha=5c726a1e830c8251a0a4c8e261de576fe7e5f78b run=40064885651 |
|
Claude finished @kyle-sexton's task in 56s —— View job Security review — PR #876 (incremental)
Scope. Since this lane's last review (
Analysis. Both changes tighten
No new trust boundary, injection surface, or authorization gap is introduced; this is a parity/hardening fix, not a loosening. No manifest, instruction-surface, or trust-gate path ( No security issues found. critical-findings: 0 |
…contract (#867) No related issue: follow-up to [ci-workflows#876](melodic-software/ci-workflows#876). claude-code-plugins' review callers pin to this release in [claude-code-plugins#9589](melodic-software/claude-code-plugins#9589). ## Summary Registers `pr-review-cli.yml@f133c6651f866845e18595d26cf59d4043b5b642`, which is ci-workflows [v0.65.3](https://github.com/melodic-software/ci-workflows/releases/tag/v0.65.3). ## Fix v0.65.3 changes only `apply-review-hold/hold.cjs` and its test. `git diff --stat e7f935fc f133c665` lists those two files and nothing else. `pr-review-cli.yml` is byte-identical to v0.65.2, so the contract copies the v0.65.2 entry from [#866](#866) forward verbatim. ## Verification - `node --test runner-policy.test.mjs` in `components/runner-policy`: 345 pass, 0 fail. This includes the new copy-forward test. ## Related - [#866](#866) (v0.65.2) and [#864](#864) (v0.65.1) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Refs: melodic-software/claude-code-plugins#9436
Summary
This aligns the hold step's cost-decision reader with claude-code-plugins' merge-side readers in claude-code-plugins#9569 (head
6c3b6ae9). It also adds the later-head test that #9436's Verification asks for. The rule is the owner's Q17 (b), recorded at #9436 comment 6380099108: a cost decision binds to one pull request and covers every head of it.Fix
#<number>matching. The pattern is now(?:^|[^A-Za-z0-9_#&/.-])#N(?:[^0-9]|$), the same asnamesPullatmerge-holds.mjs:436-438on #9569's head..#7,-#7,##7,ando/r#7do not name the pull request. The #875 matcher accepted.#7and-#7.issues.getreturns the same number with nopull_request, asmerge-holds.mjs:484does. feat(pr-review-cli): log the job token's api budget and skip a decided cost re-hold #875 checked only thatpull_requestwas absent.apply-review-hold.test.cjs:622).Differences from the merge-side readers that stay
These are deliberate, and each fails closed at merge:
merge-holds.costDecisionand babysit'scost_decisionread only a decision linked from the body. A merge still needs that link.merge-holdscheck trusted-actor ids (allowed-author-ids, thehumanids intrusted-actors.json), while babysit checks admin permission.Verification
apply-review-hold.test.cjsadds cases for the exclusion set, a Refs read that answers another number, and the later-head case.node --test .github/scripts/*.test.cjs: 672 pass.biomeandactionlintare clean.Related
🤖 Generated with Claude Code