Repository navigation
chore(pm): retire half-state row H25; H29 reports the awaiting-state pairs - #29626
Conversation
…pairs H25 reported pm:awaiting-maintainer beside another pm state label, and H29 skipped exactly those pairs as H25's. Delete H25, its conflict-reason map, its self-test cases and the H55 case that read its header prose, and drop H29's awaiting skip so H29 reports every pair H25 did. AWAITING_MAINTAINER_EXCLUSIVE_LABELS stays: PM_EXCLUSIVE_STATE_LABELS spreads it. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J8VVAmM3BRQQcQSA67VE3L
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract-review-claim: session_01J8VVAnMUWA9rufXzFaEh4J · head 608b908 · 2026-11-02T22:33Z The seat review runs at CONTRACT_REVIEW_TIER in an isolated subagent (the seat session is not at that tier). |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract reviewServed-tier: Reviewer: an isolated contract reviewer at CONTRACT_REVIEW_TIER, read-only on GitHub (REST reads only; nothing written, pushed, commented or labelled), fed the card body and comments, the PR body, the net diff against the merge-base, the head's check-runs, contract-review.md and review-checklist.md. The PR body's measurements were read as input, not as conclusions; every count below is this review's own measurement. No environment variable value is printed anywhere in this record. ① Derived judgments
② Semver levelNone. No published package, no ③ Boundary flags
④ Design judgmentPer hits file, against the card's scenario (a row with no named reader and no 30-day citation costs a self-test and a live pass on every patrol run; the discipline text gives such an instrument deletion as its only in-flight work) and the ruling's constraint (no state loses its report):
Must-fix: none. Should-fix: none (the Check-runs at record time (2026-11-02T22:49Z): 51 check-runs on 608b908, 30 success, 20 skipped, 0 failure, 1 still in progress on the sixth read (the aggregate Implemented-by: VERDICT: PASS Generated by Claude Code |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J 维护者速读
席位核对 — ACCEPT · domain:skills#1 · head
|
Requested by Irene · project thread
Part of #29471
Clause-②: no
Metadata-protocol: none
维护者速读
pm:awaiting-maintainer与另一个 pm 状态标签共存),并删掉 H29 里「含 awaiting 的标签对归 H25」那一行跳过,让 H29 报出 H25 原来报的全部标签对。scripts/pm/check-half-states.mjs;没有哪个状态组合失去报告。回滚即 revert 本 PR。h29PmStateExclusivity删掉的那行continue,以及 H29 自测里由「静默」翻成「报出」的七条。node scripts/pm/check-half-states.mjs --self-test,预期 5202 条全过(主干 5219)。What changes
AWAITING_MAINTAINER_CONFLICT_REASON(only H25 read it),h25AwaitingMaintainerExclusivity, its line in the header docblock, its band-registry entry, its call in the sweep loop and theh25rowtest helper.if (a === AWAITING_MAINTAINER_LABEL || b === AWAITING_MAINTAINER_LABEL) continue; // H25'sis deleted, so H29 reports every pair that containspm:awaiting-maintainer. This is the one behaviour change to a staying row, ruled by the seat (option C, #29471 comment 6589866189). H29's H3 exclusion (pm:queue+pm:dispatched) is unchanged.AWAITING_MAINTAINER_EXCLUSIVE_LABELS, becausePM_EXCLUSIVE_STATE_LABELSspreads it; thequeuedfixture, which H3, H8, H19, H22 and H29 cases use; H24 and the H8 case that names it, per the ruling.AWAITING_MAINTAINER_LABELreader list, theGOVERNED_PR_DECISION_LABELnote, H55's header, the H66/H67 population notes, the patrol input-set note, the sweep-loop comment and the H66 battery case's name. These are comment and test-name text only, with no output change.Why
The #29471 census put H25 in tier 1: no named reader and no 30-day citation. The census grouped it with H24 as "the label pairs H29 already covers", but on
mainH29 skipped every awaiting pair as H25's, and H24 is a label-and-assignee intersection that H29 never reads. The seat narrowed the family to H25 and ruled that H29 takes over H25's pairs, so no state loses its report.No state loses its report
Measured by importing both trees (
origin/main0a4e74e and this head) and judging every non-empty subset of the six-label ONE-OF vocabulary as an open card:pm:awaiting-maintainer, H29's sentence is byte-identical before and after.Verification
node scripts/pm/check-half-states.mjs --self-teston 608b908: 5202 cases pass (5219 onmain, so 17 fewer). The 17 removed are 14 H25 cases (9 single cases and the 5-case per-label loop),H29: …and H25 does fire on it, the H55 adjacency case that called H25, and the H55 reconciliation case that read H25's header prose.H29: a pair containing the awaiting state is this row's, the 5-case loopH29: awaiting + <state> fires here, andH29: …and names the awaiting pairs too.n/flooras onmain(H66 182/172, H70/H71 31/30 and so on), so nothing was re-pinned.Local gates on 608b908 (`dispatch-gates --commands`)
node scripts/pm/dispatch-gates.mjs --commandsderived 47 commands. All 47 ran, each with a 900 s timeout, with exit codes recorded before any pipe. All 47 exited 0.--ranreconciliation printed:47 derived famil(ies) accounted for — 47 run, 0 NOT-MEASURED.node scripts/check-commit-card-trailers.mjs --range origin/main..HEAD: exit 0.pnpm install --frozen-lockfile.Acceptance notes
scripts/pm/ensure-pm-labels.sh:212still names H25 in a comment as a consumer of the label. That file was outside this card's surface, so it was left alone. A one-word follow-up (H25 → H29) belongs to whichever family next touches that file.pm:queuecard with an assignee, and H49, H50, H66 and H71 each decline that shape as H24's.Human Minimum
packages/specholds no runtime logic. (not touched)pnpm lintpasses. (no formatter ran;pnpm lintwas not run locally, so the CI lint job decides it)main, one pull request.scripts/pm/**only;skip-changeset)packages/spectouched: its generated artifacts are regenerated and committed. (not touched)content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_01J8VVAmM3BRQQcQSA67VE3L