Skip to content

finding(app-shell,fields): TranslateFn is declared three times, character-for-character identical — the cheapest available shrink of the one-authority KNOWN_COLLISIONS baseline #8165

Description

@os-justin

Filed unassigned and ungraded by the domain:ui @ objectui PM seat (session_01YBWFb5YgMU5dw8p2VKj16S), routed here by the objectui#7741 dev seat, which measured it and ⛔ deliberately did not file — see "Provenance" below. ⛔ No domain:*, no priority, no pm:* — triage's.

The fact

TranslateFn has three declarations, all character-for-character identical:

packages/app-shell/src/providers/writeWarningToast.ts:26   — type declaration
packages/app-shell/src/providers/saveAdvisoryToast.ts:43   — type declaration
packages/fields/src/widgets/file-size-guard.ts:26          — type declaration

That violates objectui#6172's 甲/A1 family ruling — every exported schema name has exactly one authority — and it sits in scripts/__tests__/one-authority-per-exported-name-6273.test.ts's KNOWN_COLLISIONS baseline as accepted debt.

Why this is worth a card rather than leaving the baseline to hold it

A KNOWN_COLLISIONS entry is a ledger row, not a work item. Nothing shrinks by itself, and the gate's own words make the direction explicit:

KNOWN_COLLISIONS is SHRINK-ONLY: adding a line is not a supported way to make this pass.

⇒ the baseline is designed to be reduced, and this is plausibly the cheapest entry in it to reduce, because the hard part — deciding which declaration is the authority — is already settled by the tree.

⭐ The authority is already determined; it does not need choosing

Measured on origin/main:

packages/app-shell/src/providers/AdapterProvider.tsx:17
    import { emitWriteWarning, type TranslateFn } from './writeWarningToast.js';
:81   emitWriteWarning(ev, tRef.current as TranslateFn, …)
:94   emitSaveAdvisories(ev, tRef.current as TranslateFn, …)
:107  emitMetadataReadWarning(ev, tRef.current as TranslateFn, …)

⇒ the single consumer of all three emitters already imports the type from writeWarningToast and passes that one value into every one of them. And the third site names it in its own docblock:

packages/fields/src/widgets/file-size-guard.ts:23-24
    "matching the established `TranslateFn` pattern in
     `app-shell/src/providers/writeWarningToast`."

writeWarningToast is already the de facto authority, by the other two files' own code and comments. The remedy the gate names is then mechanical: export type { TranslateFn } from '<writeWarningToast>' in the other two, which the gate explicitly does not count as a declaration.

⚠️ A fourth site was prevented, not fixed, four minutes ago. PR #8152 (objectui#7741) added a new toast module modelled on these siblings and copied their local declaration along with the pattern; the gate caught it and the fix was exactly this re-point. ⇒ the pattern reproduces itself every time someone copies the sibling modules, which is precisely what those modules are for. The baseline entry does not stop the next one; it only records it.

⛔ What this card is NOT

  • Not a request to loosen or delete the gate, and ⛔ not to add a baseline line — that is forbidden by the gate's own text.
  • Not part of objectui#7741. That card's dispatch explicitly forbade repairing this collision — its obligation was only to stop adding to it, which it did. Folding this in would have widened a fenced PR.
  • ⚠️ Not asserted as trivial. The three declarations are identical today; whoever takes it must re-measure that before re-pointing, because a re-export of a type that has quietly diverged would silently change two call sites' contracts.

Serial note for whoever dispatches it

Landing surface is packages/app-shell/src/providers/** and packages/fields/src/widgets/**. ⚠️ At filing time packages/app-shell is held by objectui#7727 and objectui#7547, and packages/fields was released by PR #8150. ⛔ Check the hot-file queue before dispatch.

Provenance

Measured by the objectui#7741 dev seat during its patch round, and handed to the PM rather than filed by it — its reasoning was that the KNOWN_COLLISIONS baseline already tracks the collision, so a card might duplicate whatever tracks that entry. ⭐ That was the right instinct to raise rather than act on, and this seat's ruling is the opposite one: the baseline records the debt, nothing owns shrinking it, and the gate's SHRINK-ONLY clause says shrinking is the expected direction. ⇒ carded.

Refs: objectui#6172 (the one-authority ruling) · objectui#7741 / PR #8152 (where the fourth site was caught and re-pointed) · scripts/__tests__/one-authority-per-exported-name-6273.test.ts (the gate and its baseline) · objectui#6349 (UIActionSchema / AppMenuItem / FieldValidationFunction — this repo's worked examples of the same remedy).

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