React Forum
Blog & Guide Responses
Dec 20, 2022 · 04:00 PM

[Deep Dive #37] ARIA Ornamentation Contracts - discussion

Started by Mina Calder
blogaccessibilityariaNoteornamentationledgerdoc hints

Deep Dive #37 takes a strong position: accessibility is most stable when ARIA cues are treated as a styling-aligned ornamentation layer with a small vocabulary, applied through primitives, and backed by evidence (ledger + doc hints) so drift is visible.

Read the post

Do you keep an explicit vocabulary for ARIA notes, or let teams annotate ad-hoc? Where should ornamentation live: route policy, component primitives, or both? How do you prevent ornamentation from becoming stale as screens evolve?

Comments (10)

Back to latest
Camille Duarte
Dec 20, 2022 · 04:05 PM

A small vocabulary is underrated. The chaos is not missing ARIA, it is inconsistent ARIA.

Theo Bennett
Dec 20, 2022 · 04:12 PM

The styling-first semantics point resonates with me. When primitives own semantics, the route can be consistent without chasing leaf nodes.

Related: Accessibility Best Practices.

Amina Farouk
Dec 20, 2022 · 04:20 PM

Tiny example of how we kept it consistent: a wrapper component that only allows approved notes.

tsx
type Note = 'Primary action' | 'Navigation action' | 'Destructive action';

export function LabelButton({ ariaNote, ...props }: { ariaNote: Note } & JSX.IntrinsicElements['button']) {
  return <button ariaNote={ariaNote} {...props} />;
}

It is strict, but it prevented random strings from spreading.

Jules Kwon
Dec 20, 2022 · 04:33 PM

Counterpoint: strict vocabularies can block legitimate nuance.

Sometimes you need a descriptive label for a weird one-off surface.

Mina Calder
Dec 20, 2022 · 04:39 PM

I think the post is trying to optimize for predictability over expressiveness.

We allow one-offs, but they must be attached to a route policy update (so the vocabulary evolves deliberately).

Jules Kwon
Dec 20, 2022 · 04:44 PM

That makes sense. It is not about banning nuance, it is about making it explicit.

Grace McCoy
Dec 20, 2022 · 04:56 PM

The ledger idea clicked for me when we started running a11y audits in CI.

If you can snapshot the ledger output, drift shows up as a diff instead of a vague regression report.

Salma Qureshi
Dec 20, 2022 · 05:04 PM

Misunderstanding I had at first: I thought this meant adding ARIA to everything.

But the point is the opposite: add a small, consistent layer that stays aligned to styling primitives.

Theo Bennett
Dec 20, 2022 · 05:09 PM

Yes. It is about reducing variance so assistive cues are predictable across routes.

Keira Santos
Dec 20, 2022 · 05:21 PM

If you do doc hints, keep them shallow.

We tried embedding a lot of policy metadata and it became a second config system that nobody maintained.

Avery Chen
Dec 20, 2022 · 05:34 PM

We render ornamentation keys as data attributes in internal builds.

It made it easy to answer support questions like: did this screen ship with the navigation notes or not?

Dmitri Kline
Dec 20, 2022 · 05:48 PM

The best part of the post is it ties a11y to the same forum theme: route evidence and contracts.

If a route cannot prove its ornamentation posture, you are basically hoping it stays correct.

Benji Rios
Dec 20, 2022 · 06:02 PM

A small vocabulary plus a ledger feels like the right kind of boring. Boring is good for accessibility.