Skip to content

ship-receipt-prose: check-prose reads 'REVIEW_LOOP: passes=2 blocking_found=1' as a claim of 2 blocking_found #3513

Closed

Description

@capy-ai

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.

Activity

  1. added
    ship-queueShip queue, trains, receipts, pregate (ship-queue owner)
    on Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ship-queueShip queue, trains, receipts, pregate (ship-queue owner)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions