Filed unassigned out of #6273, whose gate re-measured the collision population the 2026-08-25 family ruling (decision 甲/A1 on #6172) is about. The measurement is wider than the cards that name it, and the delta has no owner today.
The fact
Measured on 79ebf30d1 by scripts/__tests__/one-authority-per-exported-name-6273.test.ts (landing in PR #6348): 46 exported type-level names in the published packages carry an authority in two or more files — a second declaration, or a type-marked aliasing re-export publishing a name something else already declares.
The family cards name four of them. 42 are named by nobody.
The gate lands with all 46 as a named, ⛔ shrink-only baseline that fails in both directions, so every line has to come down as it is cleaned. Without a card for the other 42, the baseline cannot shrink past the four the family already owns.
Two facts worth separating out
The population
export interface / export type / export enum declarations, plus export type { A as X } aliases, in tracked .ts/.tsx under a non-private package's src/ (tests, specs and stories excluded). Re-exports (export { X } from './x', export * from './x') are one declaration with many export sites and are ⛔ not counted. Derivation, bounds and controls are documented in the gate's header.
| name | files | sites | named by |
|---|
ActionContext | 2 | packages/core/src/actions/ActionRunner.ts · packages/types/src/ui-action.ts | |
ActionResult | 2 | packages/core/src/actions/ActionRunner.ts · packages/types/src/ui-action.ts | |
ActionSchema | 2 | packages/types/src/crud.ts · packages/types/src/ui-action.ts | |
AggregationConfig | 2 | packages/plugin-grid/src/useGroupedData.ts · packages/types/src/data-protocol.ts | |
AppShellProps | 2 | packages/app-shell/src/types.ts · packages/layout/src/AppShell.tsx | |
BreadcrumbItem | 2 | packages/types/src/data-display.ts · packages/types/src/navigation.ts | |
BreadcrumbSchema | 2 | packages/types/src/data-display.ts · packages/types/src/navigation.ts | |
CalendarEvent | 2 | packages/plugin-calendar/src/index.tsx · packages/types/src/complex.ts | #5044 (ruled deprecation shim) |
CalendarSchema | 2 | packages/plugin-calendar/src/ObjectCalendar.tsx · packages/types/src/form.ts | |
ChatMessage | 2 | packages/plugin-chatbot/src/ChatbotEnhanced.tsx · packages/types/src/complex.ts | |
ChatToolInvocation | 2 | packages/plugin-chatbot/src/ChatbotEnhanced.tsx · packages/types/src/complex.ts | |
ComboboxOption | 2 | packages/components/src/custom/combobox.tsx · packages/types/src/form.ts | |
ComponentConfig | 2 | packages/core/src/registry/Registry.ts · packages/types/src/base.ts | |
ComponentMeta | 2 | packages/core/src/registry/Registry.ts · packages/types/src/base.ts | |
ConditionalFormattingRule | 3 | packages/plugin-kanban/src/KanbanEnhanced.tsx · packages/plugin-kanban/src/KanbanImpl.tsx · packages/types/src/objectql.ts | |
ConfirmDialogState | 2 | packages/app-shell/src/views/ActionConfirmDialog.tsx · packages/plugin-designer/src/hooks/useConfirmDialog.ts | |
ConnectionState | 2 | packages/collaboration/src/useRealtimeSubscription.ts · packages/data-objectstack/src/index.ts | |
DataSource | 2 | packages/app-shell/src/types.ts · packages/types/src/data.ts | |
Diagnostic | 3 | packages/app-shell/src/views/metadata-admin/previews/simulator/flow-sim-types.ts · packages/cli/src/commands/doctor.ts · packages/sdui-parser/src/types.ts | |
DiagnosticLevel | 2 | packages/app-shell/src/views/metadata-admin/previews/simulator/flow-sim-types.ts · packages/cli/src/commands/doctor.ts | |
DomProps | 2 | packages/core/src/utils/dom-props.ts · packages/fields/src/widgets/toDomProps.ts | |
FilterBuilderCondition | 2 | packages/components/src/custom/filter-builder.tsx · packages/types/src/complex.ts | |
FilterBuilderOperator | 2 | packages/components/src/custom/filter-builder.tsx · packages/types/src/complex.ts | |
FilterGroup | 2 | packages/components/src/custom/filter-builder.tsx · packages/types/src/complex.ts | |
FormFieldSpec | 2 | packages/app-shell/src/views/metadata-admin/form-spec.ts · packages/react/src/spec-bridge/bridges/form-view.ts | |
FormSectionSpec | 2 | packages/app-shell/src/views/metadata-admin/form-spec.ts · packages/react/src/spec-bridge/bridges/form-view.ts | |
FormViewSpec | 2 | packages/app-shell/src/views/metadata-admin/form-spec.ts · packages/react/src/spec-bridge/bridges/form-view.ts | |
KanbanCard | 4 | packages/plugin-kanban/src/KanbanEnhanced.tsx · packages/plugin-kanban/src/KanbanImpl.tsx · packages/plugin-kanban/src/types.ts · packages/types/src/complex.ts | #6155 |
KanbanColumn | 4 | packages/plugin-kanban/src/KanbanEnhanced.tsx · packages/plugin-kanban/src/KanbanImpl.tsx · packages/plugin-kanban/src/types.ts · packages/types/src/complex.ts | |
KanbanSchema | 2 | packages/plugin-kanban/src/types.ts · packages/types/src/complex.ts | #6172 |
MarkdownSchema | 2 | packages/plugin-markdown/src/types.ts · packages/types/src/data-display.ts | #6172 |
MenuItem | 2 | packages/types/src/app.ts · packages/types/src/overlay.ts | |
MetadataTypeStatus | 2 | packages/app-shell/src/providers/MetadataProvider.tsx · packages/react/src/context/AppShellContext.tsx | |
NamedActionDef | 2 | packages/plugin-grid/src/resolveBulkActions.ts · packages/plugin-grid/src/resolveLegacyRowActions.ts | |
OrgTranslate | 2 | packages/app-shell/src/console/organizations/orgErrorMessage.ts · packages/app-shell/src/console/organizations/orgRoleLabel.ts | |
PageHeaderComponentProps | 2 | packages/app-shell/src/layout/PageHeader.tsx · packages/layout/src/PageHeader.tsx | |
RecordDetailDrawerProps | 2 | packages/plugin-dashboard/src/RecordDetailDrawer.tsx · packages/plugin-detail/src/RecordDetailDrawer.tsx | |
SchemaNode | 2 | packages/sdui-parser/src/types.ts · packages/types/src/base.ts | |
ThemeProviderProps | 2 | packages/providers/src/types.ts · packages/react/src/context/ThemeContext.tsx | |
TranslateFn | 3 | packages/app-shell/src/providers/saveAdvisoryToast.ts · packages/app-shell/src/providers/writeWarningToast.ts · packages/fields/src/widgets/file-size-guard.ts | |
UndoRedoState | 2 | packages/plugin-designer/src/hooks/useUndoRedo.ts · packages/types/src/ui-action.ts | |
UserDataAdapter | 2 | packages/app-shell/src/context/UserStateAdapters.tsx · packages/data-objectstack/src/userState.ts | |
ValidationFunction | 2 | packages/types/src/data-protocol.ts · packages/types/src/field-types.ts | |
VersionEntry | 2 | packages/collaboration/src/useConflictResolution.ts · packages/plugin-designer/src/components/VersionHistory.tsx | |
ViewSwitcherProps | 2 | packages/plugin-list/src/ViewSwitcher.tsx · packages/plugin-view/src/ViewSwitcher.tsx | |
ViewType | 2 | packages/plugin-list/src/ViewSwitcher.tsx · packages/types/src/views.ts | |
Two of them collide inside packages/types itself — ActionSchema (crud.ts vs ui-action.ts) and BreadcrumbItem / BreadcrumbSchema (data-display.ts vs navigation.ts) — where a consumer importing from the package barrel has no way to say which one it meant except by whichever one the barrel happens to re-export.
The remedy, which is the same for every line
Pick the ONE authority, re-point the others at it (export type { X } from '<the-owner>' is a re-export, not a second declaration, and the gate does not count it). Where the two shapes really are different things, rename one — MenuItem as AppMenuItem at packages/types/src/index.ts:59 and ValidationFunction as FieldValidationFunction at :429 are this repo's worked examples, and the 2026-08-19 ruling on #5044 is the precedent for choosing which name survives. Then delete the line from KNOWN_COLLISIONS in the same PR.
Batching is the PM's call; the table sorts naturally by owning package.
Reproduce
pnpm exec vitest run --project unit scripts/__tests__/one-authority-per-exported-name-6273.test.ts
Refs: #6273 (the gate) · PR #6348 · #6172 · #6155 · #6086 · #5044
Filed unassigned out of #6273, whose gate re-measured the collision population the 2026-08-25 family ruling (decision 甲/A1 on #6172) is about. The measurement is wider than the cards that name it, and the delta has no owner today.
The fact
Measured on
79ebf30d1byscripts/__tests__/one-authority-per-exported-name-6273.test.ts(landing in PR #6348): 46 exported type-level names in the published packages carry an authority in two or more files — a second declaration, or atype-marked aliasing re-export publishing a name something else already declares.The family cards name four of them. 42 are named by nobody.
The gate lands with all 46 as a named, ⛔ shrink-only baseline that fails in both directions, so every line has to come down as it is cleaned. Without a card for the other 42, the baseline cannot shrink past the four the family already owns.
Two facts worth separating out
FormFieldis already clean — one declaration,packages/types/src/form.ts:911. finding(types): three more type names are declared twice with disagreeing shapes —FormField,MarkdownSchema,KanbanSchema— and one doc assertsFormFieldis declared once #6172 cites it; that instance is done.KanbanColumncollides across the exact same four files asKanbanCard, and no card mentions it. finding(types):KanbanCard/KanbanColumnare declared four times in this tree and the published copies disagree (cardsvsitems,badgesvslabels) #6155 measuredKanbanCard ×4; whoever takes that one is standing in front of the second half already.The population
export interface/export type/export enumdeclarations, plusexport type { A as X }aliases, in tracked.ts/.tsxunder a non-private package'ssrc/(tests, specs and stories excluded). Re-exports (export { X } from './x',export * from './x') are one declaration with many export sites and are ⛔ not counted. Derivation, bounds and controls are documented in the gate's header.ActionContextpackages/core/src/actions/ActionRunner.ts·packages/types/src/ui-action.tsActionResultpackages/core/src/actions/ActionRunner.ts·packages/types/src/ui-action.tsActionSchemapackages/types/src/crud.ts·packages/types/src/ui-action.tsAggregationConfigpackages/plugin-grid/src/useGroupedData.ts·packages/types/src/data-protocol.tsAppShellPropspackages/app-shell/src/types.ts·packages/layout/src/AppShell.tsxBreadcrumbItempackages/types/src/data-display.ts·packages/types/src/navigation.tsBreadcrumbSchemapackages/types/src/data-display.ts·packages/types/src/navigation.tsCalendarEventpackages/plugin-calendar/src/index.tsx·packages/types/src/complex.tsCalendarSchemapackages/plugin-calendar/src/ObjectCalendar.tsx·packages/types/src/form.tsChatMessagepackages/plugin-chatbot/src/ChatbotEnhanced.tsx·packages/types/src/complex.tsChatToolInvocationpackages/plugin-chatbot/src/ChatbotEnhanced.tsx·packages/types/src/complex.tsComboboxOptionpackages/components/src/custom/combobox.tsx·packages/types/src/form.tsComponentConfigpackages/core/src/registry/Registry.ts·packages/types/src/base.tsComponentMetapackages/core/src/registry/Registry.ts·packages/types/src/base.tsConditionalFormattingRulepackages/plugin-kanban/src/KanbanEnhanced.tsx·packages/plugin-kanban/src/KanbanImpl.tsx·packages/types/src/objectql.tsConfirmDialogStatepackages/app-shell/src/views/ActionConfirmDialog.tsx·packages/plugin-designer/src/hooks/useConfirmDialog.tsConnectionStatepackages/collaboration/src/useRealtimeSubscription.ts·packages/data-objectstack/src/index.tsDataSourcepackages/app-shell/src/types.ts·packages/types/src/data.tsDiagnosticpackages/app-shell/src/views/metadata-admin/previews/simulator/flow-sim-types.ts·packages/cli/src/commands/doctor.ts·packages/sdui-parser/src/types.tsDiagnosticLevelpackages/app-shell/src/views/metadata-admin/previews/simulator/flow-sim-types.ts·packages/cli/src/commands/doctor.tsDomPropspackages/core/src/utils/dom-props.ts·packages/fields/src/widgets/toDomProps.tsFilterBuilderConditionpackages/components/src/custom/filter-builder.tsx·packages/types/src/complex.tsFilterBuilderOperatorpackages/components/src/custom/filter-builder.tsx·packages/types/src/complex.tsFilterGrouppackages/components/src/custom/filter-builder.tsx·packages/types/src/complex.tsFormFieldSpecpackages/app-shell/src/views/metadata-admin/form-spec.ts·packages/react/src/spec-bridge/bridges/form-view.tsFormSectionSpecpackages/app-shell/src/views/metadata-admin/form-spec.ts·packages/react/src/spec-bridge/bridges/form-view.tsFormViewSpecpackages/app-shell/src/views/metadata-admin/form-spec.ts·packages/react/src/spec-bridge/bridges/form-view.tsKanbanCardpackages/plugin-kanban/src/KanbanEnhanced.tsx·packages/plugin-kanban/src/KanbanImpl.tsx·packages/plugin-kanban/src/types.ts·packages/types/src/complex.tsKanbanColumnpackages/plugin-kanban/src/KanbanEnhanced.tsx·packages/plugin-kanban/src/KanbanImpl.tsx·packages/plugin-kanban/src/types.ts·packages/types/src/complex.tsKanbanSchemapackages/plugin-kanban/src/types.ts·packages/types/src/complex.tsMarkdownSchemapackages/plugin-markdown/src/types.ts·packages/types/src/data-display.tsMenuItempackages/types/src/app.ts·packages/types/src/overlay.tsMetadataTypeStatuspackages/app-shell/src/providers/MetadataProvider.tsx·packages/react/src/context/AppShellContext.tsxNamedActionDefpackages/plugin-grid/src/resolveBulkActions.ts·packages/plugin-grid/src/resolveLegacyRowActions.tsOrgTranslatepackages/app-shell/src/console/organizations/orgErrorMessage.ts·packages/app-shell/src/console/organizations/orgRoleLabel.tsPageHeaderComponentPropspackages/app-shell/src/layout/PageHeader.tsx·packages/layout/src/PageHeader.tsxRecordDetailDrawerPropspackages/plugin-dashboard/src/RecordDetailDrawer.tsx·packages/plugin-detail/src/RecordDetailDrawer.tsxSchemaNodepackages/sdui-parser/src/types.ts·packages/types/src/base.tsThemeProviderPropspackages/providers/src/types.ts·packages/react/src/context/ThemeContext.tsxTranslateFnpackages/app-shell/src/providers/saveAdvisoryToast.ts·packages/app-shell/src/providers/writeWarningToast.ts·packages/fields/src/widgets/file-size-guard.tsUndoRedoStatepackages/plugin-designer/src/hooks/useUndoRedo.ts·packages/types/src/ui-action.tsUserDataAdapterpackages/app-shell/src/context/UserStateAdapters.tsx·packages/data-objectstack/src/userState.tsValidationFunctionpackages/types/src/data-protocol.ts·packages/types/src/field-types.tsVersionEntrypackages/collaboration/src/useConflictResolution.ts·packages/plugin-designer/src/components/VersionHistory.tsxViewSwitcherPropspackages/plugin-list/src/ViewSwitcher.tsx·packages/plugin-view/src/ViewSwitcher.tsxViewTypepackages/plugin-list/src/ViewSwitcher.tsx·packages/types/src/views.tsTwo of them collide inside
packages/typesitself —ActionSchema(crud.tsvsui-action.ts) andBreadcrumbItem/BreadcrumbSchema(data-display.tsvsnavigation.ts) — where a consumer importing from the package barrel has no way to say which one it meant except by whichever one the barrel happens to re-export.The remedy, which is the same for every line
Pick the ONE authority, re-point the others at it (
export type { X } from '<the-owner>'is a re-export, not a second declaration, and the gate does not count it). Where the two shapes really are different things, rename one —MenuItem as AppMenuItematpackages/types/src/index.ts:59andValidationFunction as FieldValidationFunctionat:429are this repo's worked examples, and the 2026-08-19 ruling on #5044 is the precedent for choosing which name survives. Then delete the line fromKNOWN_COLLISIONSin the same PR.Batching is the PM's call; the table sorts naturally by owning package.
Reproduce
Refs: #6273 (the gate) · PR #6348 · #6172 · #6155 · #6086 · #5044