Repository navigation
fix(pm): one reading of the 席位核对 record for fleet-roster and H69 - #26635
Merged
Merged
Conversation
fleet-roster's hasLandingVerdict required a bare `## 席位核对` heading, so the seat's live inline records (`## 席位核对 — ACCEPT · …`) read as no verdict while check-half-states' H69 marker read them as records. Both now import the heading marker and the verdict reading from scripts/pm/seat-record.mjs: the inline verdict on the heading line, else the first line below it that opens with a verdict word; only ACCEPT lands. Self-test cases for the inline form in both scripts. Claude-Session: https://claude.ai/code/session_01ADHkmPquMegy4jNfKiBsAf Co-authored-by: Claude <noreply@anthropic.com>
Contributor
Author
席位核对ACCEPT ·
Generated by Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Steve · project thread
Fixes #26335
Clause-②: no
Metadata-protocol: none
维护者速读
## 席位核对规则;标题行内写— ACCEPT的记录也算 ACCEPT。## 席位核对 — ACCEPT · …,H69 认得,总表却认不得,导致总表把已 ACCEPT 的 PR 报成"无结论"。scripts/pm/seat-record.mjs(新的共享规则),scripts/pm/fleet-roster.mjs的hasLandingVerdict,scripts/pm/check-half-states.mjs的SEAT_RECORD_MARKER导入处。node scripts/pm/fleet-roster.mjs --self-test && node scripts/pm/check-half-states.mjs --self-test,预期两行 ✓(78 例 / 5034 例全过)。What changes
scripts/pm/seat-record.mjs, no imports and no I/O:SEAT_RECORD_MARKER(moved verbatim fromcheck-half-states.mjs),SEAT_RECORD_VERDICTS(ACCEPT,REWORK,REJECT),seatRecordOf(body)andseatRecordAccepts(body). The verdict is read inline on the heading line first (## 席位核对 — ACCEPT · …), else from the first line below the heading that opens with a verdict word (**ACCEPT** · …). OnlyACCEPTlands a pull.fleet-roster.mjshasLandingVerdict: the 席位核对 arm is nowseatRecordAccepts(body). The## Contract reviewPASS arm is unchanged.check-half-states.mjs:SEAT_RECORD_MARKERis imported from the shared module and re-exported under its old name. H69's reading is byte-identical: the same regex object source, still read throughlatestMarkedComment.scripts/pm/lib/. A multi-segment import specifier counts as a dispatch-gates watch hint, and gate files that import one lose the hint (measured on an earlier card). The card's hypothesis allowed either place.Behaviour changes in the roster read, all intended:
— ACCEPTheading counts (the defect).> ## 席位核对) counts, as H69 already read it.ACCEPTabove the heading no longer counts, and an inlineREWORKis never overridden by a laterACCEPTline.Tests
fleet-roster.mjs --self-test: 5 new cases (inline ACCEPT, inline REWORK, blockquoted record, ACCEPT above the heading, and the three measured bodies read through the imported marker). 73 → 78 cases, 8 batteries.check-half-states.mjs --self-test: 4 new cases in the H69 battery (the marker reads the inline heading; H69 is clean on an inline record newer than the head; the three measured bodies read record/ACCEPT astrue/true,true/true,false/false; inline REWORK and REJECT below are records that never accept). H69 66 → 70 cases (floor 40), 5030 → 5034 total.Acceptance notes
## Contract reviewPASS body both read "no seat record". The roster still answerstruethere through its separate Contract review arm, which is correct.markerMatches, which also undecorates bold or backtick-wrapped lines. The roster tests the raw body. A decorated heading such as**## 席位核对**would still read differently. No live record has that shape. It is noted here and not widened, becausemarkerMatcheslives insidecheck-half-states.mjs..claude/skills/pm-dispatch/SKILL.mdis held by another card, so this PR is not on a governed surface. Whether the skill needs a sentence stating the heading spelling is listed in the report's open questions.Verification
All readings on head
f9a39c24(the last commit), local.Self-tests and reverse verification
node scripts/pm/fleet-roster.mjs --self-test:✓ fleet-roster self-test: 78 cases in 8 batteries pass.(main7c34e5dc: 73 cases)node scripts/pm/check-half-states.mjs --self-test:✓ check-half-states self-test: 5034 cases pass., H69 battery70/40(main: 5030,66/40)hasLandingVerdicton disk, the roster self-test exits 1 with 4 failures (inline ACCEPT, blockquoted record, ACCEPT above the heading, the three measured bodies). Restored withgit checkout HEAD --;git diff HEADis empty, and the self-test is green again.dispatch-gates: 47 derived, 47 run, all exit 0
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 47 commands for the three paths. Every one exited 0, captured before any pipe.--ranwithCOMMAND :: exit CODElines:Run reconciliation — 47 derived, 47 run, 0 NOT-MEASURED, 0 UNRUN.and47 of 47 recorded an exit code and none of them is 3. Among them:pnpm check:pm-dispatch-gates,pnpm check:pm-half-states,pnpm check:self-test-wired,pnpm check:watch-hint-literal,pnpm check:scripts-symbol-anchors,pnpm check:nul-bytes. Families outside the derived total are CI's.Generated by Claude Code