@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,6 +1,19 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@2.0.0; profile: ai-orchestration@2.0.0; schema: 2; source-digest: e4bf4272751c21e417ddd3e6c52308bf804fab097629ba843964532e7f97d9f0; profile-digest: 5865a240f47ed5756a8b7a03fddd28fd8734051b61194dd378064b764859d691 -->
2
3
  # Accessibility implementation contract
3
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.
16
+
4
17
  ## semantics.accessible-name
5
18
 
6
19
  Every interactive or meaning-bearing control has a concise programmatic name derived from visible text when available.
@@ -155,175 +168,496 @@ Proof: e2e, human.
155
168
 
156
169
  Requires: semantics.native-elements, semantics.accessible-name, semantics.expanded-state, semantics.keyboard, semantics.focus.visible.
157
170
 
171
+ Scope: Grouped disclosure sections.
172
+
158
173
  Behavior:
159
174
  - Toggle only the controlled panel
160
175
  - Preserve DOM and focus order
161
176
 
177
+ Product decisions: single_or_multiple_open.
178
+
179
+ Functional Spec bindings: behavior, states, keyboard.
180
+
181
+ Implementation outcomes: accordion-control, accordion-panel.
182
+
162
183
  Evidence: unit, axe, e2e, human.
163
184
 
164
185
  ## pattern.alert
165
186
 
166
187
  Requires: semantics.alert.
167
188
 
189
+ Scope: Urgent message.
190
+
168
191
  Behavior:
169
192
  - Announce once without moving focus
170
193
 
194
+ Product decisions: urgency.
195
+
196
+ Functional Spec bindings: messaging.
197
+
198
+ Implementation outcomes: alert-announcement.
199
+
171
200
  Evidence: unit, human.
172
201
 
173
202
  ## pattern.carousel
174
203
 
175
204
  Requires: semantics.accessible-name, semantics.keyboard, semantics.focus.visible, semantics.motion-control, semantics.live-status.
176
205
 
206
+ Scope: Rotating content set.
207
+
177
208
  Behavior:
178
209
  - Pause rotation on interaction
179
210
  - Provide named controls and current position
180
211
 
212
+ Product decisions: auto_rotation, looping.
213
+
214
+ Functional Spec bindings: behavior, states, controls.
215
+
216
+ Implementation outcomes: carousel-controls, carousel-rotation.
217
+
181
218
  Evidence: unit, axe, e2e, human.
182
219
 
183
220
  ## pattern.combobox
184
221
 
185
222
  Requires: semantics.accessible-name, semantics.expanded-state, semantics.selected-state, semantics.keyboard, semantics.live-status.
186
223
 
224
+ Scope: Input with selectable popup.
225
+
187
226
  Behavior:
188
227
  - Keyboard controls popup, option, and input independently
189
228
 
229
+ Product decisions: editable, autocomplete, selection_commit.
230
+
231
+ Functional Spec bindings: behavior, states, keyboard.
232
+
233
+ Implementation outcomes: combobox-state-machine.
234
+
190
235
  Evidence: unit, axe, e2e, human.
191
236
 
192
237
  ## pattern.consequential-submission
193
238
 
194
239
  Requires: semantics.consequential-action, semantics.form-error, semantics.keyboard.
195
240
 
241
+ Scope: Legal, financial, destructive, or irreversible submission.
242
+
196
243
  Behavior:
197
244
  - Support review, correction, confirmation, or reversal
198
245
 
246
+ Product decisions: safeguard, reversal_window.
247
+
248
+ Functional Spec bindings: submission, confirmation.
249
+
250
+ Implementation outcomes: submission-safeguard.
251
+
199
252
  Evidence: e2e, human.
200
253
 
201
254
  ## pattern.dialog
202
255
 
203
256
  Requires: semantics.native-dialog, semantics.accessible-name, semantics.keyboard.escape, semantics.focus.initial, semantics.focus.return.
204
257
 
258
+ Scope: Modal and non-modal dialogs.
259
+
205
260
  Behavior:
206
261
  - Manage initial, contained, and return focus
207
262
  - Dismiss topmost dialog with Escape
208
263
 
264
+ Product decisions: modal, initial_focus, dismissal.
265
+
266
+ Functional Spec bindings: behavior, states, focus, keyboard.
267
+
268
+ Implementation outcomes: dialog-semantics, dialog-focus-lifecycle.
269
+
209
270
  Evidence: unit, axe, e2e, human.
