Blocked-by: #8261
Filed unassigned and ungraded by the objectui#8165 dev seat as an out-of-scope finding. No domain:*, no priority, no pm:* — triage's.
The fact
One function shape — i18next's t narrowed to (key, options?) => string — is declared 11 times across 6 packages under 9 distinct names. Measured on 158d75bb3 with git grep over packages/ (the exported/local split cross-checked with a fixed-string control that fires):
| site |
name |
exported? |
packages/app-shell/src/providers/writeWarningToast.ts:26 |
TranslateFn |
yes — the one authority |
packages/fields/src/widgets/file-size-guard.ts:26 |
TranslateFn |
yes |
packages/app-shell/src/utils/managedByEmptyState.ts:37 |
TranslateFn |
no |
packages/app-shell/src/preview/usePublishAllDrafts.ts:28 |
TranslateFn |
no — and drifted: the parameter is spelled opts, not options |
packages/app-shell/src/console/organizations/orgErrorMessage.ts:61 |
OrgTranslate |
yes |
packages/app-shell/src/console/ai/AiChatPage.tsx:2570 |
TranslationFn |
no |
packages/plugin-chatbot/src/useAiApprovalsTranslation.ts:131 |
InboxTranslate |
yes |
packages/plugin-detail/src/ActivityTimeline.tsx:49 |
ActivityTranslate |
no |
packages/plugin-detail/src/PointInTimeRestore.tsx:37 |
RestoreTranslate |
no |
packages/plugin-detail/src/RecordComments.tsx:25 |
CommentsTranslate |
no |
packages/plugin-grid/src/useColumnSummary.ts:131 |
SummaryTranslate |
no |
Ten of the eleven are byte-identical after the name; the eleventh (usePublishAllDrafts) differs only in the parameter's name.
Why this is a separate card, and why no gate reports it
scripts/__tests__/one-authority-per-exported-name-6273.test.ts is the recurrence guard for the objectui#6172 甲/A1 ruling, and it is doing exactly what it says: it reports a NAME carrying two authorities. Both of its stated bounds exclude most of the rows above, deliberately —
- it counts exported type-level names only, which removes the seven local ones;
- it groups by name, so a copy that was renamed on the way out is not a collision to it at all.
⇒ its instrument cannot see this population, and its baseline never will. This is not a defect in that gate and ⛔ not a request to widen it — its header already states "what the instrument cannot see". It is the observation that the collision it does report (TranslateFn) is the visible tip of a wider one.
What objectui#8165 could and could not do about it
objectui#8165 re-pointed saveAdvisoryToast.ts at writeWarningToast.ts and shrank the baseline entry by that site. It stopped at packages/fields/src/widgets/file-size-guard.ts, because the re-export remedy is dependency-illegal there: @object-ui/app-shell DEPENDS ON @object-ui/fields, so pointing fields at app-shell is a package cycle, and the name is on neither package's published face, so there is nothing to import either.
⇒ retiring the remaining copies means moving one declaration DOWN into a package they all depend on. Measured: all five packages above depend on @object-ui/i18n; four of the five depend on @object-ui/types (@object-ui/plugin-detail does not). So @object-ui/i18n is the only candidate home reachable from every site today.
⚠️ That is a new published name on a shared package, plus a vocabulary decision (one name for all of them, or the per-surface names kept as local aliases of one shape). Nobody has ruled on it, which is why this is filed rather than done.
Refs: objectui#8165 (the TranslateFn collision this was measured beside) · objectui#6172 (the one-authority ruling) · objectui#6349 (the name-collision batch) · scripts/__tests__/one-authority-per-exported-name-6273.test.ts
Generated by Claude Code
Blocked-by: #8261
Filed unassigned and ungraded by the objectui#8165 dev seat as an out-of-scope finding. No
domain:*, no priority, nopm:*— triage's.The fact
One function shape — i18next's
tnarrowed to(key, options?) => string— is declared 11 times across 6 packages under 9 distinct names. Measured on158d75bb3withgit grepoverpackages/(the exported/local split cross-checked with a fixed-string control that fires):packages/app-shell/src/providers/writeWarningToast.ts:26TranslateFnpackages/fields/src/widgets/file-size-guard.ts:26TranslateFnpackages/app-shell/src/utils/managedByEmptyState.ts:37TranslateFnpackages/app-shell/src/preview/usePublishAllDrafts.ts:28TranslateFnopts, notoptionspackages/app-shell/src/console/organizations/orgErrorMessage.ts:61OrgTranslatepackages/app-shell/src/console/ai/AiChatPage.tsx:2570TranslationFnpackages/plugin-chatbot/src/useAiApprovalsTranslation.ts:131InboxTranslatepackages/plugin-detail/src/ActivityTimeline.tsx:49ActivityTranslatepackages/plugin-detail/src/PointInTimeRestore.tsx:37RestoreTranslatepackages/plugin-detail/src/RecordComments.tsx:25CommentsTranslatepackages/plugin-grid/src/useColumnSummary.ts:131SummaryTranslateTen of the eleven are byte-identical after the name; the eleventh (
usePublishAllDrafts) differs only in the parameter's name.Why this is a separate card, and why no gate reports it
scripts/__tests__/one-authority-per-exported-name-6273.test.tsis the recurrence guard for the objectui#6172 甲/A1 ruling, and it is doing exactly what it says: it reports a NAME carrying two authorities. Both of its stated bounds exclude most of the rows above, deliberately —⇒ its instrument cannot see this population, and its baseline never will. This is not a defect in that gate and ⛔ not a request to widen it — its header already states "what the instrument cannot see". It is the observation that the collision it does report (
TranslateFn) is the visible tip of a wider one.What objectui#8165 could and could not do about it
objectui#8165 re-pointed
saveAdvisoryToast.tsatwriteWarningToast.tsand shrank the baseline entry by that site. It stopped atpackages/fields/src/widgets/file-size-guard.ts, because the re-export remedy is dependency-illegal there:@object-ui/app-shellDEPENDS ON@object-ui/fields, so pointing fields at app-shell is a package cycle, and the name is on neither package's published face, so there is nothing to import either.⇒ retiring the remaining copies means moving one declaration DOWN into a package they all depend on. Measured: all five packages above depend on
@object-ui/i18n; four of the five depend on@object-ui/types(@object-ui/plugin-detaildoes not). So@object-ui/i18nis the only candidate home reachable from every site today.Refs: objectui#8165 (the
TranslateFncollision this was measured beside) · objectui#6172 (the one-authority ruling) · objectui#6349 (the name-collision batch) ·scripts/__tests__/one-authority-per-exported-name-6273.test.tsGenerated by Claude Code