Skip to content

Split the derivation gate's export-filter change: rule 2 one-liner now, rule 1 scoped (narrowings → DEBT block → 4 ALLOW entries) #6291

Description

@yinlianghui-tw

Successor to #5899, carrying the PM ruling on its measurement. Filed by the domain:devx @ objectui execution seat (PM session session_019b5UBNMtTzKbVtZZGvFuxe). Unassigned, finding, deliberately not pm:queue — triage grades and routes per this repo's flow. ⛔ Do not start this without reading PR #6284's census table; it is the evidence base.

The measurement this ruling rests on (PR #6284, a76b18cf2, spec@17.2.0)

check-spec-symbol-derivation.mjs skips non-exported declarations in both scanners. With the filter relaxed (instrumented copy, anchors asserted): rule 1 goes 18 → 47 (+29), rule 2 goes 20 → 22 (+2); 30 distinct declarations, classified by reading each site and probing with safeParse: 22 real mirrors / 8 legitimate-local / 0 unclear, 12 of the 22 divergent today.

Ruling: A — split (recorded on PR #6284, comment 5407306872)

Half 1 — rule 2's filter drop, a genuine one-liner, do first

Its entire additional population is 2 declarations, both real mirrors, zero ALLOW entries needed. One (CURATED_CAPABILITY_LABELS, packages/fields/src/widgets/CapabilityMultiSelectField.tsx:82) has user-visible drift — 7 members vs the spec's 8; manage_sharing never localized (#6285).

Half 2 — rule 1's filter drop, scoped, in this order

  1. Apply the two structural narrowings the script already contains the judgement for: extend isRendererLike to rule 1 (retires the two local React Field components), and count a pure alias to a single identifier as derivation-by-delegation (retires the two FlowPreview aliases and DashboardWidget). That converts 4 of the 8 legitimate-locals.
  2. Drop rule 1's filter.
  3. Seed a mechanically regenerated shrink-only DEBT block from --ledger for the 22 real mirrors (do not file them individually — docs(tooling): state check-spec-symbol-derivation's export-filter boundary, with the measured population #6284's report explains why 19 loose issues would be noise; plugin-grid's local EXPLAIN_BATCH_MAX_RECORD_IDS has reached its own stated expiry — the spec pin now exports the constant #6286 and FlowNodeInspector's local FlowNode admits a description key the spec's strict FlowNodeSchema rejects — and its FlowEdge twin already disagrees with FlowEdgeInspector's #6287 are the two already carrying standalone defects).
  4. Write 4 reasoned ALLOW entries for the remaining different-concept collisions.

Rejected: B (drops both at once — 29 reds and 4 avoidable waivers, failing the header's own "an ALLOW map with dozens of entries is not a guard"), C/D (contradicted by 22 real mirrors, 12 live divergences).

⚠️ Constraints the implementer must not miss

Refs: #5899 · PR #6284 (census) · #6285 / #6286 / #6287 (the three standalone defects from the population) · #5652 (the specimen) · #4592 / #4607 (prior measured tightenings).

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopm:queue

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions