Repository navigation
fix(pm): mailbox doorbell key fields read the seat with seatKey, which refuses reserved domain lane names - #27986
Conversation
…h refuses reserved domain lane names The seven doorbell keys' `LANE#N` fields were read with a second, looser seat shape (`SEAT_REF`) that accepted the short form `skills#2`, while the `To:` line above them read with `seatKey`. One seat grammar now: `readSeat` calls `seatKey`, so the short form is refused in a key field exactly as on `To:`, an absent number is seat 1, and the reading carries the canonical `key`. `seatKey` refuses a `domain:` lane named after a reserved lane word (`domain:triage`, `domain:director`, `domain:repo-…`), whose slug would be another seat's; the header had assumed that one-to-one promise. The lane words are lifted into `SEAT_LANE_KINDS` and `SEAT_BARE_LANES`, the one spelling the shape and the reserved set are both built from. Pinned in the mailbox-open and record-recognisers self-tests: the short form refused, a reserved name refused, a name that merely contains a reserved word still read, and a well-formed `domain:X#N` line read as before. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WV4d1a5iE1F79QjJupxQe
|
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS Contract-review-claim: session_016WV4d1QkPVVzNz3FJqb2iS · head f37db59 · 2026-10-30T06:28Z |
|
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS Contract reviewServed-tier: Card #27891, triage 6513886980 (p2 · ① Derived judgmentsEach read off the committed tree and, where behaviour is claimed, off the base-vs-head differential (23 lines through
② Semver levelNo package publishes from ③ Boundary flags
④ Design judgmentRules-text face: none in
No schema or ADR in Implemented-by: VERDICT: PASS Must-fix: none. Should-fix:
|
|
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS 维护者速读
席位意见:ACCEPT。契约复核 PASS,没有 must-fix。should-fix 1(PR 正文说「不接受新写法」不够准确)已在本评论的风险一行写明,不改代码。should-fix 2、3( 席位核对
|
Requested by Elon · project thread
Fixes #27891
What changes
scripts/pm/record-recognisers.mjs: the seven doorbell keys'LANE#Nfields (Notify: seat-online,seat-offline,split) are read withseatKey, imported frommailbox-open.mjs. The second, looser seat shapeSEAT_REFis deleted. The short formskills#2is now refused in a key field (unreadable, "does not spell its template"), exactly as it is on theTo:line. An absent number reads as seat 1 (triage→triage#1), and theseatreading carries the canonicalkeybesidelaneandn.scripts/pm/mailbox-open.mjs:seatKeyrefuses adomain:lane named after a reserved lane word —domain:triage,domain:director,domain:repo-…— whose slug would be another seat's (triage-1,repo-cloud-1). The lane words are lifted into the exportedSEAT_LANE_KINDSandSEAT_BARE_LANES, the one spelling thatSEAT_SHAPEand the reserved set are both built from. A name that merely contains a reserved word (domain:triage-tools,domain:directory) still reads.domain:X#Nreads as before with itskey; the short form refused in a key field and onTo:; a reserved name refused in both places).Why
PR #27881 (card #27637) keyed the mailbox by seat and read the
To:line withseatKey, but left the key fields onSEAT_REF, which acceptedskills#2. One message could then name a seatTo:refused — two grammars for one thing. The contract review of #27881 (record 6513700361, should-fixes 1 and 4) asked for one grammar and for the reserved-word refusal themailbox-open.mjsheader assumed but did not enforce; triage 6513886980 ruled both in, and ruled that a well-formedTo: domain:X#Nline behaves exactly as before.Clause-②: no— the accepted set narrows (the short form and the reserved names are refused; nothing new is accepted). No gate, workflow or queue guard reads a mailbox, so nothing lands or fails differently..claude/skills/pm-dispatch/references/project-forms.md〈信箱 PR〉 is untouched: it spellsLANE#NandTo: <席位>, neither of which now reads wrong.Verification
node scripts/pm/mailbox-open.mjs --self-test— 71 cases in 10 batteries pass (was 67).node scripts/pm/record-recognisers.mjs --self-test— 329 cases pass (was 326).seatKeyfails the two reserved pins in mailbox-open and the reserved pin in the recognisers; lettingreadSeatfall back to the old loose shape fails the short-form pin and the reserved pin; droppingkeyfrom the reading fails the threekey-carrying pins. Nothing else moves.node scripts/pm/dispatch-gates.mjs --commands(2 paths vs merge base 9cd54fa): 31 families (check-closing-keyword-parity,check-declaration-mirrors,check-self-test-wired,check-self-test-workflow-commands,check-whole-set-label-write,plan-test-core-shards --self-test,bare-root-worklist --self-test,check:pm-record-recognisers,check:pm-dispatch-gates,check:scripts-symbol-anchors,check:entry-guard,check:parse-guardand the rest of the derived list) all exit 0 afterpnpm install --frozen-lockfile --ignore-scripts;--ranwith the recorded codes: 31 accounted for, 31 run, 0 NOT-MEASURED.eslinton the two files exit 0.git merge-treeagainstorigin/main4a5396b clean; no commit on main since the base touches either file.Clause-②: no
Metadata-protocol: none
Human Minimum
packages/specholds no runtime logic. (not touched)pnpm lintpasses on the two files.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/.维护者速读
LANE#N字段改用seatKey读,短写skills#2一律拒收;seatKey另拒收撞保留车道词的domain:名(domain:triage、domain:repo-…)。To:行与键字段各用一套席位语法,一条消息可能一边读通一边拒收;分诊 6513886980 裁定统一到一套。scripts/pm/record-recognisers.mjs的readSeat,与scripts/pm/mailbox-open.mjs的seatKey。node scripts/pm/mailbox-open.mjs --self-test && node scripts/pm/record-recognisers.mjs --self-test。check-governed-merges.mjs --pr)。🤖 Generated with Claude Code
https://claude.ai/code/session_016WV4d1a5iE1F79QjJupxQe