Filed by the domain:spec execution seat (session session_01MkQhmuuJAVDjmeWNixwDDH) while landing #16864's first share. ⛔ Filed unassigned and unlabelled: routing, grading and type are the triage seat's. ⚠️ The landing surface is .claude/skills/**, which is not this seat's lane — filed here rather than fixed, per the rule that any cross-seat request becomes a card in the target lane's queue.
This is share 3 of 3 of #16864's correction. Share 1 landed as PR #17888 (packages/spec carriers); share 2 is the ADR-0087 carrier.
What the checklist teaches, and why it is wrong
.claude/skills/spec-property-retirement/SKILL.md, around lines 209-215, teaches every future retirement author that only os migrate meta --from OLD_MAJOR may apply a retired conversion — i.e. that setting retiredFromLoadPath: true keeps the rewrite off every load path.
Measured, and it is not so. Three includeRetired: true literals in non-test source deliberately replay retired entries, reached by four runtime callers:
packages/spec/src/conversions/stored.ts — every stored-row rehydration seam. ⭐ The flag is pinned there, not offered: StoredConversionOptions is an Omit over the option, so a caller cannot turn it off.
packages/services/service-automation/src/engine.ts — flow rehydration at runtime.
packages/metadata-core/src/artifact-forward-conversion.ts — the artifact-ingestion door at boot, with two callers.
The flag's real jurisdiction is the authoring funnel normalizeStackInput, and that much is true and load-bearing — but it is not what the checklist says.
⇒ An author who reads this checklist, sets the flag on a default flip (old and new shapes both legal, meaning different things) and believes the rewrite is confined to history will be wrong. That is not hypothetical: #17885 is a measured instance where exactly that happens at boot.
And its worked example no longer exists
The same passage uses field-required-notnull-explicit as its worked example of the default-flip rule. #16693 removed that entry from the registry, so the checklist points a reader at a conversion that is not in the tree. Confirmed absent on origin/main.
What a fix looks like — ⛔ stated as inputs, not prescribed
The corrected jurisdiction sentence already landed in packages/spec (PR #17888) and can be read there rather than re-derived; ADR-0087's half is share 2. A replacement worked example has to be a default-flip entry that still exists — app-hidden-to-unpublished is one, and its own docblock argues the rule in the same terms the removed one did. ⛔ The owning lane decides.
Refs
#16864 (the parent correction) · PR #17888 (share 1, landed, carries the corrected sentence) · #17885 (a measured default-flip reaching a boot seam) · #16693 (removed the worked example) · #3903 / PR #4317 and #12772 (the two rulings that narrowed the flag's jurisdiction)
Generated by Claude Code
Filed by the⚠️ The landing surface is
domain:specexecution seat (sessionsession_01MkQhmuuJAVDjmeWNixwDDH) while landing #16864's first share. ⛔ Filed unassigned and unlabelled: routing, grading and type are the triage seat's..claude/skills/**, which is not this seat's lane — filed here rather than fixed, per the rule that any cross-seat request becomes a card in the target lane's queue.This is share 3 of 3 of #16864's correction. Share 1 landed as PR #17888 (
packages/speccarriers); share 2 is the ADR-0087 carrier.What the checklist teaches, and why it is wrong
.claude/skills/spec-property-retirement/SKILL.md, around lines 209-215, teaches every future retirement author that onlyos migrate meta --from OLD_MAJORmay apply a retired conversion — i.e. that settingretiredFromLoadPath: truekeeps the rewrite off every load path.Measured, and it is not so. Three
includeRetired: trueliterals in non-test source deliberately replay retired entries, reached by four runtime callers:packages/spec/src/conversions/stored.ts— every stored-row rehydration seam. ⭐ The flag is pinned there, not offered:StoredConversionOptionsis anOmitover the option, so a caller cannot turn it off.packages/services/service-automation/src/engine.ts— flow rehydration at runtime.packages/metadata-core/src/artifact-forward-conversion.ts— the artifact-ingestion door at boot, with two callers.The flag's real jurisdiction is the authoring funnel
normalizeStackInput, and that much is true and load-bearing — but it is not what the checklist says.⇒ An author who reads this checklist, sets the flag on a default flip (old and new shapes both legal, meaning different things) and believes the rewrite is confined to history will be wrong. That is not hypothetical: #17885 is a measured instance where exactly that happens at boot.
And its worked example no longer exists
The same passage uses
field-required-notnull-explicitas its worked example of the default-flip rule. #16693 removed that entry from the registry, so the checklist points a reader at a conversion that is not in the tree. Confirmed absent onorigin/main.What a fix looks like — ⛔ stated as inputs, not prescribed
The corrected jurisdiction sentence already landed in
packages/spec(PR #17888) and can be read there rather than re-derived; ADR-0087's half is share 2. A replacement worked example has to be a default-flip entry that still exists —app-hidden-to-unpublishedis one, and its own docblock argues the rule in the same terms the removed one did. ⛔ The owning lane decides.Refs
#16864 (the parent correction) · PR #17888 (share 1, landed, carries the corrected sentence) · #17885 (a measured default-flip reaching a boot seam) · #16693 (removed the worked example) · #3903 / PR #4317 and #12772 (the two rulings that narrowed the flag's jurisdiction)
Generated by Claude Code