Observation filed while implementing #8721 (the default-locale content-parity assertion for the hand-authored apps / dashboards half). Not fixed there — out of that card's fence, and the fix is a different mechanism. Filed unassigned for triage.
What is covered after #8721, and what is not
packages/platform-objects/src/apps/translations/en.ts has exactly three top-level sections. The parity assertion added in #8721 walks two of them:
| section | source of truth | compared against en.ts? |
|---|
apps.* | setup.app.ts, studio.app.ts, account.app.ts — same package | yes, verbatim |
dashboards.* | dashboards/system_overview.dashboard.ts — same package | yes, verbatim |
pages.* | other packages (see below) | no — by nothing, in any locale |
The three pages.* entries and where their strings are really authored:
marketplace_installed — packages/cloud-connection/src/marketplace-ui.tscloud_connection_settings — packages/cloud-connection/src/cloud-connection-ui.tsconnect_agent — packages/mcp/src/connect-ui.ts
The #8721 assertion cannot reach them, and the reason is structural rather than an oversight: platform-objects does not depend on @objectstack/cloud-connection or @objectstack/mcp and must not, so a static walk in that package's own test has nothing to compare to. The test states the exclusion deliberately; this issue is the tracking half of that statement.
Why it is worth a card even though nothing is stale today
Checked at the time of filing — all three are currently in parity with their sources, e.g. connect_agent serves Connect an Agent plus the same subtitle sentence connect-ui.ts declares. So this is an unexercised hole, not a live defect.
What makes it worth tracking is that it is the same shape as the defect #8721 was filed for, in the same file, one section over: a leaf value copied by hand from a source in another file, with no gate comparing the two. #8721 happened because a widget was converted and its four bundles kept the pre-conversion string under a fully green build. A page header edited in cloud-connection or mcp would do exactly that here, and would additionally do it in all four locales including en, which is now the one locale the rest of this bundle guarantees.
Candidate shapes (not decided here)
- Extend
pnpm check:app-nav-i18n — it already boots the real composition to judge the merged nav tree, so it is the one existing gate that can see pages contributed by other packages. Comparing pages.* default-locale values against the composed page metadata would sit naturally beside what it already does. - Move the three
pages.* entries into bundles owned by the packages that author the strings, so each one is a same-package comparison. Larger, and it touches how the merged translation data is assembled.
Option 1 looks much cheaper and needs no ownership change; option 2 removes the class rather than gating it. Sizing is triage's call.
Backlink: #8721.
Observation filed while implementing #8721 (the default-locale content-parity assertion for the hand-authored
apps/dashboardshalf). Not fixed there — out of that card's fence, and the fix is a different mechanism. Filed unassigned for triage.What is covered after #8721, and what is not
packages/platform-objects/src/apps/translations/en.tshas exactly three top-level sections. The parity assertion added in #8721 walks two of them:en.ts?apps.*setup.app.ts,studio.app.ts,account.app.ts— same packagedashboards.*dashboards/system_overview.dashboard.ts— same packagepages.*The three
pages.*entries and where their strings are really authored:marketplace_installed—packages/cloud-connection/src/marketplace-ui.tscloud_connection_settings—packages/cloud-connection/src/cloud-connection-ui.tsconnect_agent—packages/mcp/src/connect-ui.tsThe #8721 assertion cannot reach them, and the reason is structural rather than an oversight:
platform-objectsdoes not depend on@objectstack/cloud-connectionor@objectstack/mcpand must not, so a static walk in that package's own test has nothing to compare to. The test states the exclusion deliberately; this issue is the tracking half of that statement.Why it is worth a card even though nothing is stale today
Checked at the time of filing — all three are currently in parity with their sources, e.g.
connect_agentservesConnect an Agentplus the same subtitle sentenceconnect-ui.tsdeclares. So this is an unexercised hole, not a live defect.What makes it worth tracking is that it is the same shape as the defect #8721 was filed for, in the same file, one section over: a leaf value copied by hand from a source in another file, with no gate comparing the two. #8721 happened because a widget was converted and its four bundles kept the pre-conversion string under a fully green build. A page header edited in
cloud-connectionormcpwould do exactly that here, and would additionally do it in all four locales includingen, which is now the one locale the rest of this bundle guarantees.Candidate shapes (not decided here)
pnpm check:app-nav-i18n— it already boots the real composition to judge the merged nav tree, so it is the one existing gate that can see pages contributed by other packages. Comparingpages.*default-locale values against the composed page metadata would sit naturally beside what it already does.pages.*entries into bundles owned by the packages that author the strings, so each one is a same-package comparison. Larger, and it touches how the merged translation data is assembled.Option 1 looks much cheaper and needs no ownership change; option 2 removes the class rather than gating it. Sizing is triage's call.
Backlink: #8721.