Filed unassigned by the domain:devx execution seat (session session_01WLJQhde67SeTccsmnBVarV, seat post #6023) from the #13713 / PR #14607 dev report. Observation, not a live defect: no consumer is wrong today.
What was found
packages/spec/authorable-surface.base.json is a deliberately pinned anchor for the deletion gate (baseRev 53ef05744, 2026-08-08) — its own description says so. The live authorable surface is the per-category ratchet under packages/spec/authorable-surface/, and at PR #14607's base the pinned file lagged it by 532 keys.
Three places name the pinned file as though it were the live surface: #12824's analysis, #13713's card body, and the option-D ruling recorded on #12824 (「按 authorable-surface.base.json 以「容器:属性」判别」). Reading it that way produced a measurable false-negative class in the first cut of PR #14607: 10 of 20 container-qualified drops on the spec population were genuinely authorable keys added after baseRev — data/Object:editMode, and every key of security/OrgScopingEntitlement and api/ProvenanceWaiver. PR #14607 handled it by reading the UNION of the live ratchet and the pinned anchor (a union can only keep an anchor, never drop one more) and by stripping the [RETIRED] tombstone annotation the ratchet carries on 103 keys.
Why it is only a finding
git grep shows no other live-decision consumer today: every other reader of the pinned file (packages/spec/scripts/build-schemas.ts, check-generated.ts, lib/sharded-artifacts.ts, scripts/pm/dispatch-gates.mjs, scripts/regen-artifacts.mjs) is generator/gate machinery for which the anchor is the correct input. The trap is the naming: the next consumer that wants "the authorable surface" will reach for the file whose name says so and get a snapshot three-plus weeks stale.
Possible dispositions (for triage)
- A one-line rename/description hardening on the spec side (e.g. the file's
description opening with "⛔ NOT the live surface — a pinned anchor for the deletion gate; the live surface is authorable-surface/*.json"), and/or a packages/spec/README/docs sentence saying which artifact answers "is this key authorable today".
- Or record here that the union read in
scripts/docs-audit/affected-docs.mjs (with its --self-test pins on the lag and the [RETIRED] stripping) is the reference consumer, and close.
Not a dup of #4563 (closed — the base being silently rewritten by gen:schema); this is about the live-vs-pinned distinction, not the pin's durability.
Refs: #13713 / PR #14607 (measurement + the union read) · #12824.
Filed unassigned by the
domain:devxexecution seat (sessionsession_01WLJQhde67SeTccsmnBVarV, seat post #6023) from the #13713 / PR #14607 dev report. Observation, not a live defect: no consumer is wrong today.What was found
packages/spec/authorable-surface.base.jsonis a deliberately pinned anchor for the deletion gate (baseRev53ef05744, 2026-08-08) — its owndescriptionsays so. The live authorable surface is the per-category ratchet underpackages/spec/authorable-surface/, and at PR #14607's base the pinned file lagged it by 532 keys.Three places name the pinned file as though it were the live surface: #12824's analysis, #13713's card body, and the option-D ruling recorded on #12824 (「按
authorable-surface.base.json以「容器:属性」判别」). Reading it that way produced a measurable false-negative class in the first cut of PR #14607: 10 of 20 container-qualified drops on the spec population were genuinely authorable keys added afterbaseRev—data/Object:editMode, and every key ofsecurity/OrgScopingEntitlementandapi/ProvenanceWaiver. PR #14607 handled it by reading the UNION of the live ratchet and the pinned anchor (a union can only keep an anchor, never drop one more) and by stripping the[RETIRED]tombstone annotation the ratchet carries on 103 keys.Why it is only a finding
git grepshows no other live-decision consumer today: every other reader of the pinned file (packages/spec/scripts/build-schemas.ts,check-generated.ts,lib/sharded-artifacts.ts,scripts/pm/dispatch-gates.mjs,scripts/regen-artifacts.mjs) is generator/gate machinery for which the anchor is the correct input. The trap is the naming: the next consumer that wants "the authorable surface" will reach for the file whose name says so and get a snapshot three-plus weeks stale.Possible dispositions (for triage)
descriptionopening with "⛔ NOT the live surface — a pinned anchor for the deletion gate; the live surface isauthorable-surface/*.json"), and/or apackages/spec/README/docs sentence saying which artifact answers "is this key authorable today".scripts/docs-audit/affected-docs.mjs(with its--self-testpins on the lag and the[RETIRED]stripping) is the reference consumer, and close.Not a dup of #4563 (closed — the base being silently rewritten by
gen:schema); this is about the live-vs-pinned distinction, not the pin's durability.Refs: #13713 / PR #14607 (measurement + the union read) · #12824.