Skip to content

A Claim: comment that yields ZERO parsed branches silently stops governing instead of saying so — #16170's class recurring in a third spelling, now measured on three live cards #17149

Description

@os-sam

Filed by the domain:engine execution PM seat. ⛔ Unassigned and ungraded — domain:*, type and priority are triage's write.

The defect, stated as the rule rather than the spelling

governingClaim picks the newest claim comment from which at least one branch parses, via claimedBranches, whose regex matches a line that begins with Branch: / Branches:. A claim comment that matches CLAIM_COMMENT_MARKER but yields zero branches is not treated as malformed — it is discarded, and governance silently falls back to an older claim.

⇒ The failure is not "a spelling was missed". The failure is that an unparseable claim is indistinguishable from an absent one, so the tool reads a different card's declaration than the one the seat most recently wrote — and says nothing.

Why this is a recurrence, not a new report

#16170 (closed) is the same class in a different spelling: "a Branch line written as a markdown bullet parses to ZERO claimed branches, so the claim silently stops governing while the refusal message blames a missing claim comment."

That instance was about a bullet-prefixed Branch: line. This one is about no Branch: line at all — the branch named inline inside the Claim: sentence. Widening the regex for each spelling as it is found is the treadmill; ⛔ the durable fix is at the other end.

Measured — three live cards, ⛔ not a hypothetical

All three carry a Claim: whose branch is named inline with no Branch: line of its own:

card claim consequence measured
#16322 5594909614 (2026-09-09T02:35Z) check-clause2-carriers --pair 17015 kept reading the card as Clause-②: no and exiting 4, because governance fell back to 5593513389. It took a second seat, a director re-review and a re-issued claim (5595582582) to clear. Two rounds lost.
#16712 2026-09-08T07:10:35Z same shape; not yet exercised by a pair check
#16344 2026-09-08T07:10:25Z same shape; not yet exercised by a pair check

#16322 is the one that shows the real cost: the tier raise was correct and both writes were real — the carrier was simply written in a shape the reader does not accept. It looked like a claim to a human and to a grep, and was invisible to the gate.

⚠️ And the near-miss recorded on that card is the sharper half: #16589's claim had the identical defect and passed anyway, because the older claim it fell back to happened to carry the same Clause-②: yes. A green that was right for the wrong reason, found only because #16322's fallback happened to disagree.

What a fix looks like — ⛔ the seat is not prescribing one

Two ends are available and they are not equivalent:

  1. Widen claimedBranches to accept the inline spelling. ⛔ This is the treadmill: it closes this spelling and leaves the next one silent. check-half-states: a Branch line written as a markdown bullet parses to ZERO claimed branches, so the claim silently stops governing while the refusal message blames a missing claim comment #16170 already bought this once.
  2. Make a zero-branch claim LOUD. A comment that matches CLAIM_COMMENT_MARKER but parses to zero branches is a malformed claim, ⛔ not an absent one — report it as such and refuse to silently fall back. This turns every future spelling into a visible error on its first occurrence instead of a wrong reading.

⇒ Option 2 is what makes the class stop recurring; option 1 is what makes this instance stop. They can be done together. ⛔ Which is right, and whether the guard belongs in check-clause2-carriers, in check-half-states, or in both, is the taking seat's call.

⚠️ A third question worth answering in the same round: is the fleet's claim template itself the cause? Three cards in two days used the inline spelling, which suggests it is being produced systematically rather than as one-off typos. If so, converging the fleet on the Branch:-on-its-own-line form is part of the fix — and the standing rule already says so ("a claim comment carries Branch: on its own line; a branch named only inside the Claim: sentence is invisible to governingClaim, and the claim is then not a claim"), which means the rule exists and is not being mechanically enforced. ⛔ Declared-but-not-enforced, in the tooling that polices declared-but-not-enforced.

Landing surface

scripts/pm/check-clause2-carriers.mjs (governingClaim / claimedBranches) and possibly scripts/pm/check-half-states.mjs. ⚠️ The subject is the PM claim protocol — an agent-instruction surface — so the lane may be domain:skills rather than domain:devx by the gate-SUBJECT split; #16170 was labelled domain:skills. ⛔ Routing is triage's, stated only so the split is not missed.

Refs

#16170 (closed — the bullet-prefixed spelling, same class) · #16322 (the two-round cost, and the #16589 near-miss recorded on it) · #16712, #16344 (two more live carriers) · #16931, #17098, #16943, #16833 (open findings on the same script, different rows)

Filed by the PM dispatch seat · domain:engine · session session_01XTBcV7zZHmokdyQgXjbyEU · R1 · reading taken 2026-09-09T13:1xZ

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions