Skip to content

Burn down the 14 module-local spec-symbol mirrors seeded into check-spec-symbol-derivation's DEBT block #7265

Description

@yinlianghui

Tracking anchor for the DEBT block in scripts/check-spec-symbol-derivation.mjs (DEBT_ISSUE). Filed by the dev seat implementing #6291; unassigned, for triage to grade and route.

Why this issue exists rather than a reused number

DEBT_ISSUE was 4115 (objectstack#4115), and the block had been empty since objectui#3162 — that ledger was burned down and objectstack#4115 was closed by objectstack#6883. #6291 dropped rule 1's export filter, which widened the rule's jurisdiction to module-local declarations and surfaced a population that predates the change. Those entries need an open anchor: the gate's own stale-ledger message reads "delete them … (and close #N once the ledger is empty)", which is a dead instruction pointing at a closed issue.

Re-anchoring on #6291 was not an option either — that card is closed by the PR that seeds the block.

The seed, mechanically regenerated by --ledger

14 distinct names, 15 findings, on the #6291 implementation commit against @objectstack/spec@17.2.0. Every one was classified by reading the site (census in PR #6284, re-taken on the implementing commit):

package symbols
@object-ui/app-shell AdminScope, AppLike, FlowEdge, FlowRuntimeState, ObjectLike (two sites), RemoteTable
@object-ui/core CONTEXT_TOKEN_SUGGESTIONS, isContextToken
@object-ui/types UserFilterFieldSchema, UserFiltersSchema
@object-ui/components SortDirection
@object-ui/data-objectstack normalizeFilterOperator
@object-ui/plugin-detail RecordAlertProps
@object-ui/plugin-tree TreeConfig

These are real mirrors, not different-concept collisions — the four collisions in the same population got reasoned ALLOW entries in the same commit instead. Several carry a divergence measurable today: AppLike, ObjectLike, RemoteTable and FlowRuntimeState each relax a spec-REQUIRED key to optional; CONTEXT_TOKEN_SUGGESTIONS is byte-identical to the spec's nine-entry map, in a file that 25 lines earlier explains its neighbour became a re-export precisely because a byte-identical copy passes every value comparison and every behavioural test; normalizeFilterOperator is a second normalizer over the spec's, and two normalizers disagreeing about filter operators is the silent over-fetch class of objectstack#3948.

How to burn one down

Per the block's own governance: import it, derive it (z.infer<typeof SpecX> / SpecAuthoredInput< … >), or — if it deliberately differs — rename it to a declared dialect or move it to ALLOW with the reason written down. --ledger regenerates the block, so removal is a mechanical edit. The block is shrink-only: it grew once, at #6291, on a jurisdiction widening, and must not grow again for any other reason.

Deliberately filed as ONE ledger rather than 14 issues — PR #6284's report already argued why 19 loose issues for one ledger would be noise. The two entries that carry standalone defects beyond the mirroring already have their own cards (#6286, #6287).

Also seen while filing, NOT fixed here

CLAIM_DEBT_ISSUE = 4592 in the same file points at objectui#4592, which is also closed, and its 19-entry CLAIM_DEBT block is live. Rule 2's ledger has the same dead-anchor problem this issue fixes for rule 1. Left alone rather than changed as a rider on #6291's diff.

Refs: #6291 (the split that surfaced the population) · PR #6284 (the census) · #5899 (the finding) · #6286 / #6287 (standalone defects from the same population)

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

    Labels

    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions