@verndale/accessibility-standards 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/OPERATING.md +2 -0
  2. package/README.md +4 -0
  3. package/bin/accessibility-standards.mjs +1 -1
  4. package/dist/manifest.json +39 -21
  5. package/dist/profiles/ai-orchestration/coverage-manifest.json +109 -2
  6. package/dist/profiles/ai-orchestration/implementation/accessibility.md +334 -0
  7. package/dist/profiles/ai-orchestration/pattern-contracts.json +125 -39
  8. package/dist/profiles/ai-orchestration/patterns/accordion.md +9 -0
  9. package/dist/profiles/ai-orchestration/patterns/alert.md +9 -0
  10. package/dist/profiles/ai-orchestration/patterns/carousel.md +9 -0
  11. package/dist/profiles/ai-orchestration/patterns/combobox.md +9 -0
  12. package/dist/profiles/ai-orchestration/patterns/consequential-submission.md +9 -0
  13. package/dist/profiles/ai-orchestration/patterns/dialog.md +9 -0
  14. package/dist/profiles/ai-orchestration/patterns/disclosure.md +9 -0
  15. package/dist/profiles/ai-orchestration/patterns/dynamic-status.md +9 -0
  16. package/dist/profiles/ai-orchestration/patterns/field.md +9 -0
  17. package/dist/profiles/ai-orchestration/patterns/image.md +9 -0
  18. package/dist/profiles/ai-orchestration/patterns/listbox.md +9 -0
  19. package/dist/profiles/ai-orchestration/patterns/media-player.md +9 -0
  20. package/dist/profiles/ai-orchestration/patterns/menu-button.md +9 -0
  21. package/dist/profiles/ai-orchestration/patterns/pagination.md +9 -0
  22. package/dist/profiles/ai-orchestration/patterns/popover.md +9 -0
  23. package/dist/profiles/ai-orchestration/patterns/progress.md +9 -0
  24. package/dist/profiles/ai-orchestration/patterns/tabs.md +9 -0
  25. package/dist/profiles/ai-orchestration/patterns/tooltip.md +9 -0
  26. package/dist/profiles/ai-orchestration/patterns/validation.md +9 -0
  27. package/dist/profiles/ai-orchestration/review/accessibility.md +8 -1
  28. package/dist/profiles/ai-orchestration/semantics/accessible-name.md +1 -0
  29. package/dist/profiles/ai-orchestration/semantics/alert.md +1 -0
  30. package/dist/profiles/ai-orchestration/semantics/consequential-action.md +1 -0
  31. package/dist/profiles/ai-orchestration/semantics/data-table.md +1 -0
  32. package/dist/profiles/ai-orchestration/semantics/expanded-state.md +1 -0
  33. package/dist/profiles/ai-orchestration/semantics/focus.initial.md +1 -0
  34. package/dist/profiles/ai-orchestration/semantics/focus.return.md +1 -0
  35. package/dist/profiles/ai-orchestration/semantics/focus.visible.md +1 -0
  36. package/dist/profiles/ai-orchestration/semantics/form-error.md +1 -0
  37. package/dist/profiles/ai-orchestration/semantics/form-label.md +1 -0
  38. package/dist/profiles/ai-orchestration/semantics/form-required.md +1 -0
  39. package/dist/profiles/ai-orchestration/semantics/headings.md +1 -0
  40. package/dist/profiles/ai-orchestration/semantics/keyboard.escape.md +1 -0
  41. package/dist/profiles/ai-orchestration/semantics/keyboard.md +1 -0
  42. package/dist/profiles/ai-orchestration/semantics/landmarks.md +1 -0
  43. package/dist/profiles/ai-orchestration/semantics/live-status.md +1 -0
  44. package/dist/profiles/ai-orchestration/semantics/media-alternatives.md +1 -0
  45. package/dist/profiles/ai-orchestration/semantics/motion-control.md +1 -0
  46. package/dist/profiles/ai-orchestration/semantics/name-role-value.md +1 -0
  47. package/dist/profiles/ai-orchestration/semantics/native-dialog.md +1 -0
  48. package/dist/profiles/ai-orchestration/semantics/native-elements.md +1 -0
  49. package/dist/profiles/ai-orchestration/semantics/non-text-alternative.md +1 -0
  50. package/dist/profiles/ai-orchestration/semantics/roles-states-properties.md +1 -0
  51. package/dist/profiles/ai-orchestration/semantics/selected-state.md +1 -0
  52. package/dist/profiles/ai-orchestration/semantics/target-size.md +1 -0
  53. package/dist/profiles/ai-orchestration/semantics.json +48 -1
  54. package/dist/profiles/ai-orchestration/testing/accessibility.md +1 -1
  55. package/dist/profiles/ai-orchestration/ui-design-brain-bindings.json +856 -0
  56. package/dist/profiles/conductor/a11y-semantics.md +22 -1
  57. package/dist/profiles/conductor/accessibility-quality.md +314 -0
  58. package/dist/profiles/conductor/applicability-matrix.json +111 -28
  59. package/dist/profiles/conductor/coverage-manifest.json +109 -2
  60. package/dist/profiles/conductor/pattern-contracts.json +125 -39
  61. package/dist/profiles/conductor/patterns/accordion.json +13 -3
  62. package/dist/profiles/conductor/patterns/alert.json +13 -3
  63. package/dist/profiles/conductor/patterns/carousel.json +13 -3
  64. package/dist/profiles/conductor/patterns/combobox.json +13 -3
  65. package/dist/profiles/conductor/patterns/consequential-submission.json +13 -3
  66. package/dist/profiles/conductor/patterns/dialog.json +13 -3
  67. package/dist/profiles/conductor/patterns/disclosure.json +13 -3
  68. package/dist/profiles/conductor/patterns/dynamic-status.json +13 -3
  69. package/dist/profiles/conductor/patterns/field.json +23 -3
  70. package/dist/profiles/conductor/patterns/image.json +23 -3
  71. package/dist/profiles/conductor/patterns/listbox.json +13 -3
  72. package/dist/profiles/conductor/patterns/media-player.json +23 -3
  73. package/dist/profiles/conductor/patterns/menu-button.json +13 -3
  74. package/dist/profiles/conductor/patterns/pagination.json +13 -3
  75. package/dist/profiles/conductor/patterns/popover.json +13 -3
  76. package/dist/profiles/conductor/patterns/progress.json +13 -3
  77. package/dist/profiles/conductor/patterns/tabs.json +13 -3
  78. package/dist/profiles/conductor/patterns/tooltip.json +13 -3
  79. package/dist/profiles/conductor/patterns/validation.json +23 -3
  80. package/dist/profiles/conductor/semantics.json +48 -1
  81. package/dist/profiles/conductor/ui-design-brain-bindings.json +856 -0
  82. package/dist/projection-manifest.json +103 -78
  83. package/dist/requirements-to-implementation.md +2 -0
  84. package/lib/build-manifest.mjs +12 -6
  85. package/lib/build.mjs +19 -5
  86. package/lib/compile-applicability.mjs +131 -10
  87. package/lib/coverage.mjs +20 -0
  88. package/lib/index.mjs +1 -1
  89. package/lib/load.mjs +31 -1
  90. package/lib/provenance.mjs +49 -0
  91. package/lib/render.mjs +69 -29
  92. package/lib/sync.mjs +240 -26
  93. package/lib/validate.mjs +255 -24
  94. package/package.json +24 -11
  95. package/profiles/ai-orchestration/profile.json +1 -1
  96. package/profiles/conductor/profile.json +1 -1
  97. package/schemas/consumer-config.schema.json +1 -1
  98. package/schemas/contract.schema.json +1 -0
  99. package/schemas/manifest.schema.json +1 -1
  100. package/schemas/projection-manifest.schema.json +84 -1
  101. package/schemas/ui-design-brain-bindings.schema.json +86 -0
  102. package/src/applicability/facts.yml +29 -1
  103. package/src/applicability/matrix.yml +3 -2
  104. package/src/applicability/ui-design-brain-bindings.yml +210 -0
  105. package/src/contract.yml +1 -0
  106. package/src/patterns/disclosure/accordion.yml +1 -1
  107. package/src/patterns/disclosure/disclosure.yml +1 -1
  108. package/src/patterns/feedback/alert.yml +1 -1
  109. package/src/patterns/feedback/dynamic-status.yml +1 -1
  110. package/src/patterns/feedback/progress.yml +1 -1
  111. package/src/patterns/forms/consequential-submission.yml +1 -1
  112. package/src/patterns/forms/field.yml +1 -1
  113. package/src/patterns/forms/validation.yml +1 -1
  114. package/src/patterns/media/carousel.yml +1 -1
  115. package/src/patterns/media/image.yml +1 -1
  116. package/src/patterns/media/media-player.yml +1 -1
  117. package/src/patterns/navigation/menu-button.yml +1 -1
  118. package/src/patterns/navigation/pagination.yml +1 -1
  119. package/src/patterns/navigation/tabs.yml +1 -1
  120. package/src/patterns/overlays/dialog.yml +1 -1
  121. package/src/patterns/overlays/popover.yml +1 -1
  122. package/src/patterns/overlays/tooltip.yml +1 -1
  123. package/src/patterns/selection/combobox.yml +1 -1
  124. package/src/patterns/selection/listbox.yml +1 -1
@@ -1,5 +1,18 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
- # Accessibility semantics
2
+ <!-- package: @verndale/accessibility-standards@2.0.0; profile: conductor@2.0.0; schema: 2; source-digest: e4bf4272751c21e417ddd3e6c52308bf804fab097629ba843964532e7f97d9f0; profile-digest: 4840ac3a4910f8dc3a850df266a141e0e4df94ca3c8935ae4531c56f6be91e65 -->
3
+ # Accessibility foundations, semantics, and policies
4
+
5
+ ## foundation.conformance-boundary
6
+
7
+ Automated checks provide evidence but do not establish conformance; every applicable outcome needs its declared proof routes.
8
+
9
+ ## foundation.standards-hierarchy
10
+
11
+ Prefer native platform semantics; apply WCAG conformance, ARIA only where needed, APG interaction guidance, then non-conflicting product policy.
12
+
13
+ ## foundation.wcag-2.2
14
+
15
+ Meet WCAG 2.2 Level A and AA. Target size minimum is 24 by 24 CSS pixels or an allowed exception; 44 by 44 is enhanced guidance only.
3
16
 
4
17
  ## semantics.accessible-name
5
18
 
@@ -150,3 +163,11 @@ Proof: unit, e2e.
150
163
  Pointer targets meet 24 by 24 CSS pixels or a WCAG 2.5.8 exception; 44 by 44 is an enhanced recommendation.
