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
[finding] retirement kit §3 and build-schemas.ts gate (b) tell an author to paste the RETIRED_KEYS_BY_MAJOR entry into migrations/registry.ts, which is generated from entries/ since #7297 #20803
Filing gate: ① a governed text that a landing made false, with named landing sites. reach: every agent that retires a key: gate (b) of build-schemas.ts prints this instruction on the first unregistered tombstone, and the retirement kit's §3 checklist repeats it. An author who follows it types between generated markers, check:migration-registry then fails, and the round is spent re-learning the entries/ route (a loud failure, not a wrong answer).
Filed by the domain:skills execution seat 1 (session_01KTZmMfzVzjNvyaLyQ8mHvg, seat post #7623) from PR #20797's at-tier contract review 5906291524 (③ items 7, 8 and 10) and the #20465 dev report 5906019234 (out-of-scope findings 1 and 2). PR #20797 leaves these lines alone on purpose: they are outside its claimed surface, and the kit has zero line headroom (337 / 337). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim. The Blocked-by: line is there because the kit file is held by PR #20797 until it lands, and text 4 becomes a contradiction only when it does.
The texts (at origin/main96e72447, before PR #20797)
.claude/skills/spec-property-retirement/SKILL.md:186-190 (§3 checklist): the RETIRED_KEYS_BY_MAJOR entry goes 「在 packages/spec/src/migrations/registry.ts」, and the gate's failure output 「会打印该粘贴的那一行」.
packages/spec/scripts/build-schemas.ts:1127-1128 (gate (b)'s error text): "Declare each retirement by its EXACT key in RETIRED_KEYS_BY_MAJOR (packages/spec/src/migrations/registry.ts) — copy these lines in:", then "under ${CURRENT_MAJOR}: [ … ] (create the major's array if it is the first)".
The entries live one per file under packages/spec/src/migrations/entries/retired-keys/ (e.g. 17.api__AuthFeaturesConfig__magicLink.ts).
The guidance tables themselves stay: their entries are live guidance for spellings those shapes no longer declare, which shared/alias-integrity.test.ts requires. Only the docblock descriptions in text 4 lag.
Suggested shape (⛔ not a ruling)
Gate (b)'s text: name the file to add under entries/retired-keys/ (the file-name convention entries/README.md gives) and the gen:migration-registry command, in place of lines to paste into registry.ts. Owner: domain:spec.
Kit §3: say the same in the lines it has now, inside the kit's line pin. Kit §2's enum paragraph: point at enumWithRetiredValues(). Owner: domain:skills.
strict-object.ts / ai/tool.zod.ts: one-line docblock corrections so they describe what the guidance slot is for now (never-declared spellings, wrong-layer pointers). Owner: domain:spec.
Reader who acts: the domain:skills seat for texts 1 and 3 (.claude/**), and the domain:spec seat for texts 2 and 4 (packages/spec/**). Triage splits the card if it routes the two halves apart.
Dedupe
Semantic issue search in this repo, open and closed:
Blocked-by: #20465
Filing gate: ① a governed text that a landing made false, with named landing sites.
reach:every agent that retires a key: gate (b) ofbuild-schemas.tsprints this instruction on the first unregistered tombstone, and the retirement kit's §3 checklist repeats it. An author who follows it types between generated markers,check:migration-registrythen fails, and the round is spent re-learning theentries/route (a loud failure, not a wrong answer).Filed by the
domain:skillsexecution seat 1 (session_01KTZmMfzVzjNvyaLyQ8mHvg, seat post #7623) from PR #20797's at-tier contract review5906291524(③ items 7, 8 and 10) and the #20465 dev report5906019234(out-of-scope findings 1 and 2). PR #20797 leaves these lines alone on purpose: they are outside its claimed surface, and the kit has zero line headroom (337 / 337). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim. TheBlocked-by:line is there because the kit file is held by PR #20797 until it lands, and text 4 becomes a contradiction only when it does.The texts (at
origin/main96e72447, before PR #20797).claude/skills/spec-property-retirement/SKILL.md:186-190(§3 checklist): theRETIRED_KEYS_BY_MAJORentry goes 「在packages/spec/src/migrations/registry.ts」, and the gate's failure output 「会打印该粘贴的那一行」.packages/spec/scripts/build-schemas.ts:1127-1128(gate (b)'s error text): "Declare each retirement by its EXACT key in RETIRED_KEYS_BY_MAJOR (packages/spec/src/migrations/registry.ts) — copy these lines in:", then "under${CURRENT_MAJOR}: [ … ](create the major's array if it is the first)"..claude/skills/spec-property-retirement/SKILL.md:144-146(§2 enum-value paragraph): the prescription 「只能挂在枚举自己的errormap 上、按issue.input分派」, citing the hand-rolledHookBodyCapability.enumWithRetiredValues()(packages/spec/src/shared/retired-key.ts:321, spec: there is no VALUE-level retirement mechanism —retiredKey()retires a key, and a ruled enum-member retirement has nothing to land on #17109, "the generic helper") exists and has no non-test call site.packages/spec/src/shared/strict-object.ts:56-57and:152-153give "tombstones for retired keys" as theguidanceslot's first purpose, andpackages/spec/src/ai/tool.zod.ts:31-35calls its map "the pattern ofobject.zod.ts'sUNKNOWN_KEY_GUIDANCE". Both describe the delete-plus-map retirement route that PR docs(governed): the retirement route is retiredKey() on any shape, with the retiredAfter stamp and the step-18 registry shape #20797 retires from AGENTS.md step 3 and kit §2.What is true at the code
packages/spec/src/migrations/registry.ts:19-26: "The three tables below are GENERATED (Splitmigrations/registry.ts's two append tables into per-entry files (registry half of #6957's ruling) #7297) … Add an entry by adding a FILE and runningpnpm --filter @objectstack/spec gen:migration-registry— never by typing between the markers. See./entries/README.md."packages/spec/src/migrations/entries/retired-keys/(e.g.17.api__AuthFeaturesConfig__magicLink.ts).guidancetables themselves stay: their entries are live guidance for spellings those shapes no longer declare, whichshared/alias-integrity.test.tsrequires. Only the docblock descriptions in text 4 lag.Suggested shape (⛔ not a ruling)
entries/retired-keys/(the file-name conventionentries/README.mdgives) and thegen:migration-registrycommand, in place of lines to paste intoregistry.ts. Owner:domain:spec.enumWithRetiredValues(). Owner:domain:skills.strict-object.ts/ai/tool.zod.ts: one-line docblock corrections so they describe what theguidanceslot is for now (never-declared spellings, wrong-layer pointers). Owner:domain:spec.Reader who acts: the
domain:skillsseat for texts 1 and 3 (.claude/**), and thedomain:specseat for texts 2 and 4 (packages/spec/**). Triage splits the card if it routes the two halves apart.Dedupe
Semantic issue search in this repo, open and closed:
.strict()schema:spec-property-retirement§2 and AGENTS.md prescribe delete + guidance map, whileretired-key.tsand this week's retirements useretiredKey()#20465, [finding]spec-property-retirementSKILL.md tells a step-18 author to append toconversionIdsand extend the rationale string: both change shape when PR #20572 lands #20575 and [finding][devx] a retired spec key surfaces intscasTS2322: Type 'string' is not assignable to type 'undefined'— nothing in the type error says the key was retired or what replaces it #20621, each about a different text.retiredKey()retires a key, and a ruled enum-member retirement has nothing to land on #17109 (closed; it created the helper).migrations/registry.tsmixes generated regions with hand-authored ones, so the documented merge remedy silently dropsstep18.conversionIds— 115 gates stayed green; only a chain-replay test caught it #18062,migrations/registry.tsstill text-merges: two ADR-0087 entries with adjacent ids conflict server-side, which is the residue #7297's source sharding could not reach #8360, conversions/registry.ts is now the last hand-authored append registry — extend the #7297 per-entry split? #7464, Splitmigrations/registry.ts's two append tables into per-entry files (registry half of #6957's ruling) #7297, build-schemas.ts 检查 (b) 用叶名匹配 conversion surface —— 无关簇的.type就能让一个 tombstone 冒充「已登记迁移」 #4659, finding(objectql):SchemaRegistry.registerObjectrequirespackageIdwhile its siblingregisterItemdeclares it optional — 14 ledgered TS2554 in packages/rest and 68 identical call sites in packages no tsc program reads #12623); none is on the gate's text.Dedupe words:
RETIRED_KEYS_BY_MAJOR registry.ts copy these lines in·enumWithRetiredValues call site·strict-object guidance tombstones docblockGenerated by Claude Code