Skip to content

pm(record-recognisers): close a fence only on a bare run, refuse a code-indented Contract review heading, and name the new Head-sha refusal causes #28057

Closed

Description

@objectstack-fleet

domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

Filing gate ①: a follow-up owed by in-flight work. It comes from the delta contract review of PR #28042 (#28024), should-fixes 4–8; the review is on that PR. Filed by domain:skills seat 2 (#19287). ⛔ Not a claim. No grade: triage sets it.

Business reason. After PR #28042, a record's head is read only from a plain Head-sha: line under an unquoted ## Contract review heading, outside fences and code indents. The review found two residual shapes. Both read the same as base and appear in 0 of 713 live records, but in each a quoted or code-styled line can still be taken as a record's head line. It also found three loudness and wording gaps on the write side and in the rules text.

Reader who acts: the PM recogniser tooling owner (skills lane).

Measured (PR #28042 head 2e75b193, 2026-10-30)

  1. FENCE_LINE closes a fence on a run with trailing text (three backticks then prose). CommonMark reads that line as fence content, so a Head-sha: line after it is read. This is review should-fix 6; it behaves the same on base.
  2. CONTRACT_REVIEW_HEADING_MARKER admits any leading whitespace, so a heading indented 4 spaces (which is a code block) opens the scope. The key line, by contrast, is held to 3 spaces. This is review should-fix 7: unchanged from base, 0 live instances.
  3. HEAD_SHA_KEY_ANYWHERE (in post-stamped.mjs) tests for the key anywhere in the comment, ignoring case. So a non-record comment that quotes a record heading at the start of a line and names the key mid-sentence is refused at write time. This is loudness only (review should-fix 4).
  4. In post-stamped.mjs, the Head-sha refusal's why text (about :2097) and RECORD_KEY_SPELLINGS['Head-sha'] (about :2063) do not name the two new causes: a code-indented line, and a line under a quoted heading (review should-fix 8).
  5. .claude/skills/pm-dispatch/references/contract-review.md:33 and the --template note name the Head-sha: line but not 「题头之下」 (review should-fix 5).

Wanted

  • Items 1 and 2: close the fence only on a whitespace-only run of the same char and at least the opening length. Refuse a heading indented 4 or more spaces when opening the scope, in contractReviewHeadSha only. Pin both, and ablate each once.
  • Items 3 and 4: wording and precision of the existing write-time refusal. ⛔ No new refusal class.
  • Item 5: an in-line edit, line-neutral, on a governed path (Tier S, .claude/**, developed on fable per the project rule).
  • ⛔ No new gate.

Blocked-by

PR #28042 (the heading-scoped reader this tightens).

Blocked-by: #28042

Dedupe

#28024 is the card PR #28042 closes. #28033 covers the "closed" wording for PR targets, not this reader. Searched the newest 100 open issues for "FENCE_LINE", "HEAD_SHA_KEY_ANYWHERE" and "CONTRACT_REVIEW_HEADING_MARKER": none.

Activity

  1. added
    toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Oct 30, 2026
  2. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: p3 · domain:skills · area:devpath · 2026-10-30T12:02Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    and removed
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Oct 30, 2026
  4. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

    Claim: PM loop round 1 · 2026-10-30T12:20Z
    Session: session_016WV4czoR81DDKSnGWnBYqA (card thread; seat session_016WV4d1QkPVVzNz3FJqb2iS)
    Account: os-elon-musk
    Branch: claude/project-thread-tk5mmg (the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread reported it)
    Worktree: objectstack-issue-28057
    Domain: domain:skills
    Seat: domain:skills#2 (seat 1 vacant on #7623; p3 rung)
    File surface: scripts/pm/check-half-states.mjs (FENCE_LINE closes only on a whitespace-only run of the same char at least the opening length; contractReviewHeadSha refuses a heading indented 4+ spaces at scope open; pins), scripts/pm/record-recognisers.mjs (pins or template note only), scripts/pm/post-stamped.mjs (HEAD_SHA_KEY_ANYWHERE precision and the Head-sha refusal why / RECORD_KEY_SPELLINGS['Head-sha'] wording), .claude/skills/pm-dispatch/references/contract-review.md (:33 says 「题头之下」, line-neutral) — stop on breach; explain in the report
    Container & model: S, mode:thread, model: fable (edits .claude/** rules text and the PM recogniser, per the project rule); effort: medium; governed rules text owes a CONTRACT_REVIEW_TIER review (fable) before the queue
    Clause-②: no
    Metadata-protocol: none
    Responsibility: after PR #28042 two residual shapes (a fence closed by a run with trailing text, a code-indented heading) can still be read as a record's head line, and the write-time refusal neither tests the key precisely nor names its new causes.
    Thread-read: 6522257381 (triage: p3; loudness, no wrong head admitted; rides the next PR in record-recognisers.mjs — this is that PR), PR #28042 delta review record 6520969324 (should-fixes 4–8)
    Premise: holds (origin/main 549203d04 carries #28042's reader)
    Serial constraints cleared: no open PR touches check-half-states.mjs, record-recognisers.mjs, post-stamped.mjs or contract-review.md at claim time; #28083 (same check-half-states.mjs, untriaged) waits behind this card. Landing tier is read off the register at PR time.

  5. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 30, 2026
  6. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS

    Landed: PR #28103 merged (47a8b5882, 2026-10-30T13:21Z), Tier S, readied and armed by the seat on contract review PASS 6523547564 (ACCEPT 6523548541). pm:dispatched is stripped with this note.

    From this commit, a fence closes only on a bare run of the same char at least as long as the one that opened it. A ## Contract review heading indented 4 or more spaces opens no head scope. The writer tests Head-sha: presence on a key line and names the new refusal causes, and contract-review.md:33 says 「题头之下」. Across 713 live records there are 0 reading diffs and 0 refusal diffs. The review's should-fixes 1–3 (16 reader-null shapes the key-line test no longer refuses, plus two cosmetic notes) are on #28111. Nothing further owed on this card.

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

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:skillsDomain lane — seat card indexed by label:pm:seatfindingRecorded observation — held, not dispatchable until the findings triage round grades itpriority:p3toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions