Skip to content

chore(pm): run the mailbox-open self-test in CI and pin the roster fixture lanes to its lane-word lists - #28029

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-5a28xs
Oct 30, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-5a28xs

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Elon · project thread

Fixes #27997

What changes

  • package.json check:pm-record-recognisers now chains node scripts/pm/mailbox-open.mjs --self-test (71 cases in 10 batteries). The existing Lint & Repo Gates step (.github/workflows/lint.yml:1275) runs that script, so no workflow job is added.
  • scripts/pm/fleet-roster.mjs --self-test gains one case in the fixture-snapshot battery (floor 17 → 18): every distinct lane in the fixture rows (repo:hotcrm, domain:devx, domain:skills, triage, domain:ui) is a kind from SEAT_LANE_KINDS or a word from SEAT_BARE_LANES, read through the already-imported mailbox-open.mjs namespace, never re-spelled.

Why

Should-fixes 2 and 3 from the contract review of PR #27986: the reserved-lane refusal pinned in mailbox-open.mjs --self-test ran in no CI job, and nothing asserted that the roster's fixture lanes stay inside the exported lane-word lists.

Verification

  • pnpm check:pm-record-recognisers → exit 0; the chain prints ✓ mailbox-open self-test: 71 cases in 10 batteries pass.
  • node scripts/pm/fleet-roster.mjs --self-test → ✓ fleet-roster self-test: 83 cases in 8 batteries pass.
  • Ablation (scratch copy): SEAT_BARE_LANES set to ['director'] → the new case fails with triage:false, exit 1.
  • No import cycle: fleet-roster.mjs already imported mailbox-open.mjs on main; no new import line.
  • Gates: dispatch-gates.mjs --commands derives 38 families on 66f3f15; all 38 exit 0 (four needed a whole-tree pnpm build first), and --ran reconciles 38 run, 0 NOT-MEASURED, 0 UNRUN. eslint scripts/pm/fleet-roster.mjs exit 0.
  • Tier: check-governed-merges.mjs --test package.json scripts/pm/fleet-roster.mjs → 0 of 2 paths governed.

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:把信箱开箱脚本的自测接进已有的 CI 检查链,并让车队总表自测断言夹具里的车道词都在导出的词表中。
  • 为什么改:fix(pm): mailbox doorbell key fields read the seat with seatKey, which refuses reserved domain lane names #27986 合同复核的两条应修项;此前保留车道名的拒绝只在本地自测里,CI 不跑,改坏了也是绿的。
  • 风险与回滚:只动一条 npm 脚本和一个自测用例,不改运行逻辑;回滚即还原这次提交。
  • 先看:scripts/pm/fleet-roster.mjs 新增的那一条断言。
  • 两分钟验证:跑 pnpm check:pm-record-recognisers,末行应是 mailbox-open 71 例通过。
  • 需要你做的:无;不欠合同复核(四个契约面都没碰),落地档位以登记表为准。

Human Minimum

  • 1. Schemas start as Zod; packages/spec holds no runtime logic. (not touched)
  • 2. Every name I added uses the casing for its kind.
  • 3. No formatter ran; pnpm lint passes.
  • 4. One issue, one branch off an up-to-date main, one pull request.
  • 5. A change that publishes carries a changeset — nothing here publishes (skip-changeset).
  • 6. packages/spec touched: n/a.
  • 7. No hand edits to generated docs or changelogs.
  • 8. Title, body and comments are in English.
  • The Before Submitting list in CONTRIBUTING.md is done.

🤖 Generated with Claude Code

https://claude.ai/code/session_016WV4cxhQA7zwJ62YFCW4fH

…fixture lanes to its lane-word lists

check:pm-record-recognisers now chains node scripts/pm/mailbox-open.mjs
--self-test, so the reserved-lane refusal and the lane-word lists it
exports are exercised by the existing lint job. fleet-roster.mjs
--self-test asserts that every lane in its fixture is a kind or bare
word from SEAT_LANE_KINDS / SEAT_BARE_LANES, read through the imported
module rather than re-spelled.

Fixes #27997

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WV4cxhQA7zwJ62YFCW4fH
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 30, 2026
@github-actions github-actions Bot added size/xs dependencies Pull requests that update a dependency file labels Oct 30, 2026
The lane-word pin added to fleet-roster.mjs --self-test ran in no
package script or workflow, so chain it into check:pm-record-recognisers
beside the mailbox-open self-test.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WV4cxhQA7zwJ62YFCW4fH
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

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

维护者速读

  • 改了什么:CI 已有的脚本 check:pm-record-recognisers 后面接上两个自测:mailbox-open.mjs --self-test(71 例)和 fleet-roster.mjs --self-test。fleet-roster 的自测加了一条钉子:夹具里每个车道名,都必须出自 mailbox-open.mjs 导出的车道词表 SEAT_LANE_KINDS / SEAT_BARE_LANES。词表是导入的,没有重抄一份。2 个文件,+4/−2。
  • 为什么改:PR fix(pm): mailbox doorbell key fields read the seat with seatKey, which refuses reserved domain lane names #27986 把「拒收保留车道名」钉在了 mailbox-open 的自测里,但没有任何 CI 任务跑这个自测,导出的车道词表也没人引用。以后有人删掉拒收,或者词表和名册读到的车道对不上,CI 照样全绿。
  • 风险与回滚:只在已有脚本后多跑两个离线自测,不加新的 workflow 任务,也不加门禁。回滚就是 revert。
  • 先看:package.json:84,再看 fleet-roster.mjs 自测里的 laneListed。
  • 两分钟验证:pnpm check:pm-record-recognisers,exit 0。本 head 上 CI 的「Contract-review record recogniser self-test」步骤 success。
  • 需要你做的:无。登记册判定不在受管面。四个契约面都没碰,所以不起第二个 agent 复核,由本席自己读 diff 并核 CI。本席转 ready 并开自动合并。

席位意见:ACCEPT。本席读 diff 时发现一处必须改:卡片要防的是「词表漂移时 CI 仍全绿」,但 fleet-roster.mjs --self-test 原本没有接进任何 CI(在 package.json、.github/ 和 dispatch-gates 里 git grep 都是 0 处),新钉子等于不会跑。已在 9ab7fe7f 补上,CI 上该步骤 success。卡线程做过消融:从 SEAT_BARE_LANES 去掉 triage,新钉子按预期变红。

席位核对

  • 形态: one PR, Fixes #27997, two files: package.json, scripts/pm/fleet-roster.mjs; skip-changeset. check-governed-merges.mjs --pr 28029: NOT governed; ordinary queue landing. No contract face is touched (no Clause-②, no narrowing, no published schema, no governed rules text), so the review is the seat's own read plus CI, per contract-review.md.
  • 前提实测: fleet-roster.mjs:102 already imports mailbox-open.mjs as a namespace, and mailbox-open.mjs does not import fleet-roster, so there is no cycle and no new import line. The exports are at mailbox-open.mjs:166/:168 on origin/main. lint.yml:1275 runs pnpm check:pm-record-recognisers, and its job step ran on this head with success.
  • 门禁 check-runs: head 9ab7fe7f0079558dd9290cfee1e0f58365571be7: 42 check-runs, 28 success, 14 skipped, 0 failed, 0 pending. The dev report shows 38 derived gate families exit 0 at the first head.
  • 接受的偏差: none. mailbox-open.mjs is untouched, as the claim set.
  • 范围外去向: none.
  • 落地条款: not on the register, so the ordinary queue applies: the seat flips it ready and arms auto-merge on its own read and green CI, under the maintainer's landing grant for this term (seat thread, 2026-10-29 22:04Z).

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 30, 2026 09:33
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 30, 2026
Merged via the queue into main with commit e1dde1a Oct 30, 2026
43 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-5a28xs branch October 30, 2026 09:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

pm(mailbox): wire mailbox-open --self-test into CI and pin the roster fixture lanes against SEAT_LANE_KINDS / SEAT_BARE_LANES

1 participant