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
Copy link
Copy link
Closed as not planned
Labels
a11yarea:i18nThe customer's own language, across UI, metadata and notificationsThe customer's own language, across UI, metadata and notificationsbugSomething isn't workingSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3
Description
Activity
objectstack-fleet commented
on Oct 11, 2026 ContributorAuthorMore actionsTriage: 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.- Lane: shipped
aria-labelliterals across 11 packages aredomain:ui. - Why p3: the grade of 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 and a11y: the data table pager's first / previous / next / last buttons have no accessible name #12124. Non-English screen-reader users hear English names, and sighted use is unaffected.
- Not a new closing card. 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 (in flight, 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) already supplies the family's enumeration pin: the census test with its frozen
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. - Direction: slices by reach. Each slice is its own PR (
Part of #12150) and removes its sites fromBACKLOGin the same commit:- Everyday console surfaces:
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.
- Views:
plugin-grid,plugin-kanban,plugin-map. plugin-designer(60 sites, the Studio designers). Admin-only, so last.
- Everyday console surfaces:
- ⛔ The Shadcn-synced
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. - Keys go into all ten
@object-ui/i18npacks, reusing existing keys where they fit. - Sequence: 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 (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) merges, which brings the census. This is ordering, not a block.
Clause-②: no.
- Lane: shipped
- addedarea:i18nThe customer's own language, across UI, metadata and notificationsThe customer's own language, across UI, metadata and notificationsbugSomething isn't workingSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatand removed
on Oct 11, 2026 objectstack-fleet commented
on Oct 11, 2026 ContributorAuthorMore actionsTriage: 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.- The maintainer, in the triage seat's chat: asked 「这个开发改动这么大,有必要嘛?」. Offered three courses (narrow to the first slice, close, or keep), he chose close.
- Why that holds:
- These 87 controls already have an accessible name. It is English, not missing, so this is localization, not an unnamed-control defect. Unnamed controls are handled in a11y: the data table pager's first / previous / next / last buttons have no accessible name #12124 and finding(plugin-grid): a grouped grid's own pager draws first / previous / next / last as four unnamed icon buttons #12143.
- The audience is non-English screen-reader users, and 60 of the 87 sites are admin-only Studio designers.
- The full drain is about 870 pack entries, for little reach.
- What still holds without this card: 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 census (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) freezes the 87 sites as its
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. - Re-entry: the maintainer directs it, or a named customer or accessibility requirement asks for localized names on a specific surface. Then file that surface's slice on its own.
- 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 itself is unchanged. It is in flight with its 31 sites and the census.
Metadata
Metadata
Assignees
Labels
a11yarea:i18nThe customer's own language, across UI, metadata and notificationsThe customer's own language, across UI, metadata and notificationsbugSomething isn't workingSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p3
Filing gate ①: a user-visible accessibility and localization defect with named producers. Filed by the
domain:uiseat 1 (seat post #5560,session_016djJF12Qt14ejKR5Vjt4sK). The source is the out-of-scope finding in the objectui#12145 dev report (comment6111181431, 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 morearia-labelliterals 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 headebfc833, is this card's enumeration:plugin-designerProcessDesigner21 ·PageDesigner18 ·DataModelDesigner13 ·DashboardEditor4 ·AppCreationWizard3 ·EditorModeToggle1plugin-mapObjectMapplugin-gridFormulaBar2 ·InlineEditing2plugin-kanbanKanbanImpl2 ·CardTemplates1 ·InlineQuickAdd1authUserMenulayoutAppSchemaRenderer2 ·PageHeader1componentscustom/config-panel-renderer1 ·ui/breadcrumb1 ·ui/pagination1app-shellmetadata-admin/JsonSourceEditor1 ·metadata-admin/QuickFind1plugin-chatbotFloatingChatbotPanelplugin-detailThreadedRepliesplugin-listListViewreach: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)
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
@object-ui/i18npack (real translations). No second key for a name an existing key already holds.BACKLOGis empty, so the census stays as the family's pin with nothing frozen. The template-literal members are each translated or stated.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
domain:uiexecution seat, after triage grades this card. Triage may slice it per package; the table is the slicing list.Dedupe
Two repo-scoped semantic issue searches on objectui, open and closed:
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.