What was measured
Building both example apps emits the translation-section-name-missing
author-time warning repeatedly, on every build, and nothing has fixed the
underlying sections:
pnpm --filter @objectstack/example-crm build
9 instances — crm_activity (3 sections), crm_lead (5 sections across
default and web_to_lead form views), crm_opportunity (1 section).
pnpm --filter @objectstack/example-showcase build
15 instances — spread across several objects' form views and page
sections.
Sample warning text (repeated per section, only the object/section name
changes):
⚠ object "crm_activity" · formViews.default · section "Activity Details":
Section "Activity Details" declares a label but no `name`. Headings
resolve through `objects.crm_activity._sections.<name>.label`, so a
section with no name has no key a bundle can carry — this heading can
never be translated and renders in the source locale in EVERY locale.
Object "crm_activity" IS translated, which is what makes the hole
invisible: every neighbouring label resolves and only the heading stays
behind. The i18n coverage report cannot see it either — it walks
`sections[].name`, and a nameless section contributes nothing to walk.
rule: translation-section-name-missing at views[0].formViews.default.sections[0]
Why this is a real gap, not decoration
The lint rule itself (translation-section-name-missing, closed out by
#5417) exists precisely to catch this — a form section with a label but
no name renders in the source locale in every locale, permanently,
while every neighbouring field label on the same object translates fine.
Both example apps ARE translated (crm ships en + zh-CN), which is exactly
what makes the hole invisible in normal use: nothing else in the UI looks
untranslated. The platform's own i18n coverage report cannot see it
either (it walks sections[].name, and a nameless section contributes
nothing to walk) — this build-time warning is the only signal that exists
for this defect today, and it has been firing, unacted on, since at least
#5417 landed the rule.
Suggested fix
For each flagged section, give it a stable name (snake_case) and add
the corresponding objects.<object>._sections.<name>.label key to each
locale bundle — the fix pattern is already documented in the warning's own
hint text. Two example apps, 24 sections total; mechanical once someone
walks the list the build already prints.
Not fixed here
Found as build-noise while implementing #8164 (a permission-set grant,
unrelated to i18n). Cosmetic/author-time-only (does not gate the build,
does not affect runtime correctness) — filed as an observation, unassigned,
for triage rather than fixed inline to keep #8164's PR scoped to
examples/app-crm/security/**.
What was measured
Building both example apps emits the
translation-section-name-missingauthor-time warning repeatedly, on every build, and nothing has fixed the
underlying sections:
9 instances —
crm_activity(3 sections),crm_lead(5 sections acrossdefaultandweb_to_leadform views),crm_opportunity(1 section).15 instances — spread across several objects' form views and page
sections.
Sample warning text (repeated per section, only the object/section name
changes):
Why this is a real gap, not decoration
The lint rule itself (
translation-section-name-missing, closed out by#5417) exists precisely to catch this — a form section with a
labelbutno
namerenders in the source locale in every locale, permanently,while every neighbouring field label on the same object translates fine.
Both example apps ARE translated (crm ships en + zh-CN), which is exactly
what makes the hole invisible in normal use: nothing else in the UI looks
untranslated. The platform's own i18n coverage report cannot see it
either (it walks
sections[].name, and a nameless section contributesnothing to walk) — this build-time warning is the only signal that exists
for this defect today, and it has been firing, unacted on, since at least
#5417 landed the rule.
Suggested fix
For each flagged section, give it a stable
name(snake_case) and addthe corresponding
objects.<object>._sections.<name>.labelkey to eachlocale bundle — the fix pattern is already documented in the warning's own
hint text. Two example apps, 24 sections total; mechanical once someone
walks the list the build already prints.
Not fixed here
Found as build-noise while implementing #8164 (a permission-set grant,
unrelated to i18n). Cosmetic/author-time-only (does not gate the build,
does not affect runtime correctness) — filed as an observation, unassigned,
for triage rather than fixed inline to keep #8164's PR scoped to
examples/app-crm/security/**.