151
164
 
152
165
  Proof: e2e, human.
166
+
167
+ ## policy.enhanced-quality
168
+
169
+ Enhanced guidance is advisory and cannot be represented as a conformance failure unless the consumer explicitly adopts it as product policy.
170
+
171
+ ## policy.target-size
172
+
173
+ Enforce WCAG 2.5.8 at 24 by 24 CSS pixels or a documented exception; report 44 by 44 as enhanced guidance, never as the AA minimum.
@@ -1,179 +1,493 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@2.0.0; profile: conductor@2.0.0; schema: 2; source-digest: e4bf4272751c21e417ddd3e6c52308bf804fab097629ba843964532e7f97d9f0; profile-digest: 4840ac3a4910f8dc3a850df266a141e0e4df94ca3c8935ae4531c56f6be91e65 -->
2
3
  # Accessibility quality contract
3
4
 
4
5
  ## pattern.accordion
5
6
 
6
7
  Requires: semantics.native-elements, semantics.accessible-name, semantics.expanded-state, semantics.keyboard, semantics.focus.visible.
7
8
 
9
+ Scope: Grouped disclosure sections.
10
+
8
11
  Behavior:
9
12
  - Toggle only the controlled panel
10
13
  - Preserve DOM and focus order
11
14
 
15
+ Product decisions: single_or_multiple_open.
16
+
17
+ Functional Spec bindings: behavior, states, keyboard.
18
+
19
+ Implementation outcomes: accordion-control, accordion-panel.
20
+
12
21
  Evidence: unit, axe, e2e, human.
13
22
 
14
23
  ## pattern.alert
15
24
 
16
25
  Requires: semantics.alert.
17
26
 
27
+ Scope: Urgent message.
28
+
18
29
  Behavior:
19
30
  - Announce once without moving focus
20
31
 
32
+ Product decisions: urgency.
33
+
34
+ Functional Spec bindings: messaging.
35
+
36
+ Implementation outcomes: alert-announcement.
37
+
21
38
  Evidence: unit, human.
22
39
 
23
40
  ## pattern.carousel
24
41
 
25
42
  Requires: semantics.accessible-name, semantics.keyboard, semantics.focus.visible, semantics.motion-control, semantics.live-status.
26
43
 
44
+ Scope: Rotating content set.
45
+
27
46
  Behavior:
28
47
  - Pause rotation on interaction
29
48
  - Provide named controls and current position
30
49
 
50
+ Product decisions: auto_rotation, looping.
51
+
52
+ Functional Spec bindings: behavior, states, controls.
53
+
54
+ Implementation outcomes: carousel-controls, carousel-rotation.
55
+
31
56
  Evidence: unit, axe, e2e, human.
32
57
 
33
58
  ## pattern.combobox
34
59
 
35
60
  Requires: semantics.accessible-name, semantics.expanded-state, semantics.selected-state, semantics.keyboard, semantics.live-status.
36
61
 
62
+ Scope: Input with selectable popup.
63
+
37
64
  Behavior:
38
65
  - Keyboard controls popup, option, and input independently
39
66
 
67
+ Product decisions: editable, autocomplete, selection_commit.
68
+
69
+ Functional Spec bindings: behavior, states, keyboard.
70
+
71
+ Implementation outcomes: combobox-state-machine.
72
+
40
73
  Evidence: unit, axe, e2e, human.
41
74
 
42
75
  ## pattern.consequential-submission
43
76
 
44
77
  Requires: semantics.consequential-action, semantics.form-error, semantics.keyboard.
45
78
 
79
+ Scope: Legal, financial, destructive, or irreversible submission.
80
+
46
81
  Behavior:
47
82
  - Support review, correction, confirmation, or reversal
48
83
 
84
+ Product decisions: safeguard, reversal_window.
85
+
86
+ Functional Spec bindings: submission, confirmation.
87
+
88
+ Implementation outcomes: submission-safeguard.
89
+
49
90
  Evidence: e2e, human.
50
91
 
51
92
  ## pattern.dialog
52
93
 
53
94
  Requires: semantics.native-dialog, semantics.accessible-name, semantics.keyboard.escape, semantics.focus.initial, semantics.focus.return.
54
95
 
96
+ Scope: Modal and non-modal dialogs.
97
+
55
98
  Behavior:
56
99
  - Manage initial, contained, and return focus
57
100
  - Dismiss topmost dialog with Escape
58
101
 
102
+ Product decisions: modal, initial_focus, dismissal.
103
+
104
+ Functional Spec bindings: behavior, states, focus, keyboard.
105
+
106
+ Implementation outcomes: dialog-semantics, dialog-focus-lifecycle.
107
+
59
108
  Evidence: unit, axe, e2e, human.
60
109
 
61
110
  ## pattern.disclosure
62
111
 
63
112
  Requires: semantics.native-elements, semantics.accessible-name, semantics.expanded-state, semantics.keyboard.
64
113
 
114
+ Scope: Show and hide supplementary content.
115
+
65
116
  Behavior:
66
117
  - Control toggles one region
67
118
 
119
+ Product decisions: initial_state.
120
+
121
+ Functional Spec bindings: behavior, states.
122
+
123
+ Implementation outcomes: disclosure-control.
124
+
68
125
  Evidence: unit, axe, e2e.
69
126
 
70
127
  ## pattern.dynamic-status
71
128
 
72
129
  Requires: semantics.live-status.
73
130
 
131
+ Scope: Asynchronous status message.
132
+
74
133
  Behavior:
75
134
  - Announce meaningful changes once
76
135
 
136
+ Product decisions: announcement_copy.
137
+
138
+ Functional Spec bindings: messaging, states.
139
+
140
+ Implementation outcomes: status-live-region.
141
+
77
142
  Evidence: unit, e2e, human.
78
143
 
79
144
  ## pattern.field
80
145
 
81
146
  Requires: semantics.form-label, semantics.form-required, semantics.focus.visible.
82
147
 
148
+ Scope: Labeled form input.
149
+
83
150
  Behavior:
84
151
  - Expose label, instructions, and requiredness before interaction
85
152
 
153
+ Product decisions: required, instructions.
154
+
155
+ Functional Spec bindings: fields, requiredness.
156
+
157
+ Implementation outcomes: field-associations.
158
+
86
159
  Evidence: unit, axe, human.
87
160
 
88
161
  ## pattern.image
89
162
 
90
163
  Requires: semantics.non-text-alternative.
91
164
 
165
+ Scope: Informative, functional, complex, or decorative image.
166
+
92
167
  Behavior:
93
168
  - Alternative follows image purpose
94
169
 
170
+ Product decisions: purpose, long_description.
171
+
172
+ Functional Spec bindings: content.
173
+
174
+ Implementation outcomes: image-alternative.
175
+
95
176
  Evidence: axe, human.
96
177
 
97
178
  ## pattern.listbox
98
179
 
99
180
  Requires: semantics.accessible-name, semantics.selected-state, semantics.keyboard, semantics.focus.visible.
100
181
 
182
+ Scope: Single or multi-select option list.
183
+
101
184
  Behavior:
102
185
  - Arrow keys move active option
103
186
  - Selection follows declared model
104
187
 
188
+ Product decisions: single_or_multi, selection_follows_focus.
189
+
190
+ Functional Spec bindings: behavior, states, keyboard.
191
+
192
+ Implementation outcomes: listbox-keyboard-model.
193
+
105
194
  Evidence: unit, axe, e2e, human.
106
195
 
107
196
  ## pattern.media-player
108
197
 
109
198
  Requires: semantics.media-alternatives, semantics.accessible-name, semantics.keyboard, semantics.focus.visible, semantics.motion-control.
110
199
 
200
+ Scope: Audio or video playback.
201
+
111
202
  Behavior:
112
203
  - Provide keyboard-operable named controls and required alternatives
113
204
 
205
+ Product decisions: captions, transcript, audio_description, autoplay.
206
+
207
+ Functional Spec bindings: content, controls, behavior.
208
+
209
+ Implementation outcomes: media-alternatives, media-controls.
210
+
114
211
  Evidence: axe, e2e, human.
115
212
 
116
213
  ## pattern.menu-button
117
214
 
118
215
  Requires: semantics.accessible-name, semantics.expanded-state, semantics.keyboard, semantics.focus.initial, semantics.focus.return.
119
216
 
217
+ Scope: Button opening a command menu.
218
+
120
219
  Behavior:
121
220
  - Open and navigate menu by keyboard
122
221
 
222
+ Product decisions: focus_strategy.
223
+
224
+ Functional Spec bindings: behavior, keyboard, focus.
225
+
226
+ Implementation outcomes: menu-button-keyboard.
227
+
123
228
  Evidence: unit, e2e, human.
124
229
 
125
230
  ## pattern.pagination
126
231
 
127
232
  Requires: semantics.native-elements, semantics.accessible-name, semantics.landmarks, semantics.focus.visible.
128
233
 
234
+ Scope: Paged result navigation.
235
+
129
236
  Behavior:
130
237
  - Expose current page and named navigation
131
238
 
239
+ Product decisions: url_behavior.
240
+
241
+ Functional Spec bindings: states, navigation.
242
+
243
+ Implementation outcomes: pagination-current-page.
244
+
132
245
  Evidence: unit, axe, human.
133
246
 
134
247
  ## pattern.popover
135
248
 
136
249
  Requires: semantics.native-elements, semantics.accessible-name, semantics.keyboard.escape, semantics.focus.return.
137
250
 
251
+ Scope: Non-modal transient surface.
252
+
138
253
  Behavior:
139
254
  - Dismiss without trapping focus
140
255
 
256
+ Product decisions: dismissal, focus_entry.
257
+
258
+ Functional Spec bindings: behavior, focus.
259
+
260
+ Implementation outcomes: popover-dismissal.
261
+
141
262
  Evidence: unit, e2e, human.
142
263
 
143
264
  ## pattern.progress
144
265
 
145
266
  Requires: semantics.name-role-value, semantics.live-status.
146
267
 
268
+ Scope: Determinate or indeterminate progress.
269
+
147
270
  Behavior:
148
271
  - Expose value and completion changes without announcement noise
149
272
 
273
+ Product decisions: determinate.
274
+
275
+ Functional Spec bindings: states, messaging.
276
+
277
+ Implementation outcomes: progress-value.
278
+
150
279
  Evidence: unit, axe, human.
151
280
 
152
281
  ## pattern.tabs
153
282
 
154
283
  Requires: semantics.accessible-name, semantics.selected-state, semantics.keyboard, semantics.focus.visible.
155
284
 
285
+ Scope: Tabbed interfaces.
286
+
156
287
  Behavior:
157
288
  - Arrow keys move between tabs
158
289
  - Selection and activation follow the documented model
159
290
 
291
+ Product decisions: automatic_or_manual_activation.
292
+
293
+ Functional Spec bindings: behavior, states, keyboard.
294
+
295
+ Implementation outcomes: tabs-keyboard-model.
296
+
160
297
  Evidence: unit, axe, e2e, human.
161
298
 
162
299
  ## pattern.tooltip
163
300
 
164
301
  Requires: semantics.accessible-name, semantics.keyboard.escape.
165
302
 
303
+ Scope: Supplementary description.
304
+
166
305
  Behavior:
167
306
  - Available on hover and focus
168
307
  - Never contains interactive content
169
308
 
309
+ Product decisions: delay.
310
+
311
+ Functional Spec bindings: behavior.
312
+
313
+ Implementation outcomes: tooltip-description.
314
+
170
315
  Evidence: unit, e2e, human.
171
316
 
172
317
  ## pattern.validation
173
318
 
174
319
  Requires: semantics.form-error, semantics.live-status, semantics.focus.initial.
175
320
 
321
+ Scope: Client or server validation.
322
+
176
323
  Behavior:
177
324
  - Identify, associate, summarize, and focus errors deterministically
178
325
 
326
+ Product decisions: validation_timing, error_summary.
327
+
328
+ Functional Spec bindings: validation, messaging, focus.
329
+
330
+ Implementation outcomes: validation-associations, error-summary.
331
+
179
332
  Evidence: unit, axe, e2e, human.
333
+
334
+ ## applicability.page-context
335
+
336
+ When: `{"equals":{"fact":"artifact.page_context","value":true}}`
337
+
338
+ Outcomes: semantics.headings, semantics.landmarks.
339
+
340
+ Evidence: axe, human.
341
+
342
+ ## applicability.non-text-content
343
+
344
+ When: `{"equals":{"fact":"content.has_non_text","value":true}}`
345
+
346
+ Outcomes: pattern.image.
347
+
348
+ Evidence: axe, human.
349
+
350
+ ## applicability.media
351
+
352
+ When: `{"equals":{"fact":"content.has_media","value":true}}`
353
+
354
+ Outcomes: pattern.media-player.
355
+
356
+ Evidence: e2e, human.
357
+
358
+ ## applicability.forms
359
+
360
+ When: `{"equals":{"fact":"component.has_form_fields","value":true}}`
361
+
362
+ Outcomes: pattern.field.
363
+
364
+ Evidence: unit, axe.
365
+
366
+ ## applicability.validation
367
+
368
+ When: `{"equals":{"fact":"component.has_validation","value":true}}`
369
+
370
+ Outcomes: pattern.validation.
371
+
372
+ Evidence: unit, axe, e2e, human.
373
+
374
+ ## applicability.consequential-submission
375
+
376
+ When: `{"contains":{"fact":"component.submission_consequence","value":"consequential"}}`
377
+
378
+ Outcomes: pattern.consequential-submission.
379
+
380
+ Evidence: e2e, human.
381
+
382
+ ## applicability.dynamic-status
383
+
384
+ When: `{"equals":{"fact":"component.has_dynamic_status","value":true}}`
385
+
386
+ Outcomes: pattern.dynamic-status.
387
+
388
+ Evidence: unit, e2e, human.
389
+
390
+ ## applicability.overlays
391
+
392
+ When: `{"any":[{"contains":{"fact":"component.ui_pattern_ids","value":"modal"}},{"contains":{"fact":"component.ui_pattern_ids","value":"popover"}},{"contains":{"fact":"component.ui_pattern_ids","value":"tooltip"}}]}`
393
+
394
+ Outcomes: semantics.keyboard.escape, semantics.focus.return.
395
+
396
+ Evidence: e2e.
397
+
398
+ ## applicability.motion-timing
399
+
400
+ When: `{"equals":{"fact":"interaction.has_motion_or_timing","value":true}}`
401
+
402
+ Outcomes: semantics.motion-control.
403
+
404
+ Evidence: e2e, human.
405
+
406
+ ## applicability.complex-pointer
407
+
408
+ When: `{"equals":{"fact":"interaction.has_complex_pointer","value":true}}`
409
+
410
+ Outcomes: semantics.keyboard.
411
+
412
+ Evidence: e2e, human.
413
+
414
+ ## applicability.character-shortcuts
415
+
416
+ When: `{"equals":{"fact":"interaction.has_character_shortcuts","value":true}}`
417
+
418
+ Outcomes: semantics.keyboard.
419
+
420
+ Evidence: unit, e2e.
421
+
422
+ ## applicability.orientation-sensory
423
+
424
+ When: `{"equals":{"fact":"content.uses_orientation_or_sensory_cues","value":true}}`
425
+
426
+ Outcomes: semantics.name-role-value.
427
+
428
+ Evidence: human.
429
+
430
+ ## applicability.target-size
431
+
432
+ When: `{"equals":{"fact":"interaction.has_pointer_targets","value":true}}`
433
+
434
+ Outcomes: semantics.target-size.
435
+
436
+ Evidence: e2e, human.
437
+
438
+ ## applicability.focus-obstruction
439
+
440
+ When: `{"equals":{"fact":"interaction.can_obscure_focus","value":true}}`
441
+
442
+ Outcomes: semantics.focus.visible.
443
+
444
+ Evidence: e2e, human.
445
+
446
+ ## applicability.authentication-captcha
447
+
448
+ When: `{"equals":{"fact":"flow.has_authentication","value":true}}`
449
+
450
+ Outcomes: semantics.form-label, semantics.form-error.
451
+
452
+ Evidence: axe, e2e, human.
453
+
454
+ ## applicability.redundant-entry
455
+
456
+ When: `{"equals":{"fact":"flow.repeats_entry","value":true}}`
457
+
458
+ Outcomes: semantics.form-label.
459
+
460
+ Evidence: e2e, human.
461
+
462
+ ## applicability.consistent-help
463
+
464
+ When: `{"equals":{"fact":"artifact.has_help","value":true}}`
465
+
466
+ Outcomes: semantics.landmarks.
467
+
468
+ Evidence: human.
469
+
470
+ ## applicability.locale-bidi
471
+
472
+ When: `{"equals":{"fact":"content.has_locale_or_bidi","value":true}}`
473
+
474
+ Outcomes: semantics.native-elements.
475
+
476
+ Evidence: unit, human.
477
+
478
+ ## applicability.data-table-grid
479
+
480
+ When: `{"equals":{"fact":"component.has_data_table_or_grid","value":true}}`
481
+
482
+ Outcomes: semantics.data-table.
483
+
484
+ Evidence: axe, e2e, human.
485
+
486
+ ## Evidence routing
487
+
488
+ Tool availability changes the evidence route, never requirement applicability. A missing required capability is a blocker.
489
+
490
+ - unit: semantic state and deterministic resolver behavior; capability: unit
491
+ - axe: automated rule evidence; capability: axe
492
+ - e2e: keyboard, focus, and integrated behavior; capability: e2e
493
+ - human: judgment, assistive technology, content, and visual evidence; capability: human