210
271
 
211
272
  ## pattern.disclosure
212
273
 
213
274
  Requires: semantics.native-elements, semantics.accessible-name, semantics.expanded-state, semantics.keyboard.
214
275
 
276
+ Scope: Show and hide supplementary content.
277
+
215
278
  Behavior:
216
279
  - Control toggles one region
217
280
 
281
+ Product decisions: initial_state.
282
+
283
+ Functional Spec bindings: behavior, states.
284
+
285
+ Implementation outcomes: disclosure-control.
286
+
218
287
  Evidence: unit, axe, e2e.
219
288
 
220
289
  ## pattern.dynamic-status
221
290
 
222
291
  Requires: semantics.live-status.
223
292
 
293
+ Scope: Asynchronous status message.
294
+
224
295
  Behavior:
225
296
  - Announce meaningful changes once
226
297
 
298
+ Product decisions: announcement_copy.
299
+
300
+ Functional Spec bindings: messaging, states.
301
+
302
+ Implementation outcomes: status-live-region.
303
+
227
304
  Evidence: unit, e2e, human.
228
305
 
229
306
  ## pattern.field
230
307
 
231
308
  Requires: semantics.form-label, semantics.form-required, semantics.focus.visible.
232
309
 
310
+ Scope: Labeled form input.
311
+
233
312
  Behavior:
234
313
  - Expose label, instructions, and requiredness before interaction
235
314
 
315
+ Product decisions: required, instructions.
316
+
317
+ Functional Spec bindings: fields, requiredness.
318
+
319
+ Implementation outcomes: field-associations.
320
+
236
321
  Evidence: unit, axe, human.
237
322
 
238
323
  ## pattern.image
239
324
 
240
325
  Requires: semantics.non-text-alternative.
241
326
 
327
+ Scope: Informative, functional, complex, or decorative image.
328
+
242
329
  Behavior:
243
330
  - Alternative follows image purpose
244
331
 
332
+ Product decisions: purpose, long_description.
333
+
334
+ Functional Spec bindings: content.
335
+
336
+ Implementation outcomes: image-alternative.
337
+
245
338
  Evidence: axe, human.
246
339
 
247
340
  ## pattern.listbox
248
341
 
249
342
  Requires: semantics.accessible-name, semantics.selected-state, semantics.keyboard, semantics.focus.visible.
250
343
 
344
+ Scope: Single or multi-select option list.
345
+
251
346
  Behavior:
252
347
  - Arrow keys move active option
253
348
  - Selection follows declared model
254
349
 
350
+ Product decisions: single_or_multi, selection_follows_focus.
351
+
352
+ Functional Spec bindings: behavior, states, keyboard.
353
+
354
+ Implementation outcomes: listbox-keyboard-model.
355
+
255
356
  Evidence: unit, axe, e2e, human.
256
357
 
257
358
  ## pattern.media-player
258
359
 
259
360
  Requires: semantics.media-alternatives, semantics.accessible-name, semantics.keyboard, semantics.focus.visible, semantics.motion-control.
260
361
 
362
+ Scope: Audio or video playback.
363
+
261
364
  Behavior:
262
365
  - Provide keyboard-operable named controls and required alternatives
263
366
 
367
+ Product decisions: captions, transcript, audio_description, autoplay.
368
+
369
+ Functional Spec bindings: content, controls, behavior.
370
+
371
+ Implementation outcomes: media-alternatives, media-controls.
372
+
264
373
  Evidence: axe, e2e, human.
265
374
 
266
375
  ## pattern.menu-button
267
376
 
268
377
  Requires: semantics.accessible-name, semantics.expanded-state, semantics.keyboard, semantics.focus.initial, semantics.focus.return.
269
378
 
379
+ Scope: Button opening a command menu.
380
+
270
381
  Behavior:
271
382
  - Open and navigate menu by keyboard
272
383
 
384
+ Product decisions: focus_strategy.
385
+
386
+ Functional Spec bindings: behavior, keyboard, focus.
387
+
388
+ Implementation outcomes: menu-button-keyboard.
389
+
273
390
  Evidence: unit, e2e, human.
274
391
 
275
392
  ## pattern.pagination
276
393
 
277
394
  Requires: semantics.native-elements, semantics.accessible-name, semantics.landmarks, semantics.focus.visible.
278
395
 
396
+ Scope: Paged result navigation.
397
+
279
398
  Behavior:
280
399
  - Expose current page and named navigation
281
400
 
401
+ Product decisions: url_behavior.
402
+
403
+ Functional Spec bindings: states, navigation.
404
+
405
+ Implementation outcomes: pagination-current-page.
406
+
282
407
  Evidence: unit, axe, human.
283
408
 
284
409
  ## pattern.popover
285
410
 
286
411
  Requires: semantics.native-elements, semantics.accessible-name, semantics.keyboard.escape, semantics.focus.return.
287
412
 
413
+ Scope: Non-modal transient surface.
414
+
288
415
  Behavior:
289
416
  - Dismiss without trapping focus
290
417
 
418
+ Product decisions: dismissal, focus_entry.
419
+
420
+ Functional Spec bindings: behavior, focus.
421
+
422
+ Implementation outcomes: popover-dismissal.
423
+
291
424
  Evidence: unit, e2e, human.
292
425
 
293
426
  ## pattern.progress
294
427
 
295
428
  Requires: semantics.name-role-value, semantics.live-status.
296
429
 
430
+ Scope: Determinate or indeterminate progress.
431
+
297
432
  Behavior:
298
433
  - Expose value and completion changes without announcement noise
299
434
 
435
+ Product decisions: determinate.
436
+
437
+ Functional Spec bindings: states, messaging.
438
+
439
+ Implementation outcomes: progress-value.
440
+
300
441
  Evidence: unit, axe, human.
301
442
 
302
443
  ## pattern.tabs
303
444
 
304
445
  Requires: semantics.accessible-name, semantics.selected-state, semantics.keyboard, semantics.focus.visible.
305
446
 
447
+ Scope: Tabbed interfaces.
448
+
306
449
  Behavior:
307
450
  - Arrow keys move between tabs
308
451
  - Selection and activation follow the documented model
309
452
 
453
+ Product decisions: automatic_or_manual_activation.
454
+
455
+ Functional Spec bindings: behavior, states, keyboard.
456
+
457
+ Implementation outcomes: tabs-keyboard-model.
458
+
310
459
  Evidence: unit, axe, e2e, human.
311
460
 
312
461
  ## pattern.tooltip
313
462
 
314
463
  Requires: semantics.accessible-name, semantics.keyboard.escape.
315
464
 
465
+ Scope: Supplementary description.
466
+
316
467
  Behavior:
317
468
  - Available on hover and focus
318
469
  - Never contains interactive content
319
470
 
471
+ Product decisions: delay.
472
+
473
+ Functional Spec bindings: behavior.
474
+
475
+ Implementation outcomes: tooltip-description.
476
+
320
477
  Evidence: unit, e2e, human.
321
478
 
322
479
  ## pattern.validation
323
480
 
324
481
  Requires: semantics.form-error, semantics.live-status, semantics.focus.initial.
325
482
 
483
+ Scope: Client or server validation.
484
+
326
485
  Behavior:
327
486
  - Identify, associate, summarize, and focus errors deterministically
328
487
 
488
+ Product decisions: validation_timing, error_summary.
489
+
490
+ Functional Spec bindings: validation, messaging, focus.
491
+
492
+ Implementation outcomes: validation-associations, error-summary.
493
+
329
494
  Evidence: unit, axe, e2e, human.
495
+
496
+ ## applicability.page-context
497
+
498
+ When: `{"equals":{"fact":"artifact.page_context","value":true}}`
499
+
500
+ Outcomes: semantics.headings, semantics.landmarks.
501
+
502
+ Evidence: axe, human.
503
+
504
+ ## applicability.non-text-content
505
+
506
+ When: `{"equals":{"fact":"content.has_non_text","value":true}}`
507
+
508
+ Outcomes: pattern.image.
509
+
510
+ Evidence: axe, human.
511
+
512
+ ## applicability.media
513
+
514
+ When: `{"equals":{"fact":"content.has_media","value":true}}`
515
+
516
+ Outcomes: pattern.media-player.
517
+
518
+ Evidence: e2e, human.
519
+
520
+ ## applicability.forms
521
+
522
+ When: `{"equals":{"fact":"component.has_form_fields","value":true}}`
523
+
524
+ Outcomes: pattern.field.
525
+
526
+ Evidence: unit, axe.
527
+
528
+ ## applicability.validation
529
+
530
+ When: `{"equals":{"fact":"component.has_validation","value":true}}`
531
+
532
+ Outcomes: pattern.validation.
533
+
534
+ Evidence: unit, axe, e2e, human.
535
+
536
+ ## applicability.consequential-submission
537
+
538
+ When: `{"contains":{"fact":"component.submission_consequence","value":"consequential"}}`
539
+
540
+ Outcomes: pattern.consequential-submission.
541
+
542
+ Evidence: e2e, human.
543
+
544
+ ## applicability.dynamic-status
545
+
546
+ When: `{"equals":{"fact":"component.has_dynamic_status","value":true}}`
547
+
548
+ Outcomes: pattern.dynamic-status.
549
+
550
+ Evidence: unit, e2e, human.
551
+
552
+ ## applicability.overlays
553
+
554
+ 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"}}]}`
555
+
556
+ Outcomes: semantics.keyboard.escape, semantics.focus.return.
557
+
558
+ Evidence: e2e.
559
+
560
+ ## applicability.motion-timing
561
+
562
+ When: `{"equals":{"fact":"interaction.has_motion_or_timing","value":true}}`
563
+
564
+ Outcomes: semantics.motion-control.
565
+
566
+ Evidence: e2e, human.
567
+
568
+ ## applicability.complex-pointer
569
+
570
+ When: `{"equals":{"fact":"interaction.has_complex_pointer","value":true}}`
571
+
572
+ Outcomes: semantics.keyboard.
573
+
574
+ Evidence: e2e, human.
575
+
576
+ ## applicability.character-shortcuts
577
+
578
+ When: `{"equals":{"fact":"interaction.has_character_shortcuts","value":true}}`
579
+
580
+ Outcomes: semantics.keyboard.
581
+
582
+ Evidence: unit, e2e.
583
+
584
+ ## applicability.orientation-sensory
585
+
586
+ When: `{"equals":{"fact":"content.uses_orientation_or_sensory_cues","value":true}}`
587
+
588
+ Outcomes: semantics.name-role-value.
589
+
590
+ Evidence: human.
591
+
592
+ ## applicability.target-size
593
+
594
+ When: `{"equals":{"fact":"interaction.has_pointer_targets","value":true}}`
595
+
596
+ Outcomes: semantics.target-size.
597
+
598
+ Evidence: e2e, human.
599
+
600
+ ## applicability.focus-obstruction
601
+
602
+ When: `{"equals":{"fact":"interaction.can_obscure_focus","value":true}}`
603
+
604
+ Outcomes: semantics.focus.visible.
605
+
606
+ Evidence: e2e, human.
607
+
608
+ ## applicability.authentication-captcha
609
+
610
+ When: `{"equals":{"fact":"flow.has_authentication","value":true}}`
611
+
612
+ Outcomes: semantics.form-label, semantics.form-error.
613
+
614
+ Evidence: axe, e2e, human.
615
+
616
+ ## applicability.redundant-entry
617
+
618
+ When: `{"equals":{"fact":"flow.repeats_entry","value":true}}`
619
+
620
+ Outcomes: semantics.form-label.
621
+
622
+ Evidence: e2e, human.
623
+
624
+ ## applicability.consistent-help
625
+
626
+ When: `{"equals":{"fact":"artifact.has_help","value":true}}`
627
+
628
+ Outcomes: semantics.landmarks.
629
+
630
+ Evidence: human.
631
+
632
+ ## applicability.locale-bidi
633
+
634
+ When: `{"equals":{"fact":"content.has_locale_or_bidi","value":true}}`
635
+
636
+ Outcomes: semantics.native-elements.
637
+
638
+ Evidence: unit, human.
639
+
640
+ ## applicability.data-table-grid
641
+
642
+ When: `{"equals":{"fact":"component.has_data_table_or_grid","value":true}}`
643
+
644
+ Outcomes: semantics.data-table.
645
+
646
+ Evidence: axe, e2e, human.
647
+
648
+ ## policy.enhanced-quality
649
+
650
+ Enhanced guidance is advisory and cannot be represented as a conformance failure unless the consumer explicitly adopts it as product policy.
651
+
652
+ ## policy.target-size
653
+
654
+ 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.
655
+
656
+ ## Evidence routing
657
+
658
+ Tool availability changes the evidence route, never requirement applicability. A missing required capability is a blocker.
659
+
660
+ - unit: semantic state and deterministic resolver behavior; capability: unit
661
+ - axe: automated rule evidence; capability: axe
662
+ - e2e: keyboard, focus, and integrated behavior; capability: e2e
663
+ - human: judgment, assistive technology, content, and visual evidence; capability: human