Repository navigation
fix(work-items): carry a human-merge hold into the PR body before ready - #7397
Conversation
/work-items:work and /work-items:ship run now run scripts/merge-hold.sh after create --pushed. When a commenter with write access on the item asked for 'Hold: a human merges this', the line goes into the PR body before the ready flip, so the babysit merge gate holds the merge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W6SjPvY7DmXBGzboeCq8nj
Only exit 1 rules a hold out; usage, missing-tool and unresolved-path exits now keep the PR a draft like a failed read. merge-hold.sh checks only gh, since its jq programs run through gh --jq. Tests add the missing-gh exit and a failed permission read beside a writer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W6SjPvY7DmXBGzboeCq8nj
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 2m 59s —— View job Security review
No security issues found. What I checked:
No command/argument injection, no authorization bypass, and no unsafe handling of tokens/secrets found in this diff. claude-lane-summary: lane=claude-security-review sha=33b3969120cec2234c1a286481414b9090982178 run=38477891117 |
|
Claude finished @kyle-sexton's task in 3m 50s —— View job Review checklist
FindingsNone at the high-signal bar for this lane (correctness, design, error handling, tests, docs — security is scoped to the dedicated security lane, which runs in this repo). Notes from the review:
claude-lane-summary: lane=claude-review sha=33b3969120cec2234c1a286481414b9090982178 run=38477891163 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 33b3969120
ℹ️ 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".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
claude-security-review has reviewed this pull request through a4480d1; a later push is reviewed from there. |
|
claude-review has reviewed this pull request through a4480d1; a later push is reviewed from there. |
Enterprise Managed Users logins carry an underscore before the shortcode, which the login pattern rejected, so a writer's hold was skipped. Accept the underscore, and treat a login that still fails the pattern as an unread hold (exit 11) rather than no hold. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W6SjPvY7DmXBGzboeCq8nj
|
Claude finished @kyle-sexton's task in 1m 15s —— View job Security review
No security issues found. Scope: per the review header, this lane last reviewed What changed:
Trust-boundary check: the widened character class ( Test coverage: the two new/changed cases ( No command/argument injection, no authorization bypass, and no unsafe handling of tokens/secrets in this delta. claude-lane-summary: lane=claude-security-review sha=a4480d1acfd4365504258d3b0e146c6b819c3e12 run=38478558554 |
|
Claude finished @kyle-sexton's task in 1m 19s —— View job Review complete
ScopePer this lane's custom instructions, this is an incremental review covering only what changed since commit
This is the direct fix for the P1 Codex finding and the matching author finding on the prior commit: EMU/managed-user logins ( What changed and verification
Traced the loop/exit logic by hand against both new cases (success path exits immediately on a matching writer regardless of loop order; the No correctness, error-handling, or test-coverage issues found in this incremental diff. No security findings (scoped to the security lane, which already reviewed this trust path on the prior commit and reached the same conclusion). Findings: 0 claude-lane-summary: lane=claude-review sha=a4480d1acfd4365504258d3b0e146c6b819c3e12 run=38478558512 |
Refs: #7349
Summary
Some agent-ready items are human-merged: an owner comment on the issue says the PR carries
Hold: a human merges this./work-items:workand/work-items:ship runnever put that line in the PR body, and since #7347 they ready the PR right after create, so the babysit merge gate (BODY_MERGE_HOLD_RE, #7349) saw no hold.Fix
plugins/work-items/scripts/merge-hold.sh --repo <owner/name> --issue <n>: reads the item's comments, and for each one containingHold: a human merges thisreads the author's repository permission. Onlyadminorwrite(maintain maps to write, triage to read) holds, the same trust rule as the work-loop'slabel-provenance. Exit 0 prints the line; 1 no hold; 11 a read failed, so a hold was not ruled out.work/SKILL.mdopen-the-PR step: aftercreate --pushedand beforeready, run the script; on 0 add the line to the body by read-modify-write; on any exit but 0 or 1 (a failed read, a usage error, missing gh) skipreadyand leave the PR a draft.ship/actions/run.mdpoints at the same step.The line is added right after create rather than inside
create --pushed, which has no input for extra body lines; changing that would touch source-control. The PR is still a draft at that point, so nothing can merge before the line lands.Verification
merge-hold.test.sh(gh stub): admin and maintain commenters hold; triage and read do not; an untrusted line beside a trusted one holds; a missing line, no comments and a different-case line do not; failed comment or permission reads exit 11; a failed permission read beside a writer still holds; missing gh exits 8; usage errors exit 2. Widening the trust rule toreadfails 2 cases.merge-hold.shon fix(guardrails): treat the heredoc body of git commit -F - and git tag -F - as data in block-root-delete-target #7379 (owner comment) prints the line; on fix(source-control): hold the babysit merge on a body line starting Hold: #7349 exits 1.scripts/check-affected.sh --tests --base origin/main: 8 passed, 1 skipped.check-skill-portability.sh: no unexcused tokens. shellcheck clean./work-items:workrun on a held item.Related
🤖 Generated with Claude Code
https://claude.ai/code/session_01W6SjPvY7DmXBGzboeCq8nj