Found by the content/docs/** audit in #10564 (card 2/2, the build-an-app path), in the "sibling pages covering overlapping ground and drifting apart" class.
The claim the spec makes
packages/spec/src/ui/component.zod.ts:825 documents what a form section's name is for, and states the consequence out loud:
name: z.string().optional().describe('Stable section identifier for i18n lookup (snake_case) — resolves `objects.{object}._sections.{name}.label`; a nameless section renders its authored label in every locale'),
So name is optional to Zod, but omitting it silently opts the section out of localization. Same shape as the sharingModel / security-owd-unset class: .optional() in the schema, load-bearing in practice, invisible to every fence gate.
The drift
Four ui/ pages document form sections, and they disagree about whether name is part of the shape.
With name:
content/docs/ui/create-vs-edit-form.mdx:69-72 — { name: 'contact', label: 'Contact', columns: 2, fields: [...] }content/docs/ui/field-grouping-and-order.mdx:61-62 — { name: 'contact', label: 'Contact', columns: 2, fields: [...] }
Without name:
content/docs/ui/views.mdx:53 — { label: 'Task', columns: 2, fields: ['title', 'status', 'assignee', 'due_date'] }content/docs/ui/create-vs-edit-form.mdx:82 — { label: 'Who is this?', columns: 1, fields: [...] }content/docs/ui/public-data-collection.mdx:24 — { label: 'Tell us about yourself', columns: 1, fields: [...] }
views.mdx:53 is the one that matters most: it is the first form-view example in the module's main view page, inside the defineView container snippet a reader copies to get their first form.
Why no one notices
content/docs/ui/translations.mdx:73 is the only page in the module that reveals the coupling, and it states it as a key path rather than a requirement:
| Form sections | objects.{name}._sections.{section} |
A reader who follows views.mdx, then later adds a locale from translations.mdx, finds their section headings untranslated with nothing failing — the section renders its authored label in every locale, exactly as the spec describes. Nothing at author time, build time or runtime reports it.
Suggested landing (hint for triage, not a routing decision)
- Add
name to the section examples in views.mdx:53, create-vs-edit-form.mdx:82 and public-data-collection.mdx:24, so the shape a reader copies is the localizable one. - Consider a one-line note where sections are introduced, carrying the spec's own sentence: a nameless section renders its authored label in every locale.
- A publish-time lint (
section-name-unset, alongside the existing field-group-undeclared) would close the class rather than the instances, if the platform wants sections localizable by default.
Dedupe: searched the 30 open finding issues and the 94 issues opened since 2026-08-21T02:00Z; nothing covers form-section name or section i18n.
Audit-only card — filed unassigned, not graded or routed.
Found by the
content/docs/**audit in #10564 (card 2/2, the build-an-app path), in the "sibling pages covering overlapping ground and drifting apart" class.The claim the spec makes
packages/spec/src/ui/component.zod.ts:825documents what a form section'snameis for, and states the consequence out loud:So
nameis optional to Zod, but omitting it silently opts the section out of localization. Same shape as thesharingModel/security-owd-unsetclass:.optional()in the schema, load-bearing in practice, invisible to every fence gate.The drift
Four
ui/pages document form sections, and they disagree about whethernameis part of the shape.With
name:content/docs/ui/create-vs-edit-form.mdx:69-72—{ name: 'contact', label: 'Contact', columns: 2, fields: [...] }content/docs/ui/field-grouping-and-order.mdx:61-62—{ name: 'contact', label: 'Contact', columns: 2, fields: [...] }Without
name:content/docs/ui/views.mdx:53—{ label: 'Task', columns: 2, fields: ['title', 'status', 'assignee', 'due_date'] }content/docs/ui/create-vs-edit-form.mdx:82—{ label: 'Who is this?', columns: 1, fields: [...] }content/docs/ui/public-data-collection.mdx:24—{ label: 'Tell us about yourself', columns: 1, fields: [...] }views.mdx:53is the one that matters most: it is the first form-view example in the module's main view page, inside thedefineViewcontainer snippet a reader copies to get their first form.Why no one notices
content/docs/ui/translations.mdx:73is the only page in the module that reveals the coupling, and it states it as a key path rather than a requirement:| Form sections |
objects.{name}._sections.{section}|A reader who follows
views.mdx, then later adds a locale fromtranslations.mdx, finds their section headings untranslated with nothing failing — the section renders its authored label in every locale, exactly as the spec describes. Nothing at author time, build time or runtime reports it.Suggested landing (hint for triage, not a routing decision)
nameto the section examples inviews.mdx:53,create-vs-edit-form.mdx:82andpublic-data-collection.mdx:24, so the shape a reader copies is the localizable one.section-name-unset, alongside the existingfield-group-undeclared) would close the class rather than the instances, if the platform wants sections localizable by default.Dedupe: searched the 30 open
findingissues and the 94 issues opened since 2026-08-21T02:00Z; nothing covers form-sectionnameor section i18n.Audit-only card — filed unassigned, not graded or routed.