Repository navigation
finding(i18n, a11y): 87 more shipped aria-label literals in 23 files are English under every locale — the census backlog objectui#12145 froze (the family's next closing card) #12150
Description
Filing gate ①: a user-visible accessibility and localization defect with named producers. Filed by the domain:ui seat 1 (seat post #5560, session_016djJF12Qt14ejKR5Vjt4sK). The source is the out-of-scope finding in the objectui#12145 dev report (comment 6111181431, PR #12149). The seat re-read the census on the PR head. ⛔ Not a claim.
This card takes the half objectui#12145 leaves: the literal sites outside its enumeration. objectui#12145 keeps the 31 sites it enumerated, and its PR closes it.
What is wrong
objectui#12145's re-check command was a lower bound. Its pathspec never reached a file directly under a package's src/. The census that PR objectui#12149 adds (packages/i18n/src/__tests__/ariaLabelLiteralCensus-12145.test.ts) walks the whole tree. It finds 87 more aria-label literals in 23 files across 11 packages, every one an English name a non-English screen reader announces in English.
The census freezes them as its BACKLOG: a new literal turns it red, and a translated site must leave the list in the same commit. That list, read on the PR head ebfc833, is this card's enumeration:
| package | sites | files |
|---|---|---|
plugin-designer |
60 | ProcessDesigner 21 · PageDesigner 18 · DataModelDesigner 13 · DashboardEditor 4 · AppCreationWizard 3 · EditorModeToggle 1 |
plugin-map |
5 | ObjectMap |
plugin-grid |
4 | FormulaBar 2 · InlineEditing 2 |
plugin-kanban |
4 | KanbanImpl 2 · CardTemplates 1 · InlineQuickAdd 1 |
auth |
3 | UserMenu |
layout |
3 | AppSchemaRenderer 2 · PageHeader 1 |
components |
3 | custom/config-panel-renderer 1 · ui/breadcrumb 1 · ui/pagination 1 |
app-shell |
2 | metadata-admin/JsonSourceEditor 1 · metadata-admin/QuickFind 1 |
plugin-chatbot |
1 | FloatingChatbotPanel |
plugin-detail |
1 | ThreadedReplies |
plugin-list |
1 | ListView |
reach: named real producers:
plugin-list/src/ListView.tsx's "Bulk actions" region draws on every console list view with bulk actions (read on objectuimain158c75d: one literal).plugin-detail/src/ThreadedReplies.tsx's "Send reply" button draws under every comment on a default record page once objectui#12144 lands (PR fix(app-shell,plugin-detail): the record page counts each comment's replies on read, and a comment with none offers the reply input (objectui#12144) #12147 offers the reply input on every comment).
Reach for the other packages is measured per package by the claim. A site no viewer reaches leaves the census with that reading.
Carried with it: the same family, outside the census by design (from the same report, not measured by the seat)
- About 30
aria-labeltemplate literals interpolate a value around English words, for example "Dismiss" plus a notification title in the threeNotification*components, "Remove" plus a name inTagsFieldandSelectionTray, and "Copy" plus a label on two console developer pages. They read through an interpolating pack key ({{name}}), the shape the packs already use. ChatbotEnhanced'suploadFilesfallback is still the English literal, the same shape PR objectui#12149 fixes forsubmitandstopResponse.SidebarTriggernames itself through an English screen-reader-only span when the header-bar renderer draws it bare.
Done when
- Each enumerated site reads its name through its package's translation hook, with a key in every
@object-ui/i18npack (real translations). No second key for a name an existing key already holds. - Or the PR says why a site stays, with the reach reading.
- The census
BACKLOGis empty, so the census stays as the family's pin with nothing frozen. The template-literal members are each translated or stated. - ⛔ The Shadcn primitives under
packages/components/src/ui/(breadcrumb.tsx,pagination.tsx) are named at their wrapper or call site, never edited (.claude/skills/objectui-contributor/rules/no-touch-zones.md). auth,layoutandplugin-maphave no@object-ui/i18ndependency today. The claim measures whether a site there reaches a viewer before adding one.
Who acts, and in what order
- The
domain:uiexecution seat, after triage grades this card. Triage may slice it per package; the table is the slicing list. - Serial: after PR fix(i18n,a11y): the enumerated literal aria-label names read each package's translation hook, and a census pins the family (objectui#12145) #12149 lands. The census this card empties lands with it.
Dedupe
Two repo-scoped semantic issue searches on objectui, open and closed:
- "untranslated English aria-label accessible names designer toolbar kanban map literal backlog census": 59 hits.
- "ProcessDesigner PageDesigner DataModelDesigner aria-label not translated screen reader English": 21 hits.
The only open hit in either is objectui#12145, whose half this card continues. The closed hits read (objectui#11872, #11667, #11051, #10835, #10748, #10862, #10848, #10586) are single-surface or visible-text cards, and none covers these sites.
Activity
objectstack-fleet commentedon Oct 11, 2026
Triage: first grade,
bug·a11y·priority:p3·domain:ui·area:i18n, intopm:queue. The drain of #12145's census backlog, in slices by reachTriage seat (seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-11T16:53Z. ⛔ Not a claim, ⛔ not a dispatch.aria-labelliterals across 11 packages aredomain:ui.BACKLOG, where a new literal turns it red and a translated site leaves the list in the same commit. This card drains that list. ⛔ It does not add a second census.Part of #12150) and removes its sites fromBACKLOGin the same commit:plugin-listListView(bulk actions);plugin-detailThreadedReplies("Send reply", on every comment once finding(plugin-detail): on the record page's discussion, a stored reply never shows and the reply input is never drawn, because nothing sets replyCount on read #12144 / PR fix(app-shell,plugin-detail): the record page counts each comment's replies on read, and a comment with none offers the reply input (objectui#12144) #12147 lands);authUserMenu,layout(AppSchemaRenderer,PageHeader),app-shellmetadata-admin,componentsandplugin-chatbot.plugin-grid,plugin-kanban,plugin-map.plugin-designer(60 sites, the Studio designers). Admin-only, so last.components/src/ui/primitives (breadcrumb,pagination) are wrapped, never edited (no-touch-zones.md). Give them their names through props at the wrapper or call site, as finding(i18n, a11y): 31 shipped aria-label attributes are literal English, so a non-English screen reader hears English names (the family's closing card) #12145's direction says.@object-ui/i18npacks, reusing existing keys where they fit.Clause-②: no.objectstack-fleet commentedon Oct 11, 2026
Triage: closed
not_plannedon the maintainer's wordTriage seat (seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-11T17:04Z. ⛔ Not a claim, ⛔ not a dispatch.BACKLOG. A new English literal turns it red, so the count can only fall. A site edited for another reason can be translated and dropped from the list in the same commit. ⛔ No seat is dispatched to drain it.