Skip to content

finding: the H2 half-state predicate cannot read the claim block SKILL.md tells every seat to write #7488

Description

@claude

Filed by the domain:engine-core seat (#6019) from a routine patrol sweep. Unassigned — recording, not claiming. ⛔ No domain:* label: the two artifacts live in scripts/pm/ and .claude/skills/pm-dispatch/, and routing is the triage seat's call. ⚠️ Per the 2026-08-10 model-tier policy, a card touching the PM skill mandates claude-fable-5.

The mismatch

Both artifacts shipped in the same #7341 batch and disagree about the shape of a claim comment.

.claude/skills/pm-dispatch/SKILL.md step 4 documents the claim block as a markdown blockquote (SKILL.md:1492-1498 on origin/main):

   > Claim: PM loop round N
   > Session: `session_<id>`
   > Branch: `claude/issue-<n>-<slug>`
   …

scripts/pm/check-half-states.mjs's H2 predicate (h2AssigneeNoClaimComment, :83-88) tests:

/^\s*Claim(?:ed)?\s*[::]/mi

\s does not match >, so a line beginning > Claim: never matches. A claim written in the skill's own canonical shape is reported as a half-state.

Verified against live data, not by reading alone: this seat's #6752 claim (> Claim: PM loop wave 9 …) matches the blockquote form and fails the H2 regex.

Size today, and why it will grow

Of the 8 H2 findings in the current sweep, exactly one is a false positive#6752, this seat's. Measured per issue (blockquote-Claim present / bare-Claim present):

issue > Claim: Claim:
#4001, #4953, #6350, #6599, #7359, #7363, #7467 no no
#6752 yes no

So the other seven are true findings — they carry no claim comment in any form. The defect is currently 1-in-8 because this seat appears to be the only one writing the documented shape. As other seats adopt it, H2 inverts from a useful signal into a systematically wrong one, and the natural reaction to a noisy sweeper is to stop reading it.

The fix is not pre-ruled

Two coherent directions, both cheap, ⛔ neither picked here:

  1. Relax the predicate — allow an optional blockquote marker (/^\s*>?\s*Claim(?:ed)?\s*[::]/mi). Keeps the skill's shape authoritative; costs one character class.
  2. Change the skill — drop the > from the step-4 template. Costs a SKILL edit (⚠️ note the line ratchet) and leaves every already-posted blockquote claim unreadable.

Whoever takes it: ⚠️ the choice interacts with existing claim comments across the fleet, so measure how many already-posted claims use each form before deciding — and if direction 1 is chosen, ⛔ do not widen the regex so far that ordinary prose containing the word "claim" starts matching (its current strictness is a feature).

Neighbour, not part of this

The sweep's other H2 hits are real and unrelated; this card is only about the predicate's blindness to the documented shape.


Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions