You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This card is the single authoritative registration for the domain:spec-tooling seat (program card #5163). Index = label:pm:seat; entry point #4604.
Single-writer rule: only the incumbent seat PM edits this body; takeover = edit body + one audit comment. Before taking over: re-fetch the body, audit-comment timestamps arbitrate (first wins), read back after writing.
Current PM
GitHub account: os-project-manager (also this card's assignee)
Session: session_01AZgRyPVwi1jLb1mNNuUQ9o
Took over: 2026-08-07 ~16:46Z (takeover audit comment below), succeeding session_014wsZeReNTqiceBfLb5Pyf5, whose wind-down is fully closed out. The predecessor's ledger — disciplines ①–㉓ and the 25-merge record — is preserved in this body's edit history (revision of 2026-08-07T16:36Z) and in C 包 program card:协议工具链/门禁车道(domain:spec-tooling)—— 整包移交待接收 #5163.
This seat's ledger
Landed: 9 · In flight: 0 · Rework: 0 · 空派: 1 (standby posture as of 2026-08-08 ~06:5xZ)
MERGED 00:04Z — resolveSurfaceBase() re-anchored per the third-path ruling; dev falsified ruling premise P1 and repaired it (earned anchor), endorsed at acceptance.
MERGED 02:14Z — parenthesised bare paths linkify; lookaround pair deleted, tokenizer holds the invariant. Blast radius measured: exactly the 4 named sites. Collision with #6473 resolved by regenerating on the merged tree.
MERGED ~04:3xZ — fromCategory contract (route A as triage ruled); 9 positions → 5 links / 4 code spans / 0 plain text. Queue-kicked once on unrelated plugin-email failure, re-queued once per the 3-way checklist. Dev engineered away the stop-and-report case silently → discipline ㉕ born. Findings: #6539, count correction (4 not 5 page-less).
MERGED ~06:4xZ — SHAPE_DEPTH_LIMIT = 1, the recovered (not chosen) depth budget applied to all four descents; sweep proved every limit >1 worse than shipping nothing. Measure-first ruling satisfied: all three directions measured, D2's floor IS D1, D3 fails the 4 union-free acid-test cells and renders by iteration order. Conflicted mid-flight (3 lanes' regens × 13 mdx), resolved by regenerating on the merged tree; every PR-body number re-verified on the merged tree (before-side grew 9→13 wide cells while in flight; after-side unchanged). Dev caught its own harness artifact that would have overstated the fix. Finding: #6569.
MERGED ~06:4xZ — branch 4 header-framed-table: closed vocabulary of old/new COLUMN words derived from the stock. FP measured in isolation (22/1402, zero FP). Card's own premise corrected: label-framing is a strict SUBSET of header-framing (13/13), so no label arm — dead code refused. `
空派 — closed as duplicate of #6378, which had fixed it 7.5h before dispatch. Cause: dispatch skipped the per-path list_commits → discipline ㉔ born. My 18:31Z mechanism attribution on that card was also wrong (live-but-early read, not payload read); corrected on the thread.
Ruling log (veto windows open on the issue threads): (1) #6419: no fourth ADR-0087 disposition category. (2) #6419: prescription detector must detect real prescriptions, corpus-measured. (3) #6452: third path — re-anchor, don't weaken the verdict; dev's P1 falsification endorsed. (4) #6420→#6484 family: triage's route-A ruling adopted as binding. (5) #6374: measure-first — no contract change without corpus numbers; needs_decision WITH numbers is a success. (6) #6559: measure-FP-before-widening order maintained for the fourth consecutive detector change.
㉕ Scope expansion past the ruled contract is DISCLOSED before implementation — one paragraph naming the expansion and why it is unavoidable, then proceed; a disclosure, not a permission request. Born of docs-gen: 同目录裸源码路径(无分类段)从来不成链接 —— 9 处、4 张已发布参考页 #6484 (dev recognised the stop-and-report condition, re-read it as a measurement property, solved it silently — right engineering, wrong silence; thorough documentation ≠ flagging). First complied with on PR fix(ci): ADR-0087 迁移说明探测器读得懂「只由表头起框」的改写表 (#6559) #6588 (two expansions disclosed pre-implementation). Companion wording fix: stop-and-report tripwires are phrased "whether emitted or reachable by your change".
Operational facts (save the next seat the rediscovery)
Merging = merge queue. Direct PUT /pulls/{n}/merge → 405 Changes must be made through the merge queue. enable_pr_auto_merge's mergeMethod is cosmetic — the queue decides; all 9 landings this term were squashes. A receipt reading Merge method: merge is not a reason to unqueue. enable_pr_auto_mergefails on a draft — undraft first.
⛔ Read mergeable_state directly (pull_request_read get) on every open seat PR, every patrol.get_status returns only the combined status and structurally cannot show a conflict — that miss is how fix(spec): 内联形状摘要只展开一层,四条下钻路径共用同一条深度预算 (#6374) #6572's conflict was seen by the maintainer before this seat.
The merge=os-regen driver is load-bearing, live-verified on fix(spec): 内联形状摘要只展开一层,四条下钻路径共用同一条深度预算 (#6374) #6572: three lanes' regens collided on 13 mdx; text merge exited 0 with ZERO conflict markers and would have landed the fix(spec): docs-gen 按 JSDoc 原有行布局渲染模块描述,并让裸路径改写跳过已成型链接 (#5553, #6136) #6224 stale-combination silently — the driver flagged all 13 for regeneration on the merged tree instead. Cross-lane regen collisions cannot be serialized away (this seat's one-regen-face-at-a-time rule only governs THIS lane); the merged-tree regen is the resolution, not a failure.
Fresh-worktree false red: check:generated reports api-surface/ stale until pnpm --filter @objectstack/spec build (gen:api-surface reads built dist). Known, not drift.
[finding] #6148 的门禁只判 diff,v17 列车已有的 227 条 breaking changeset 从未被比对过 —— 抽样已见 2 条疑似同形漏登记 #6350 — OPEN, blocked solely on the maintainer's ADR-0087 registration-criterion decision (A literal T1/T2 backfill ~34 / B narrow to silently-wrong-answer breaks (recommended) / C two-sample stopgap, recommended against). Asked in chat repeatedly; not nagging. 51-row worklist lives in the audit output; whichever way it lands, write the criterion into ADR-0087 as a numbered decision.
Write-after-read on every write; issue_write labels = whole-set replacement; label writes are UNION writes with read-back.
Numbers quoted in a dispatch are either self-measured or marked as unverified relay — a wrong count crossed three layers on docs-gen: 同目录裸源码路径(无分类段)从来不成链接 —— 9 处、4 张已发布参考页 #6484 (issue table → triage → dispatch) before the dev's own re-measurement caught it.
Patrol cadence: ≤30 min with devs in flight (re-arm FIRST each patrol); 60–70 standby. Next patrol armed: ~08:30Z.
Migration note: migrated from the [PM] 分片分工登记表 — 谁在管哪个仓库的队列 #4604 seat table (2026-08-06, session session_01GcjbQLUQKysMU9uXB34iyv).
This card is the single authoritative registration for the
domain:spec-toolingseat (program card #5163). Index =label:pm:seat; entry point #4604.Single-writer rule: only the incumbent seat PM edits this body; takeover = edit body + one audit comment. Before taking over: re-fetch the body, audit-comment timestamps arbitrate (first wins), read back after writing.
Current PM
os-project-manager(also this card's assignee)session_01AZgRyPVwi1jLb1mNNuUQ9osession_014wsZeReNTqiceBfLb5Pyf5, whose wind-down is fully closed out. The predecessor's ledger — disciplines ①–㉓ and the 25-merge record — is preserved in this body's edit history (revision of 2026-08-07T16:36Z) and in C 包 program card:协议工具链/门禁车道(domain:spec-tooling)—— 整包移交待接收 #5163.This seat's ledger
Landed: 9 · In flight: 0 · Rework: 0 · 空派: 1 (standby posture as of 2026-08-08 ~06:5xZ)
domain:devx).resolveSurfaceBase()re-anchored per the third-path ruling; dev falsified ruling premise P1 and repaired it (earned anchor), endorsed at acceptance.--audit-stockoperator-only audit reusing the gate's own judging fns. Issue stays OPEN: registration criterion (A/B/C, recommend B) is in the maintainer's inbox; 51-row worklist preserved. Shallow-clone lie documented (91/92 wrong-but-plausible).fromCategorycontract (route A as triage ruled); 9 positions → 5 links / 4 code spans / 0 plain text. Queue-kicked once on unrelatedplugin-emailfailure, re-queued once per the 3-way checklist. Dev engineered away the stop-and-report case silently → discipline ㉕ born. Findings: #6539, count correction (4 not 5 page-less).framed-tablebranch 3; FP measured before writing (7/1384, all true), superset STRUCTURAL (arrow ?? table). #6419's blind-spot self-description corrected in source. Finding: #6559.SHAPE_DEPTH_LIMIT = 1, the recovered (not chosen) depth budget applied to all four descents; sweep proved every limit >1 worse than shipping nothing. Measure-first ruling satisfied: all three directions measured, D2's floor IS D1, D3 fails the 4 union-free acid-test cells and renders by iteration order. Conflicted mid-flight (3 lanes' regens × 13 mdx), resolved by regenerating on the merged tree; every PR-body number re-verified on the merged tree (before-side grew 9→13 wide cells while in flight; after-side unchanged). Dev caught its own harness artifact that would have overstated the fix. Finding: #6569.header-framed-table: closed vocabulary of old/new COLUMN words derived from the stock. FP measured in isolation (22/1402, zero FP). Card's own premise corrected: label-framing is a strict SUBSET of header-framing (13/13), so no label arm — dead code refused. `Ruling log (veto windows open on the issue threads): (1) #6419: no fourth ADR-0087 disposition category. (2) #6419: prescription detector must detect real prescriptions, corpus-measured. (3) #6452: third path — re-anchor, don't weaken the verdict; dev's P1 falsification endorsed. (4) #6420→#6484 family: triage's route-A ruling adopted as binding. (5) #6374: measure-first — no contract change without corpus numbers; needs_decision WITH numbers is a success. (6) #6559: measure-FP-before-widening order maintained for the fourth consecutive detector change.
Disciplines added this term (㉔–㉖)
list_commitson the landing site before EVERY dispatch — on the file THE ISSUE BODY names, not the one you remember. No acceleration exception. Born of [finding] Check Changeset 在opened事件上先于skip-changeset标签落地而判红 —— 每个走 skip 路线的 PR 都要白跑一次重投(今日 6 例) #6260 (premise dead 7.5h before dispatch, one dev launch wasted). It caught my own mis-recorded landing site on gen:docs 第三种残留宽度:嵌套形状深度 ——INLINE_KEY_LIMIT只管一层,摘要沿数组/Record/联合无预算下钻(Page.slots1538 字符) #6374 (I warned aboutbuild-docs.ts; the body sayslib/format-type.ts) and surfaced the satisfied serialization precondition on #6497 之后:迁移说明探测器仍读不到「只由表头/标签起框」的改写表 —— 存量 11 条声明为 breaking 的 changeset 仍在拿豁免 #6559.no active task= first confirmed case; 2 survivors showed CI-watching has value, so it is decoupled, not banned — a post-push supplement is welcome). In every brief since; complied with twice (#6148 门禁的迁移说明探测器读不到「无箭头的两列改写表」——not-required (no-migration-prescription)可被合法豁免绕过,存量已见 4 条同形 #6497, gen:docs 第三种残留宽度:嵌套形状深度 ——INLINE_KEY_LIMIT只管一层,摘要沿数组/Record/联合无预算下钻(Page.slots1538 字符) #6374). Probe criterion: CI converged >20 min with no report ⇒ probe; "no completion notification" is NOT proof of life, and absence of a PR is not proof of death.Operational facts (save the next seat the rediscovery)
PUT /pulls/{n}/merge→405 Changes must be made through the merge queue.enable_pr_auto_merge'smergeMethodis cosmetic — the queue decides; all 9 landings this term were squashes. A receipt readingMerge method: mergeis not a reason to unqueue.enable_pr_auto_mergefails on a draft — undraft first.mergeable_statedirectly (pull_request_read get) on every open seat PR, every patrol.get_statusreturns only the combined status and structurally cannot show a conflict — that miss is how fix(spec): 内联形状摘要只展开一层,四条下钻路径共用同一条深度预算 (#6374) #6572's conflict was seen by the maintainer before this seat.merge=os-regendriver is load-bearing, live-verified on fix(spec): 内联形状摘要只展开一层,四条下钻路径共用同一条深度预算 (#6374) #6572: three lanes' regens collided on 13 mdx; text merge exited 0 with ZERO conflict markers and would have landed the fix(spec): docs-gen 按 JSDoc 原有行布局渲染模块描述,并让裸路径改写跳过已成型链接 (#5553, #6136) #6224 stale-combination silently — the driver flagged all 13 for regeneration on the merged tree instead. Cross-lane regen collisions cannot be serialized away (this seat's one-regen-face-at-a-time rule only governs THIS lane); the merged-tree regen is the resolution, not a failure.check:generatedreportsapi-surface/stale untilpnpm --filter @objectstack/spec build(gen:api-surface reads built dist). Known, not drift.check-adr-0087-registration.mjs的 CLI 派发在模块顶层执行 —— 任何import都会真的把门跑一遍,判红时还会process.exit(1)掐死调用方 #6566 hazard:check-adr-0087-registration.mjs's CLI dispatch runs at module top level — importing it runs the gate and a red verdictprocess.exit(1)s the caller. Stubprocess.exitbefore importing its functions for measurement.Waiting / watch
object | object | object | object—— 同形变体是否该去重,落在 #6226 的裁决面上 #6569 (object|object dedup — A shipped & pinned, a B/C ruling costs exactly one test), docs-gen: build-docs.ts 的路由解析规则没有能转红的单测 —— 唯一把关者是 CI 的 lychee #6539 (build-docs.ts has no red-able unit coverage; observation), [finding]check-adr-0087-registration.mjs的 CLI 派发在模块顶层执行 —— 任何import都会真的把门跑一遍,判红时还会process.exit(1)掐死调用方 #6566 (real defect, plausible pm:queue). Plus a relayed question: the imperative-prescription class lives only in #6497 之后:迁移说明探测器仍读不到「只由表头/标签起框」的改写表 —— 存量 11 条声明为 breaking 的 changeset 仍在拿豁免 #6559's thread (05:06Z comment) — decide whether it deserves its own card before #6497 之后:迁移说明探测器仍读不到「只由表头/标签起框」的改写表 —— 存量 11 条声明为 breaking 的 changeset 仍在拿豁免 #6559 closes, else it loses its triage entry point.Transferred out
#6383 →
domain:spec; #6145 earlier via the same route; #6425 →domain:devx(landed there).Scope
Protocol toolchain / gates / generators + accompanying docs (#5163 card authoritative). File surface:
scripts/**,packages/spec/scripts/**,packages/spec/docs/**,packages/lint/**,content/docs/**(⛔ nevercontent/docs/releases/). ⛔ Never touchespackages/spec/src/**/*.zod.tsor the strictness ledger.Standing notes
pm:queue≠ dispatchable).issue_writelabels = whole-set replacement; label writes are UNION writes with read-back.session_01GcjbQLUQKysMU9uXB34iyv).