ship-receipt-prose: check-prose reads 'REVIEW_LOOP: passes=2 blocking_found=1' as a claim of 2 blocking_found
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 83/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- typescript
Research direction
Read lib/ship-receipt-prose.ts, especially the counter regex in checkProse around line 50, and find its regression tests. Run the existing tests for checkProse, then add the supplied REVIEW_LOOP line with receipt values where passes and blocking_found differ. Done means all five key=value claims match the receipt without a false mismatch.
Written by the indexing model from the issue text.
Description
Problem
checkProse in lib/ship-receipt-prose.ts (the counter regex at line 50) reads one key=value pair from a canonical REVIEW_LOOP line as a "number then name" claim about the next key.
Input line, exactly as /ship and gstack-ship-queue ready print it into a PR body:
REVIEW_LOOP: passes=2 blocking_found=1 deferred=0 noted=4 fixed=8 scope=frozen
The receipt has review_loop.passes = 2 and review_loop.blocking_found = 1.
Actual
The \b(\d+)\s+${name} branch matches 2 blocking_found. The 2 belongs to passes=2, and \b holds between = and 2. So the check reports:
PROSE: mismatch review_loop.blocking_found body=2 receipt=1
Expected
The line parses as five key=value claims: passes=2, blocking_found=1, deferred=0, noted=4, fixed=8. All five match the receipt and the check reports no mismatch:
PROSE: 5 receipt counter claims in the body, all match
Fix
A number that is the value of a key= or key: pair must not also start a "number then name" claim. One way is to require (?<![=:\w.-]) before (\d+) in that branch. Add a regression test that runs this exact REVIEW_LOOP line through checkProse with a receipt where passes and blocking_found differ.
Seen on
The #3507 /ship re-READY (2026-10-27). The PR body carries the canonical REVIEW_LOOP line, and check-prose reported the false mismatch above. The receipt and the line agree.
- Dominant language
- TypeScript
- Stars
- 137k
- Forks
- 20.3k
- Avg merge
- 8h 56m
- Merged PRs (30d)
- 239
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from garrytan/gstack
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
bug
Difficulty 1/5 Under an hour Newbie friendliness 70/100
garrytan/gstack#3091 · 1 comment ·
Maintainers usually reply within 1 day
-
parked
Difficulty 1/5 Under an hour Newbie friendliness 85/100
garrytan/gstack#2943 · 2 comments ·
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
garrytan/gstack#3512 · 1 comment ·
Maintainers usually reply within 1 day
Similar issues
-
category::task code priority::normal
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
e0ipso/strikethroo#145 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 1-3 hours Newbie friendliness 85/100
cocos/cocos-docs#3333 ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
RevenueCat/react-native-purchases#2079 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
RevenueCat/purchases-hybrid-common#2039 ·
Maintainers usually reply within 1 day
-
agent-reported area/react bug
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day