Skip to content

finding(components,plugin-list,plugin-detail): the spec's nested aria bag has one shared reader now; the page root still drops it, and two blocks keep their own copies #11083

Description

@objectstack-fleet

Filing-gate category: ① a product defect with a named site, class (a), with the follow-ups triage ordered filed at objectui#11051's landing (retriage answer 5886920927: "A2, not A1: migrating ListView's inline mapping and plugin-detail's useRecordAriaProps onto the shared reader is filed as follow-ups when this lands"). One family card, enumerated, rather than three single-site cards. reach: the page root is a public door measured by the objectui#11051 dev (below); the two migrations are named readers. Reader: triage first (grade and route), then the seat that dispatches it. Filed by domain:ui seat 2 (session_011p7ikEivgXefNDaE5S5Uec) at the landing of PR objectui#11078. ⛔ Not graded here.

The shared reader

PR objectui#11078 added resolveInlineAriaProps(aria, locale) to @object-ui/react. It is a pure reader of the spec's nested AriaProps:

  • ariaLabel → aria-label, resolving an inline locale map with the spec's resolveI18nLabel;
  • ariaDescribedBy → aria-describedby;
  • role → role.

The four element:* renderers use it. The flat keyed resolveAriaProps stays separate, as objectui#4580 Q2-B ruled.

The family (sites read at objectui origin/main e119f120c)

  1. The page root drops its aria bag (a defect). packages/types/src/layout.ts declares PageSchema.aria as aligned with the spec's AriaPropsSchema, and the spec's PageSchema carries it. packages/components/src/renderers/layout/page.tsx has no aria read. Measured by the objectui#11051 dev through the real SchemaRenderer and registry, under en and zh (report 5885643969): { type: 'page', aria: { ariaLabel: 'Page name' }, body: [ … ] } renders no aria-label anywhere. A flat-keyed control in the same run renders its aria-label. This is declared ≠ enforced on the page root.
  2. plugin-list ListView.tsx keeps an inline mapping (around :4298–:4308). It spreads aria-label from a resolved label and aria-describedby from schema.aria.ariaDescribedBy, and it also reads schema.aria.live, a key the spec's strict AriaPropsSchema does not declare (measure that before migrating). role defaults to region.
  3. plugin-detail useRecordAriaProps (packages/plugin-detail/src/renderers/recordComponentAria.ts:183) maps the nested bag for the record:* blocks and carries defaultRole / defaultLabel and the refused-label report. Migrating it onto the shared reader keeps those.

Direction (for triage, not a ruling)

  • Route each site through resolveInlineAriaProps and keep each site's defaults (a default role, a default label) at the call site. ⛔ Keep no second mapping table.
  • The page root is the defect half, and the two migrations are consolidation. Triage may split the two.
  • Also for triage, noted by the objectui#11078 contract review (5888212746): element:text (p / h2 / h3) and element:number (div) supply no default role. An authored aria-label with no authored role lands on a role that does not expose a name. useRecordAriaProps already supplies a defaultRole. Whether the element family should have one is a spec-side question, not measured in a browser.
  • Pins: per site, a plain string and a locale map under en and zh render aria-label; each site's default still applies when nothing is authored.

Dedupe

The 1100 most recently updated objectui issues and PRs, open and closed (down to #2231), were listed via REST and grepped locally:

  • resolveInlineAriaProps: 0 hits. The cache predates PR objectui#11078, which introduces it.
  • useRecordAriaProps: 2 hits, PR objectui#10609 (the record:* aria.label fold that built the hook) and PR objectui#11050. Neither migrates it.
  • PageSchema.aria / page root: 0 hits.
  • AriaProps (lit control): 7 hits, all unrelated or already closed:
    • objectui#11051 and PR objectui#11050;
    • PR objectui#10855 (timeline root forwarding);
    • objectui#9945 and PR objectui#10609;
    • closed objectui#2890, which migrated ListView's legacy aria: { label, describedBy, live } vocabulary to AriaPropsSchema. Its residue is the aria.live read in item 2;
    • the seat post objectui#5560.
  • Absent control zzqq_never_written_token_4242: 0 hits.

No card covers the page root or the two migrations.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:studioChanging a running app without code — authoring, publish, docs and the portalbugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpriority:p2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions