Skip to content

[finding] packages/spec/authorable-surface.base.json is a pinned deletion-gate anchor that lags the live ratchet by 532 keys — three documents name it as if it were the live authorable surface #14612

Description

@baozhoutao

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 baseRevdata/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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions