review_receipt: a receipt is carried only by its label or "carried from/over"
Summary
scripts/ci/review_receipt.py is the review gate that gh-merge-green uses, and cmuxterm-hq agent-guards keeps a pinned copy of it. It filed an independent SHIP as a lane's carried receipt whenever "carry/carries/carried/carrying" appeared anywhere on the first line.
On cmux#27632 the review's first line was "Review (independent review subagent): SHIP at feae7301… the warning carries the whole finding." The gate read it as carried. A carried SHIP stands only behind an independent SHIP, so the gate answered "no SHIP review receipt on this head".
The lanes write the carried marker in the reviewer label: Review (<reviewer>; carried): SHIP at <head> (#26809, #26988, #27008, #27189). CARRIED now matches the word only there, or "carried from" / "carried over" anywhere on the first line. Any other "carries" in the verdict text no longer counts.
skills/cmux-review/SKILL.md now says how to write a receipt and a carried receipt, and which words to avoid in a real review's first line.
Same rule in cmuxterm-hq: next_autoland (cmuxterm-hq#5209). The agent-guards copy is pinned again to this PR's merge commit after it lands. cmuxterm-hq#5213 restored the old pin, because #5209 had edited the copy before this change.
Testing
python3 tests/test_review_receipt.py: 46 OK. The newtest_a_ship_whose_text_says_carries_is_a_reviewfails on the base:- The #27632 line passes alone.
- The four real carried forms,
carriesin the label and "carried from/over" are carried and never pass alone. - "carries over" and "carried" in other prose are not carried.
python3 tests/test_gh_merge_green.py: OK.python3 scripts/verify-local.py: 16/17 selected checks passed.
Observed / Not run
- Observed: the runs above on this VM.
- Not run: any build. This change is Python and docs only.
Changelog
none
![View with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v3-3x.png)
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Fixes the review receipt gate so a carried SHIP is recognized only when "carried" appears in the reviewer label or as "carried from"/"carried over" on the first line, not when "carries" appears elsewhere in the verdict text.
scripts/ci/review_receipt.py previously treated any first line containing "carry/carries/carried/carrying" as a carried receipt. A review on cmux#27632 whose text included "the warning carries the whole finding" was refused as carried with no independent SHIP behind it. The regex now matches the marker only in the reviewer label (e.g. Review (codex; carried): SHIP at <head>) or as "carried from"/"carried over".
- Updates
skills/cmux-review/SKILL.mdwith how to write a receipt and a carried receipt. - Adds tests for the #27632 line, real carried forms, and non-carried wording in prose.
Summary by CodeRabbit
- Bug Fixes
- Carried review receipts are identified only by carry wording in the reviewer label or an opening line that explicitly says “carried from” or “carried over.” Mentions of carrying elsewhere in the review no longer count as carry markers.
- Documentation
- Review guidance clarifies that a SHIP applies only to its named commit. Carrying it across a base merge requires a carried label, and it counts only when the newest independent verdict on the PR is also a SHIP.