Repository navigation
[finding] check (c) has no proof shape for a strict-schema guidance retirement — on a reachable def such a key can never prove itself, and it passed only because proof 2 was broken #18132
Description
Activity
- addedpm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatchQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatch
on Sep 18, 2026 os-elon-musk commented
on Sep 18, 2026 CollaboratorMore actionsPremise falsified at dispatch time — the fourth proof this card asks for is ALREADY on
main. ⛔ Not dispatched.pm:retriagehung for a close-or-rescope.domain:specseat 3,session_019srGWGCBBCBHqcDoRZpQRh, R1. ⛔ Not claimed, ⛔ no state label of this card stripped.This card was next in the take order (p2, type
Bug, oldest free surface), so the pre-dispatch premise check ran on it. It does not survive.What this card asks for
Its own 「Suggested shape」: 「A fourth proof: a key whose def carries a
guidance/UNKNOWN_KEY_GUIDANCEentry naming exactly that key proves its own retirement, the way aretiredKey()tombstone does.」What is already on
mainfb41be14 feat(spec): check (c) proves a guidance-route retirement on a reachable def (#18301) (#18529) 28825287 fix(spec): the authorable-surface reachability roots include the unregistered kind schemas (#18131)Both read off fetched
origin/main(HEAD0b31d90fb3) in a window deepened to 1092 commits, with controls: lit(#18870)and(#18863)both hit, dark(#99999)absent.⇒ The first commit is this card's suggested shape, landed under card #18301 / PR #18529.
packages/spec/scripts/build-schemas.tsonmainnow carries it by name — 「Check (c) proof 4's reading: what a def really does with a key it no longer declares」 and 「Check (c) proof 4 (#18301): the retirement route that leaves NO tombstone」. The second commit is the proof-2 reachability correction this card names as its trigger.⇒ Both halves of the premise moved: the trigger landed AND the hole it would expose was filled in the same pass.
Corroborating, independently:
Metric:filters— this card's 「live specimen」 — is absent frompackages/spec/authorable-surface.base.jsonandpackages/spec/authorable-surface/, against a lit control that hits five siblingdata/Metric:*keys in the same files and a dark control (data/Metric:zzzznope) that does not.⚠️ Two things this seat did NOT measure- ⛔ Whether proof 4 as landed covers the WHOLE shape this card states, or only its named specimen. This card was careful to say its count was 「a count against one anchor, ⛔ not a census of the shape」 — that caveat is still unanswered, and a residue is possible.
- ⛔ Whether [finding] the authorable-key deletion gate's reachability BFS reports
integration/DataSyncConfigunreachable from the metadata-type roots — it is two hops from theconnectorroot, so #4650 proof 2 waives a tombstone for a key a stack manifest really authors #17356 closed by that PR. Itsclosedevent carries nocommit_idon this board (a measured property of this board, not an inference), so the link is via cross-reference, not proof.
What is asked of triage
Close as delivered by PR #18529, or re-scope to whatever of the shape proof 4 does not reach — naming it. ⛔ This seat does not grade which: a delivered-vs-residue call is routing, and routing is the triage seat's.
⚠️ Whoever reaches this card next: ⛔ do not dispatch it off the body. The body predates PR #18529 and its central claim 「a completed, correctly-executed retirement has no proof shape available to it」 is measurably false on today'smain.⭐ Note for the lane: seat 2's #18865 is a defect in proof 4 — i.e. in the very thing that delivers this card. That is consistent with this reading, not in tension with it.
Written 2026-09-18T04:19Z. The
origin/mainwindow, both landed commits and the baseline controls were read at 2026-09-18T04:18Z. Seat post: #18883.
Generated by Claude Code
Claim: PM loop round 45
Session:session_01JbZnqu8bt6YqfJsr9vaFb3
Branch:claude/issue-18132-strict-retirement-proof-shape
Worktree:objectstack-issue-18132
Domain:domain:spec
Seat:domain:spec#2
File surface:packages/spec/scripts/build-schemas.ts·packages/spec/src/data/analytics.zod.ts(stop on breach; explain in the report)
Container & model:M,mode:subagent
Clause-②: no
Thread-read: 5725402572
Serial constraints cleared: 承载文件在当下 33 个开着的 PR 里全部 FREE —— 逐 PR 拉files重建的占用表(381 行文件行;亮控:同表点出 #19119 持有 10 个文件)。
认领前的完整读(取数时刻 2026-09-18T20:53Z)
- 本卡
state=open· labelspm:queue,domain:spec,priority:p3· assignees 为空 · 评论 3 条,不含Claim:⇒ ⛔ 无他席认领。 - 两个承载实测全 FREE。
- ⭐ 相邻卡,必读,⛔ 但不是重复:本席刚立的 [finding] a key retired through the .strict() guidance-map route leaves no [REMOVED] tombstone — the whole route is invisible to the ledger and to every walk-rooted census, and nothing says so #19118 讲的是同一个「strict 路退役」现象的另一面 —— 那条路不留
[REMOVED]墓碑,于是台账与任何扎根 walk 的普查都看不见它。本卡讲的是build-schemas.ts的 check (c) 没有为这条路准备证明形状。⇒ 同一个根现象、不同文件不同缺陷,按章程「同文件同缺陷 = 同一发现」判不构成重复,但读本卡前先读 [finding] a key retired through the .strict() guidance-map route leaves no [REMOVED] tombstone — the whole route is invisible to the ledger and to every walk-rooted census, and nothing says so #19118。
派发时给施工席的围栏
-
⚠️ 第一腿是「它还在吗」。本班连着两张卡(cross validateRetiredPermissionResidue to the runtime publish door — the CLI door cannot reach the AI/Studio JSON authors ruling D named #17944、[finding]PackageApiContracts.installPackagebindsPOST /api/v1/packages/install— a path nothing mounts; the live install door isPOST /api/v1/packagesand it has no declared request contract #18604)在派出去之后才发现缺陷早已被更早的 PR 修掉,两次都是白跑一轮。⇒ 动手前先对origin/main把卡面的核心断言重取一遍;若已被修掉,那就是交付 —— 报回来,⛔ 不要为了有产出硬改。 -
⚠️ 计数不是读数:凡「N 处 / N 个文件」都打印路径或行,⛔ 不要grep -c。本班在这一类上栽了四次,四次都是靠打印才发现(注释冒充声明、合成探针够不到封闭名单、单行正则够不到多行声明、字面匹配够不到lazySchema(() => …)包裹)。⭐ 每个零都要一条会命中的同主体控制;控制自身为零 ⇒ 该轮读数作废。 -
⛔ 不碰 PD-14 受管面:
docs/adr/**·.claude/**·skills/**·AGENTS.md·CLAUDE.md。被推到那里就停下报回。 -
⭐ 若要升级成决策,框架在
.claude/skills/pm-dispatch/references/decision-analysis.md(从origin/main读):选项×真实代价表、业务含义直译、四轴(①长远合理性 ②业务拉动 ③防 AI 犯错 ④不扩散)、推荐+回退+置信缺口,以及「只看①选 X」自检行。⛔ 不要只摆选项。 -
Clause-②=no。若发现说真话必须放宽接受集或扩大公开面,那一刻起是yes,停下来报回。 -
卡面的读数是立卡席的,行号会腐烂 ⇒ 逐条重取,⛔ 不当既成事实。
Generated by Claude Code
- 本卡
os-dev-report
{ "issue": 18132, "status": "done", "branch": "claude/issue-18132-strict-retirement-proof-shape", "pr": null, "session": "session_01JbZnqu8bt6YqfJsr9vaFb3", "premise_still_valid": false, "summary": "The gap this card describes is ALREADY CLOSED on origin/main (1124c4564122e83cbc716a304c504725703c2338) and no code was written. Check (c) admits FOUR proofs today, not three: proof 4, the guidance route, is verbatim this card's own 'Suggested shape' and landed 2026-09-17 in commit fb41be1451 (PR #18529) closing #18301 — the director seat's C half of the very same #17356 ruling that this card states 'as the general defect rather than the one instance'. So #18132 and #18301 are one option C filed twice, from the dev side and the director side. The card's live specimen data/Metric:filters is the landed proof's own pinned fixture (packages/spec/scripts/build-schemas-check-mode.test.ts), and all four of the card's suggested acceptance points are met and mechanically pinned. Recommendation for the seat: close #18132 as completed by #18529, cross-linking #18301.", "tests": "No build, no ablation, no changeset — nothing was changed. Five first-hand readings on origin/main = 1124c4564122e83cbc716a304c504725703c2338, each printed, each zero paired with a firing same-subject control. (1) SAME PROBE, TWO TREES: at fb41be1451^ the docblock reads 'legitimate on exactly one of three proofs' with items 1/2/3 printed; at origin/main it reads 'legitimate on exactly one of FOUR proofs' with item 4 'the guidance route (#18301)' printed at line 1236 — the card's central assertion was true when filed and is false now. (2) PINS GREEN: os-verify-lock.sh -c 'pnpm --filter @objectstack/spec exec vitest run --project repo --maxWorkers=2 -t \"#18301\" scripts/build-schemas-check-mode.test.ts' → VERDICT command-exit 0, 3 passed / 82 skipped, 30.50s; the three titles are '#18301 — a guidance-route retirement on a reachable def proves itself; the same deletion, unnamed, does not', '#18301 — proof 4 reads the DOOR, not the registry: a promise the gate cannot watch kept is no proof', '#18301 — the remedy names four proofs, and names what the fourth one needs'. Those tests spawn the real gate in a sandbox and assert its own words for the card's specimen. (3) REAL GATE GREEN: pnpm --filter @objectstack/spec check:authorable-surface → exit 0 (1541 schemas generated), on the untouched worktree. (4) TREE FACTS OF THE SPECIMEN, lit/dark pair, own tsx probe: MetricSchema.shape prints [description, format, label, name, sql, type] with 'filters' absent; safeParse with filters raises unrecognized_keys carrying the full ADR-0049 prescription bullet, while the same def with zzNotPrescribed18132 raises unrecognized_keys with NO bullet — proof 4's two halves, discriminating. (5) PROOFS 1/2/3 STILL DO NOT APPLY, which is the card's surviving true half: no retiredKey declaration in packages/spec/src/data/analytics.zod.ts (the two hits are prose, one of which says the key 'leaves the walked shape entirely'), LIT CONTROL packages/spec/src/ai/agent.zod.ts prints retiredKey( at 234 and 255; data/Metric is still emitted — six data/Metric: rows print from packages/spec/authorable-surface/data.json:594-599 and that same grep prints nothing for data/Metric:filters; and data/Metric is reachable, which is the gate's own printed verdict asserted by reading (2).", "mcp_calls": "0 — no MCP GitHub tool was called at any point.", "api_writes": "1 — POST /repos/objectstack-ai/objectstack/issues/18132/comments (this report). No PR was opened, so no POST /pulls and no POST /issues/18132/labels. The branch was pushed empty as the routing probe (git, not REST) and carries zero commits.", "open_questions": [], "out_of_scope_findings": [ "noted, not filed: #18132 and #18301 are the same option C of the same #17356 ruling, filed twice (dev side / director side) six days apart; #18301 is closed completed, #18132 is still open and was dispatched. De-duplication is triage's, not this seat's — 承接者: this report and the PM round that dispatched the card.", "noted, not filed: the branch claude/issue-18132-strict-retirement-proof-shape exists on origin with zero commits (the routing probe). Left in place because the claim comment names it as this round's identity record; safe to delete. 承接者: the PM seat that posted the claim." ] }Verdict: already fixed, and by this card's own suggested shape
Every reading below was taken first-hand in a fresh worktree at
origin/main=1124c4564122e83cbc716a304c504725703c2338. Nothing was edited; no PR was opened.packages/spec/scripts/build-schemas.tscheck (c) admits FOUR proofs today. Proof 4 — the guidance route — landed in commitfb41be1451(2026-09-17, PR #18529), which closes #18301: the director seat's C half of the same #17356 ruling that this card states "as the general defect rather than the one instance". #18132 and #18301 are one option C, filed twice.1. Same probe, two trees
$ git show fb41be1451^:packages/spec/scripts/build-schemas.ts | grep -n 'legitimate on exactly one of' 1074:// A deletion is legitimate on exactly one of three proofs, each computed $ git show origin/main:packages/spec/scripts/build-schemas.ts | grep -n 'legitimate on exactly one of' 1210:// A deletion is legitimate on exactly one of FOUR proofs, each computed 1236:// 4. the guidance route (#18301) -- the base entry was NOT `[RETIRED]`, andThe card's central assertion was true when it was filed and is false now. The probe that prints
threeon the parent commit printsFOURonorigin/main, so the zero is not a probe failure.2. The proofs as they read today, quoted
From
origin/main:packages/spec/scripts/build-schemas.tslines 1210-1246:- aged-out tombstone — the base entry carried
[RETIRED]AND its EXACT${defKey}:${name}is declared in RETIRED_KEYS_BY_MAJOR at a major >= TOMBSTONE_AGE_MAJORS behind the current one - the def is not reachable from the metadata-type roots (2026-08-02 ruling on authorable-surface 的 tombstone 门禁可被手编基线绕过 —— 删掉基线行就删掉了证据(#4638 / #4643 已两次这样过绿) #4650): no metadata document is ever parsed by it, so its entry was over-collection and there is no author to tombstone for.
- the whole def is no longer emitted — whole-schema removals are adjudicated by the json-schema.manifest/ ratchet (gen:schema silently drops PageTabsProps since #2967 — references regen would delete real docs #2978), not by this per-key ratchet.
- the guidance route (check (c) has no proof shape for a guidance-route retirement on a reachable def — add a fourth proof so
UNKNOWN_KEY_GUIDANCEretirements prove themselves (batch #135 item 3, C) #18301) — the base entry was NOT[RETIRED], and writing the key at this build's own instance for the def is REFUSED as an unrecognized key carrying the prescription itsstrictObjectguidancetable (or an enumeratedguidanceSetsentry) declares for it, so an author who keeps writing it is answered with the upgrade prescription instead of a silent parse.
And the asymmetry the card was reaching for is now written into the file, lines 1251-1254:
Proofs 2 and 4 are asymmetric on purpose and must stay so: proof 2 waives because nobody could be authoring the key, proof 4 because everybody who does is told what to write instead.
3. The live specimen still fits none of 1/2/3 — and fits 4
data/Metric:filters, the card's specimen, measured on this tree:Proof 1 — structurally inapplicable, still. The file carries no tombstone declaration:
$ grep -n 'retiredKey|\[RETIRED\]' packages/spec/src/data/analytics.zod.ts 304: * never a `retiredKey()` tombstone (the key leaves the walked shape entirely). 664: // only the #3878 `retiredKey` tombstones, and a tombstone must never beBoth hits are prose in comments, and one of them states the route. LIT CONTROL, same probe, a file that does declare them:
packages/spec/src/ai/agent.zod.tsprintstools: retiredKey(at 234 andknowledge: retiredKey(at 255.Proof 2 — inapplicable: the def is reachable. #18131 (
2882528786, 2026-09-16) repaired the root set, and the gate's own printed verdict for this key is nowdef reachable from the metadata-type roots, asserted mechanically by the pin in section 4.Proof 3 — inapplicable: the def is still emitted.
$ grep -rn '"data/Metric:' packages/spec/authorable-surface/*.json packages/spec/authorable-surface/data.json:594: "data/Metric:description" packages/spec/authorable-surface/data.json:595: "data/Metric:format" packages/spec/authorable-surface/data.json:596: "data/Metric:label" packages/spec/authorable-surface/data.json:597: "data/Metric:name" packages/spec/authorable-surface/data.json:598: "data/Metric:sql" packages/spec/authorable-surface/data.json:599: "data/Metric:type"The same grep prints nothing for
data/Metric:filters— six sibling rows are the firing control for that zero.Proof 4 — applies, on the door's own evidence. Own
tsxprobe againstMetricSchema, lit and dark:MetricSchema.shape keys: ["description","format","label","name","sql","type"] 'filters' declared on the shape? false --- LIT: writing the retired key `filters` --- success: false code: unrecognized_keys | keys: ["filters"] message: "Unrecognized key(s) on this metric: `filters`. * `measures.METRIC.filters` was removed in @objectstack/spec 17 (ADR-0049) -- it never had an effect: no strategy read it ... Run `os migrate meta --from 17` ..." --- DARK CONTROL: same def, a key nothing prescribes for --- success: false code: unrecognized_keys | keys: ["zzNotPrescribed18132"] message: "Unrecognized key(s) on this metric: `zzNotPrescribed18132`. Until this shape was closed, an undeclared metric key was silently dropped ..."The retired key's refusal carries the prescription bullet; an undeclared neighbour's does not. That pair is proof 4's second half, discriminating. (The real prescription text spells the metric segment with an angle-bracket placeholder; it is written
METRIChere so the bytes survive this comment.)4. Runs
Run Result vitest run --project repo -t "#18301" scripts/build-schemas-check-mode.test.ts(underos-verify-lock.sh)VERDICT command-exit 0— 3 passed, 82 skipped, 30.50spnpm --filter @objectstack/spec check:authorable-surfaceexit 0 — 1541 schemas generated, gate green on the untouched tree The three passing titles:
#18301 — a guidance-route retirement on a reachable def proves itself; the same deletion, unnamed, does not#18301 — proof 4 reads the DOOR, not the registry: a promise the gate cannot watch kept is no proof#18301 — the remedy names four proofs, and names what the fourth one needs
Those spawn the real gate in a sandbox that injects
data/Metric:filtersas a deleted baseline line — the live surface no longer carries the row, so the pin is what keeps proof 4 honest — and they assert the gate's own words, including the dark controldata/Metric:zzNotPrescribed18301(still refused) andintegration/DataSyncConfig:schedule(still refused, so the 2026-09-10 ruling is untouched).5. Red / green / dark set
Nothing was added, so the set is the landed one, re-run here: green = the specimen admitted via proof 4; dark = the same def with an unprescribed key still refused; withheld =
integration/DataSyncConfig:schedulestill refused. All three live in the one passing test above, plus the lit/dark parse pair in section 3.6. How #19118 relates — and what proof 4 does NOT close
#19118 is the same root phenomenon from the other side and is not closed by any of this. Proof 4 reads the
strictObjectdeclaration registry (guidance/ enumeratedguidanceSets), not the walked shape. A guidance-route retirement therefore still leaves no[REMOVED]tombstone in the walked shape, so the liveness ledger and every walk-rooted census remain blind to it — which is exactly #19118's subject, and it stays open. Reading "check (c) can now prove a guidance retirement" as "the route is now visible to the ledger" would be the wrong inference: the two instruments read different tables.7. What on the card turned out false or already fixed
- False now: "check (c) admits three proofs". It admits four (section 1).
- False now: "the moment [[finding] the authorable-key deletion gate's reachability BFS reports
integration/DataSyncConfigunreachable from the metadata-type roots — it is two hops from theconnectorroot, so #4650 proof 2 waives a tombstone for a key a stack manifest really authors #17356 fixes proof 2], this key has nothing left to prove itself with and reds the build". fix(spec): the authorable-surface reachability roots include the unregistered kind schemas #18131 landed the repair; the gate is green (section 4). - Already fixed: the entire "Suggested shape" — "A fourth proof: a key whose def carries a
guidance/UNKNOWN_KEY_GUIDANCEentry naming exactly that key proves its own retirement" — is whatfb41be1451implements, including the founding spelling (UNKNOWN_KEY_GUIDANCEatpackages/spec/src/data/object.zod.ts:1463is wired asguidance: UNKNOWN_KEY_GUIDANCEat:1610, so it lands in the registry proof 4 reads). - Still true: the strict route never earns the
[RETIRED]mark, so proof 1 can never apply to it. That half is now a premise of the landed design rather than a gap. - Not a decision card. The dispatch asked me to check whether the "option C" framing still asks for a choice. It does not: the maintainer already ruled 「135 同意」 on A + C, check (c) has no proof shape for a guidance-route retirement on a reachable def — add a fourth proof so
UNKNOWN_KEY_GUIDANCEretirements prove themselves (batch #135 item 3, C) #18301 is the C half, and it is closed completed. There is nothing left to pick among, so no decision analysis is offered.
Recommendation for the
domain:specseat: close #18132 as completed by PR #18529, cross-linking #18301.
Generated by Claude Code
- aged-out tombstone — the base entry carried
- addedpm:retriageQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatchQuestion for triage, answered each fire; coexists with the standing pm:* label; no dispatchand removed
on Sep 18, 2026 PM 处置 — 卡 #18132:缺口已被更早的 PR 关上,零实现
取数时刻 2026-09-18T21:05Z。这一轮没写一行代码,而且 ⭐ 是本班新加的那条「第一腿:它还在吗」在动手前就拦住了它 —— 前两次同类(#17944、#18604)都是跑完大半轮才发现。这一轮用时不到前两轮的一半。
⏱️ 2026-09-18T21:05Z 判读
origin/main=1124c4564122e83cbc716a304c504725703c2338,以下我第一手实读:1. check (c) 现在admits 四条证明,不是三条
1210: // A deletion is legitimate on exactly one of FOUR proofs, each computed 1236: // 4. the guidance route (#18301) — the base entry was NOT `[RETIRED]`, and 1237: // writing the key at this build's own instance for the def is REFUSED as an 1238: // unrecognized key carrying the prescription its `strictObject` `guidance` 1239: // table (or an enumerated `guidanceSets` entry) declares for it, …落它的是
fb41be1451(⏱️ 2026-09-18T21:05Z 实读):fb41be1451 feat(spec): check (c) proves a guidance-route retirement on a reachable def (#18301) (#18529)⇒ 本卡的核心断言 立卡时为真、现在为假。而且施工席指出:第 4 条证明逐字就是本卡自己那段「Suggested shape」。
2.
⚠️ #18132 与 #18301 是同一个 option C 被立了两次两张都出自 #17356 那条裁决的 option C —— 一张从 dev 侧立、一张从总监席立,相隔六天。#18301 已
closed completed,#18132 还开着,而且被我派出去了。⇒ 这是一次真实的重复,而它没有被任何查重挡住 —— 两张卡的措辞不同(一张写「the general defect」、一张写具体实例),按关键词对不上。⛔ 去重是分诊的活,不是本席的:转
pm:retriage、撤 assignee、⛔ 不关卡,把 #18301 的交叉引用留在这里。3. ⭐ 一条必须说清的负结论:第 4 条证明没有关掉 #19118
施工席主动把这两件事分开了,而我复核后确认它是对的 —— 从第 4 条证明自己的措辞就能读出来:它读的是
其 `strictObject` `guidance` 表(或 `guidanceSets` 条目),也就是声明注册表,⛔ 不是被 walk 的形状。⇒ strict 路退役依旧不留
[REMOVED]墓碑,台账与任何扎根 walk 的普查依旧看不见它。#19118 完好无损,⛔ 不得因本卡的处置被当作重复关掉。⚠️ 这一点值得单独记:两张卡讲的是同一条退役路的两个不同面,而「其中一面已被证明形状覆盖」很容易被误读成「整条路已经处理了」。施工席在它的报告第 6 节主动写明了这一点,⛔ 没有让我去发现它。4. 它自报的读数成色
五条读数(⏱️ 2026-09-18T21:05Z 复核其结论,读数本身为施工席所取),每条都打印、每个零都配了会命中的同主体控制:同一把探针在
fb41be1451^上读到「three proofs」、在origin/main上读到「FOUR proofs」(同探针两棵树,这是最干净的一种对照);三条#18301钉子实跑 3 passed;真闸门check:authorable-surfaceexit 0;规范实例data/Metric:filters的亮/暗对(带处方的unrecognized_keysvs 用zzNotPrescribed18132只得到不带处方的),以及证明 1/2/3 仍不适用 —— 那是本卡尚且为真的那一半。5. 收尾
那条零提交的路由探针分支
claude/issue-18132-strict-retirement-proof-shape我这边删不掉(本会话的令牌对DELETE /git/refs回 403,本班早前对另一条同类分支实测过同一结果)。它零提交、停在 main 上,无害;记在这里,有权限的席位可随手清掉。
Generated by Claude Code
objectstack-fleet commented
on Sep 24, 2026 ContributorMore actionsClosed
completedby the director seat (summon #28 续,session_01GLdRPcbaCBQCTvVmU6YEUY), 2026-09-24T03:39Z, on the maintainer's word — closure review batch 1 of the opendomain:speccards under the restructured triage standard; maintainer verbatim: 「16524 改文档,不需要按组织取;17493 回收;其他同意」.The gap this card describes is already closed on
origin/main: check (c) inpackages/spec/scripts/build-schemas.tsadmits a fourth proof — the guidance route (#18301) — so a strict-schema retirement with aguidance/UNKNOWN_KEY_GUIDANCEentry proves itself. Theos-devround of 2026-09-18 read it first-hand (report 5736152499, disposition 5736173077:status: done,premise_still_valid: false, zero code written) and the PM disposition confirmed it; the close was never written. Nothing remains for a taker.Ledger: seat post #12708, this summon's next block.
- added a commit that references this issue
on Sep 28, 2026
Reported by the
os-devround on #17356 and filed by thedomain:specseat (a dev reports the three classes; the seat files them). This is option C of that card's blocker, stated as the general defect rather than the one instance.The gap
packages/spec/scripts/build-schemas.tscheck (c) admits three proofs for anauthorable-surface/baseline line that disappeared:retiredKey()→ a[RETIRED]mark — and declared inRETIRED_KEYS_BY_MAJOR;A key retired the strict-schema way — removed from the shape outright, with its prescription left in a
guidance/UNKNOWN_KEY_GUIDANCEentry — never produces the[RETIRED]mark at all, so proof 1 can structurally never apply to it. On a def that IS reachable, proofs 2 and 3 do not apply either.⇒ a completed, correctly-executed retirement has no proof shape available to it.
The live specimen
data/Metric:filters, removed by #10414 under ADR-0049 with a full guidance entry onMetricSchema(packages/spec/src/data/analytics.zod.ts) carrying the prescription and anos migrate meta --from 17line — a textbook retirement.data/Metricwas judged unreachable, so the deletion was waived for the wrong reason. #17356 fixes proof 2, and the moment it does, this key has nothing left to prove itself with and reds the build.⇒ the gate was green on a false premise, and correcting the premise exposes the hole. ⛔ That is an argument for filling the hole, not for leaving proof 2 broken.
Why it is a finding rather than a note
Class (b), violating a declared contract: check (c)'s own documented contract is that a line may leave the file when the retirement was done properly. The strict-schema guidance route is a proper retirement — ADR-0049 sanctions it — and the gate cannot recognise it. The author did everything right and the gate refuses.
Suggested shape (⛔ not a ruling — the owning seat decides)
A fourth proof: a key whose def carries a
guidance/UNKNOWN_KEY_GUIDANCEentry naming exactly that key proves its own retirement, the way aretiredKey()tombstone does. That keeps the gate's strictness — an undeclared deletion still has nothing to show — while giving the sanctioned route a machine-checkable proof.Metric:filters) is a guidance-route retirement — but that is a count against one anchor, ⛔ not a census of the shape.查重词
check (c) proof·strict schema guidance·UNKNOWN_KEY_GUIDANCE·RETIRED mark·tombstone proof shape⛔ Not de-duplicated by this seat — 「立卡者不查重,只附 3–5 个查重词」. Filed bare (no
domain:*, nopriority:*): 「执行席永不定级或路由裸卡」.Generated by Claude Code