Skip to content

Commit cee250b

Browse files
chore(pm): retire half-state row H34; H2 reports every card it named (#29654)
<!-- claude-projects-attribution: {"github_login":"huangyiirene"} --> _Requested by **Irene** · [project thread](https://claude.ai/code/project/chan_01TJXtQ1tVD26ecLDZxFS67x?thread=cmsg_01TJXtQ1tVD26ecLDZxFS67xCjGpvHD4tRyZ72DtPifmqL)_ Part of #29471 Clause-②: no Metadata-protocol: none ## 维护者速读 - 改了什么:删除半态巡检行 H34(认领评论用了非冒号分隔符)。它只在 H2 已经报告的卡上出现,所以由 H2 接着报。 - 为什么改:#29471 的逐行预筛(评论 6591407246)里只有 H34 三项全过:无独占规则、线上 0 行、被留下的行完整覆盖。席位认领 6591424775。 - 风险与回滚:只动 `scripts/pm/check-half-states.mjs`;198 种状态逐一比对,H34 报的 42 种 H2 全报,H2 本身逐字不变。可整 PR revert。 - 先看:删掉的 H34 段落与巡检循环里的两行调用。 - 两分钟验证:`node scripts/pm/check-half-states.mjs --self-test`,预期 5166 条全过(主干 5202)。 - 需要你做的:无,席位落地。 ## What changes - **H34 is deleted**: its rationale banner, `CLAIM_NEAR_MISS_MARKER`, `looksLikeClaimContent` and `nearMissClaimSeparators` (all read only by H34), `h34ClaimShapedNonCanonicalSeparator`, its band-registry row, its two-line call beside H2 in the sweep loop, and its self-test block. - **H2 is untouched**: `h2AssigneeNoClaimComment` and its call are byte-identical. - **Prose pointers** that named H34 now name H2 (an assigned card with no claim the marker reads) or H1 (an unassigned one): the `CLAIM_COMMENT_MARKER` docblock, the list-item marker note, the near-miss census overlap note, H33's blind-spot paragraph and its self-test comment, H50's population note, the H44/H64 artefact-recognition notes and the H60 band comment. Three test names changed (one H50 case and two BATTERY68 cases) with the same assertions. - One H60 case compared H60's band to H34's (`familyBand('H60') === familyBand('H34')`). With H34 gone, it now pins `familyBand('H60') === 'state'`, the value both had. - No gate, row, constant or battery is added. No battery shrank, so no pin moved. ## Why: every card H34 named is an H2 row H34 returned null unless the card was pm-tracked (`pm:queue` or `pm:dispatched`), was assigned, had a readable thread and had no comment matching `CLAIM_COMMENT_MARKER`. Under those same conditions, `h2AssigneeNoClaimComment` returns true. So by construction, every H34 row sat on a card H2 already reported. H34 only added the separator's codepoint as a diagnosis. The sweep called both on the same thread in the same loop. Measured by importing both trees (`main` at d280265 and this head) and judging 198 states: 6 label sets × 3 assignee sets × 11 threads (em dash, en dash, hyphen, fullwidth colon, blockquoted dash, canonical colon, dash plus colon, prose control, a null body, several near misses, and an empty thread): - H34 fired on 42 of the 198 states, and H2 fired on all 42 (0 misses). - H2's verdict is identical on all 198 states before and after. Live on objectstack: 0 H34 rows in a full sweep finished 2026-11-02T23:43Z (code at d280265), per the #29471 pre-screen. ## Verification - `node scripts/pm/check-half-states.mjs --self-test` on 9fcce36: **5166 cases pass** (5202 at d280265, so 36 fewer). All 36 are the H34 block. - Every battery reads the same `n/floor` as at d280265, so nothing was re-pinned. - Net lines: **+33 / −381 (−348)**, one file. <details><summary>Local gates on 9fcce36 (`dispatch-gates --commands`)</summary> - On head 9fcce36, `node scripts/pm/dispatch-gates.mjs --commands` derived 47 commands. All 47 ran, each with a 900 s timeout, with exit codes recorded before any pipe. **All 47 exited 0.** - The `--ran` reconciliation printed: `47 derived famil(ies) accounted for — 47 run, 0 NOT-MEASURED`. - `node scripts/check-commit-card-trailers.mjs --range d280265..HEAD`: exit 0. - Prerequisite: `pnpm install --frozen-lockfile`. - Families CI runs beyond the derived list are read from this PR's check runs, not re-run locally. </details> ## Acceptance notes - What is lost is the diagnosis H34 added: the separator's codepoint and the "re-post with `Claim:`" remedy. The card is still reported, by H2's row "assignee set but no claim comment on the thread". - The ownership-marker near-miss census still names a dash-written claim as the `separator` form in its summary clause, so the spelling stays visible on the summary line. ## Human Minimum - [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic. (not touched) - [x] 2. Every name I added uses the casing for its kind. (no names added) - [ ] 3. No formatter ran; `pnpm lint` passes. (no formatter ran; `pnpm lint` was not run locally, so the CI lint job decides it) - [x] 4. One issue, one branch off an up-to-date `main`, one pull request. - [x] 5. A change that publishes carries a changeset, and both declaration lines are filled in here and in the changeset. (publishes nothing: `scripts/pm/**` only; `skip-changeset`) - [x] 6. `packages/spec` touched: its generated artifacts are regenerated and committed. (not touched) - [x] 7. No hand edits to `content/docs/references/`, `packages/*/CHANGELOG.md` or `content/docs/releases/`. - [x] 8. Title, body and comments are in English. (except the 维护者速读 block, which the seat contract writes in Chinese) - [x] The *Before Submitting* list in CONTRIBUTING.md is done. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01J8VVAmM3BRQQcQSA67VE3L Co-authored-by: Claude <noreply@anthropic.com>
1 parent 6903c93 commit cee250b

1 file changed

Lines changed: 33 additions & 381 deletions

File tree

0 commit comments

Comments
 (0)