You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
translatePage stops at region-level components, so copy on components nested in another component's properties.children is authorable but never resolved — 4 KPI labels stay English on hotCRM's zh-CN landing page #12961
Filed unassigned by the domain:spec seat from the #12231 measurement delivery (cloud session session_015ovVXhBgo9wt95LGpYgoR4, report comment 5451532175 on that card). Recording only — not graded; the boundary this card questions is DOCUMENTED AS DELIBERATE, so reversing it is a design ruling, not a drive-by fix.
The residual, measured
The shipped pages.<name>.components.<id> translation face (feat(spec): translatable page component copy — pages.<name>.components.<id> #6466 / spec 17.0.0, packages/spec/src/system/translation.zod.ts:615-642) parses and accepts copy for ANY component id — including ids of components nested inside another component's properties (verified: components.kpi_revenue_won.label parses against published 17.1.0).
But translatePage (packages/spec/src/system/i18n-resolver.ts:954) visits region-level components only — the boundary is documented as deliberate at i18n-resolver.ts:944-946 ("components nested inside another component's properties … are untyped free-form props"), region loop at :1014-1019.
Browser-measured consequence (hotCRM sales_home_page, zh-CN, 2026-08-28): page header and card titles render translated through the shipped face, while the four object-metric KPI labels (Revenue (Won) / Deals Won / Pipeline Value / Open Leads) — nested in key_metrics's page:cardproperties.children — stay English. hotCRM's zh-CN bundle, consistently, authors no kpi_* entries (nothing would read them).
So the declared face is WIDER than the enforced resolution: an author can write copy the resolver never applies — the accepted-but-inert shape, scoped to nested components.
What a ruling has to decide (why this is not mechanical)
Extending translatePage into declared children arrays reverses a documented deliberate boundary and opens id-collision semantics across nesting levels (which <id> wins when a nested id repeats a region-level id?). The alternative direction — narrowing the schema/docs to say nested components are out of the face — is a contract statement on a released surface. Either way it is a design call on resolver depth, not a bug with an obvious side.
Refs: #12231 (the measurement delivery + browser evidence) · #6466 (the face as shipped) · hotcrm#1004 (consumer card) · hotcrm#1216 / hotcrm#1217 (page drift recorded during the measurement).
Filed unassigned by the
domain:specseat from the #12231 measurement delivery (cloud sessionsession_015ovVXhBgo9wt95LGpYgoR4, report comment 5451532175 on that card). Recording only — not graded; the boundary this card questions is DOCUMENTED AS DELIBERATE, so reversing it is a design ruling, not a drive-by fix.The residual, measured
pages.<name>.components.<id>translation face (feat(spec): translatable page component copy — pages.<name>.components.<id> #6466 / spec 17.0.0,packages/spec/src/system/translation.zod.ts:615-642) parses and accepts copy for ANY component id — including ids of components nested inside another component'sproperties(verified:components.kpi_revenue_won.labelparses against published 17.1.0).translatePage(packages/spec/src/system/i18n-resolver.ts:954) visits region-level components only — the boundary is documented as deliberate ati18n-resolver.ts:944-946("components nested inside another component'sproperties… are untyped free-form props"), region loop at:1014-1019.sales_home_page, zh-CN, 2026-08-28): page header and card titles render translated through the shipped face, while the fourobject-metricKPI labels (Revenue (Won)/Deals Won/Pipeline Value/Open Leads) — nested inkey_metrics'spage:cardproperties.children— stay English. hotCRM's zh-CN bundle, consistently, authors nokpi_*entries (nothing would read them).So the declared face is WIDER than the enforced resolution: an author can write copy the resolver never applies — the accepted-but-inert shape, scoped to nested components.
What a ruling has to decide (why this is not mechanical)
Extending
translatePageinto declaredchildrenarrays reverses a documented deliberate boundary and opens id-collision semantics across nesting levels (which<id>wins when a nested id repeats a region-level id?). The alternative direction — narrowing the schema/docs to say nested components are out of the face — is a contract statement on a released surface. Either way it is a design call on resolver depth, not a bug with an obvious side.Refs: #12231 (the measurement delivery + browser evidence) · #6466 (the face as shipped) · hotcrm#1004 (consumer card) · hotcrm#1216 / hotcrm#1217 (page drift recorded during the measurement).