J1.09.2structural inaccessibilitydesignresearch

Structural problems cannot be patched later

Aliases: unpatchable structure · overlay failure · fake repair

What it is

A whole page painted on a canvas, a task that can only be finished by dragging, content virtualised so assistive technology never sees nodes outside the fold — these are not two missing attributes. Structural inaccessibility means that if name, role, focus order, and the timing model never entered the architecture, overlay widgets and style patches cannot rebuild a real accessibility tree. It looks “added.” The tree is still empty. This is not the same sentence as “it is expensive”: some surface issues can be patched later; a structural issue patched later is a semblance.

Why it happens

Assistive technology consumes a contract of structure and behaviour, not pixels. When the contract is missing, a runtime patch can only change the visible layer: a high-contrast overlay, auto-generated alternative text, a box drawn around focus. The second layer is that fake repair blocks real repair — scanners start reporting passes, management believes the structure has been repaid, and a genuine keyboard model and semantic headings never re-enter the schedule. If a virtualised list never puts off-screen nodes into the accessible tree, no number of live regions will invent a heading outline you can jump. If dragging is the only way to sort, and there is no equivalent button or input, a patch cannot invent an operation that was never designed.

Studying it

Split failures into surface (contrast, copy, visible focus style) and structure (no role, no focus order, no keyboard model, a time limit baked into the engine). On pages that claim an “accessibility overlay” or a late ARIA spray, compare the accessibility tree and a keyboard walk before and after, and see whether names and roles actually appeared.

Independent variables: repair tactic (style / attribute spray / overlay / structural rewrite). Dependent variables: whether the tree gained the right roles and names; whether the keyboard can finish the task; whether the overlay fights native controls.

Use failed patches themselves as evidence. Do not substitute a cost figure for a structural judgement.

Where it stops holding

Label association, contrast, captions, and visible focus style belong to a layer that can be added later; do not inflate them into “nothing can be patched.” Sometimes the “patch” is rewriting that slice — the claim is not a ban on change, it is that a small patch is not enough. Games and authoring canvases can put structure in the tool layer (menus, property panels) rather than in the pixels, provided that layer really has a tree. Switching from server rendering to client virtualisation can destroy structure that already held; that is structural inaccessibility introduced late.

Applying it

  • Architecture review keeps an unpatchable list: canvas-only content, drag as the only path, information structure with no headings, an unpausable timed engine. A hit means the interaction model must change, or a real structural channel must be added. Overlays alone are not allowed.
  • Virtualised lists must keep nodes the user is interacting with, and nodes about to enter the viewport, in the accessible tree. Semantics cannot wait until a pixel is on screen.
  • An overlay must not be the definition of done for a structural fix.
  • How to check: open the accessibility tree on a page claimed as patched, and finish the main task from the keyboard. No matching role and name, or a step that can only be dragged, means it is not patched. Turn the overlay off and retest; if behaviour collapses, the structure never entered the product.

Related

  • Same group: J1.09.1 Retrofitting costs far more than building accessibility in · J1.09.3 Accessibility belongs in requirements, not in the acceptance checklist
  • Nearby: J5.02 Accessibility Tree and Roles · J3.05 Single Pointer Alternatives
  • Search terms: structural inaccessibility · accessibility overlay · accessibility tree

Cards in the same group

Quick Actions

Share

Share this page

ios_share

https://hci.top/en/handbook/J1.09.2