@verndale/accessibility-standards 2.0.0 → 3.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 (165) hide show
  1. package/OPERATING.md +1 -1
  2. package/README.md +1 -1
  3. package/dist/manifest.json +156 -116
  4. package/dist/profiles/ai-orchestration/coverage-manifest.json +702 -153
  5. package/dist/profiles/ai-orchestration/implementation/accessibility.md +523 -42
  6. package/dist/profiles/ai-orchestration/pattern-contracts.json +892 -306
  7. package/dist/profiles/ai-orchestration/patterns/accordion.md +6 -1
  8. package/dist/profiles/ai-orchestration/patterns/alert.md +6 -1
  9. package/dist/profiles/ai-orchestration/patterns/carousel.md +6 -1
  10. package/dist/profiles/ai-orchestration/patterns/checkbox.md +27 -0
  11. package/dist/profiles/ai-orchestration/patterns/combobox.md +6 -1
  12. package/dist/profiles/ai-orchestration/patterns/consequential-submission.md +8 -3
  13. package/dist/profiles/ai-orchestration/patterns/dialog.md +6 -1
  14. package/dist/profiles/ai-orchestration/patterns/disclosure.md +6 -1
  15. package/dist/profiles/ai-orchestration/patterns/dynamic-status.md +6 -1
  16. package/dist/profiles/ai-orchestration/patterns/field.md +7 -1
  17. package/dist/profiles/ai-orchestration/patterns/image.md +6 -1
  18. package/dist/profiles/ai-orchestration/patterns/listbox.md +6 -1
  19. package/dist/profiles/ai-orchestration/patterns/media-player.md +9 -1
  20. package/dist/profiles/ai-orchestration/patterns/menu-button.md +6 -1
  21. package/dist/profiles/ai-orchestration/patterns/menu.md +30 -0
  22. package/dist/profiles/ai-orchestration/patterns/pagination.md +6 -1
  23. package/dist/profiles/ai-orchestration/patterns/popover.md +7 -1
  24. package/dist/profiles/ai-orchestration/patterns/progress.md +7 -1
  25. package/dist/profiles/ai-orchestration/patterns/radio-group.md +27 -0
  26. package/dist/profiles/ai-orchestration/patterns/slider.md +31 -0
  27. package/dist/profiles/ai-orchestration/patterns/spinbutton.md +28 -0
  28. package/dist/profiles/ai-orchestration/patterns/tabs.md +6 -1
  29. package/dist/profiles/ai-orchestration/patterns/tooltip.md +6 -1
  30. package/dist/profiles/ai-orchestration/patterns/tree-view.md +31 -0
  31. package/dist/profiles/ai-orchestration/patterns/validation.md +7 -1
  32. package/dist/profiles/ai-orchestration/review/accessibility.md +14 -6
  33. package/dist/profiles/ai-orchestration/semantics/accessible-authentication.md +13 -0
  34. package/dist/profiles/ai-orchestration/semantics/accessible-name.md +8 -2
  35. package/dist/profiles/ai-orchestration/semantics/alert.md +7 -1
  36. package/dist/profiles/ai-orchestration/semantics/consequential-action.md +6 -2
  37. package/dist/profiles/ai-orchestration/semantics/consistent-help.md +13 -0
  38. package/dist/profiles/ai-orchestration/semantics/data-table.md +7 -2
  39. package/dist/profiles/ai-orchestration/semantics/dragging-alternative.md +13 -0
  40. package/dist/profiles/ai-orchestration/semantics/expanded-state.md +6 -1
  41. package/dist/profiles/ai-orchestration/semantics/focus.initial.md +4 -1
  42. package/dist/profiles/ai-orchestration/semantics/focus.return.md +4 -1
  43. package/dist/profiles/ai-orchestration/semantics/focus.visible.md +8 -2
  44. package/dist/profiles/ai-orchestration/semantics/form-error.md +8 -2
  45. package/dist/profiles/ai-orchestration/semantics/form-label.md +7 -1
  46. package/dist/profiles/ai-orchestration/semantics/form-required.md +7 -1
  47. package/dist/profiles/ai-orchestration/semantics/headings.md +7 -1
  48. package/dist/profiles/ai-orchestration/semantics/keyboard.escape.md +4 -1
  49. package/dist/profiles/ai-orchestration/semantics/keyboard.md +7 -1
  50. package/dist/profiles/ai-orchestration/semantics/landmarks.md +6 -1
  51. package/dist/profiles/ai-orchestration/semantics/live-status.md +7 -2
  52. package/dist/profiles/ai-orchestration/semantics/media-alternatives.md +11 -1
  53. package/dist/profiles/ai-orchestration/semantics/motion-control.md +8 -2
  54. package/dist/profiles/ai-orchestration/semantics/name-role-value.md +6 -2
  55. package/dist/profiles/ai-orchestration/semantics/native-dialog.md +7 -1
  56. package/dist/profiles/ai-orchestration/semantics/native-elements.md +5 -1
  57. package/dist/profiles/ai-orchestration/semantics/non-text-alternative.md +5 -1
  58. package/dist/profiles/ai-orchestration/semantics/redundant-entry.md +13 -0
  59. package/dist/profiles/ai-orchestration/semantics/roles-states-properties.md +6 -1
  60. package/dist/profiles/ai-orchestration/semantics/selected-state.md +6 -1
  61. package/dist/profiles/ai-orchestration/semantics/target-size.md +6 -2
  62. package/dist/profiles/ai-orchestration/semantics.json +826 -130
  63. package/dist/profiles/ai-orchestration/testing/accessibility.md +33 -3
  64. package/dist/profiles/ai-orchestration/ui-design-brain-bindings.json +287 -307
  65. package/dist/profiles/conductor/a11y-semantics.md +249 -10
  66. package/dist/profiles/conductor/accessibility-quality.md +275 -33
  67. package/dist/profiles/conductor/applicability-matrix.json +226 -269
  68. package/dist/profiles/conductor/coverage-manifest.json +702 -153
  69. package/dist/profiles/conductor/pattern-contracts.json +892 -306
  70. package/dist/profiles/conductor/patterns/accordion.json +35 -27
  71. package/dist/profiles/conductor/patterns/alert.json +29 -21
  72. package/dist/profiles/conductor/patterns/carousel.json +36 -28
  73. package/dist/profiles/conductor/patterns/checkbox.json +67 -0
  74. package/dist/profiles/conductor/patterns/combobox.json +37 -29
  75. package/dist/profiles/conductor/patterns/consequential-submission.json +34 -25
  76. package/dist/profiles/conductor/patterns/dialog.json +37 -29
  77. package/dist/profiles/conductor/patterns/disclosure.json +33 -25
  78. package/dist/profiles/conductor/patterns/dynamic-status.json +31 -22
  79. package/dist/profiles/conductor/patterns/field.json +41 -25
  80. package/dist/profiles/conductor/patterns/image.json +31 -22
  81. package/dist/profiles/conductor/patterns/listbox.json +35 -27
  82. package/dist/profiles/conductor/patterns/media-player.json +59 -29
  83. package/dist/profiles/conductor/patterns/menu-button.json +34 -26
  84. package/dist/profiles/conductor/patterns/menu.json +78 -0
  85. package/dist/profiles/conductor/patterns/pagination.json +34 -25
  86. package/dist/profiles/conductor/patterns/popover.json +42 -26
  87. package/dist/profiles/conductor/patterns/progress.json +38 -23
  88. package/dist/profiles/conductor/patterns/radio-group.json +69 -0
  89. package/dist/profiles/conductor/patterns/slider.json +84 -0
  90. package/dist/profiles/conductor/patterns/spinbutton.json +74 -0
  91. package/dist/profiles/conductor/patterns/tabs.json +34 -26
  92. package/dist/profiles/conductor/patterns/tooltip.json +31 -23
  93. package/dist/profiles/conductor/patterns/tree-view.json +77 -0
  94. package/dist/profiles/conductor/patterns/validation.json +42 -26
  95. package/dist/profiles/conductor/semantics.json +826 -130
  96. package/dist/profiles/conductor/ui-design-brain-bindings.json +287 -307
  97. package/dist/projection-manifest.json +120 -104
  98. package/dist/requirements-to-implementation.md +7 -1
  99. package/lib/build.mjs +3 -3
  100. package/lib/digest.mjs +8 -0
  101. package/lib/load.mjs +13 -0
  102. package/lib/provenance.mjs +2 -0
  103. package/lib/render.mjs +51 -7
  104. package/lib/sync.mjs +2 -2
  105. package/lib/validate.mjs +335 -33
  106. package/package.json +6 -2
  107. package/profiles/ai-orchestration/profile.json +1 -1
  108. package/profiles/ai-orchestration/templates/patterns/README.md +1 -1
  109. package/profiles/ai-orchestration/templates/review/README.md +1 -1
  110. package/profiles/ai-orchestration/templates/semantics/README.md +1 -1
  111. package/profiles/ai-orchestration/templates/testing/README.md +1 -1
  112. package/profiles/conductor/profile.json +1 -1
  113. package/profiles/conductor/templates/evidence/README.md +1 -1
  114. package/profiles/conductor/templates/patterns/README.md +1 -1
  115. package/profiles/conductor/templates/semantics/README.md +1 -1
  116. package/schemas/consumer-config.schema.json +1 -1
  117. package/schemas/contract.schema.json +1 -1
  118. package/schemas/manifest.schema.json +1 -1
  119. package/schemas/pattern.schema.json +98 -1
  120. package/schemas/profile.schema.json +1 -1
  121. package/schemas/projection-manifest.schema.json +6 -6
  122. package/schemas/semantic.schema.json +26 -1
  123. package/schemas/standards-reference.schema.json +105 -0
  124. package/schemas/wcag-coverage.schema.json +93 -0
  125. package/src/applicability/facts.yml +3 -5
  126. package/src/applicability/matrix.yml +5 -7
  127. package/src/applicability/ui-design-brain-bindings.yml +8 -22
  128. package/src/contract.yml +1 -1
  129. package/src/coverage/wcag-2.2.yml +68 -0
  130. package/src/patterns/disclosure/accordion.yml +1 -1
  131. package/src/patterns/disclosure/disclosure.yml +1 -1
  132. package/src/patterns/feedback/alert.yml +1 -1
  133. package/src/patterns/feedback/dynamic-status.yml +1 -1
  134. package/src/patterns/feedback/progress.yml +1 -1
  135. package/src/patterns/forms/consequential-submission.yml +1 -1
  136. package/src/patterns/forms/field.yml +1 -1
  137. package/src/patterns/forms/spinbutton.yml +1 -0
  138. package/src/patterns/forms/validation.yml +1 -1
  139. package/src/patterns/media/carousel.yml +1 -1
  140. package/src/patterns/media/image.yml +1 -1
  141. package/src/patterns/media/media-player.yml +1 -1
  142. package/src/patterns/navigation/menu-button.yml +1 -1
  143. package/src/patterns/navigation/menu.yml +1 -0
  144. package/src/patterns/navigation/pagination.yml +1 -1
  145. package/src/patterns/navigation/tabs.yml +1 -1
  146. package/src/patterns/navigation/tree-view.yml +1 -0
  147. package/src/patterns/overlays/dialog.yml +1 -1
  148. package/src/patterns/overlays/popover.yml +1 -1
  149. package/src/patterns/overlays/tooltip.yml +1 -1
  150. package/src/patterns/selection/checkbox.yml +1 -0
  151. package/src/patterns/selection/combobox.yml +1 -1
  152. package/src/patterns/selection/listbox.yml +1 -1
  153. package/src/patterns/selection/radio-group.yml +1 -0
  154. package/src/patterns/selection/slider.yml +1 -0
  155. package/src/semantics/accessible-names.yml +1 -1
  156. package/src/semantics/forms.yml +1 -1
  157. package/src/semantics/headings-landmarks.yml +1 -1
  158. package/src/semantics/keyboard-focus.yml +1 -1
  159. package/src/semantics/live-regions.yml +1 -1
  160. package/src/semantics/media.yml +1 -1
  161. package/src/semantics/native-elements.yml +1 -1
  162. package/src/semantics/roles-states-properties.yml +1 -1
  163. package/src/semantics/tables.yml +1 -1
  164. package/src/semantics/wcag-2.2.yml +1 -0
  165. package/src/sources.yml +1 -1
@@ -1,62 +1,60 @@
1
1
  {
2
2
  "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
3
  "_provenance": {
4
- "package": "@verndale/accessibility-standards@2.0.0",
4
+ "package": "@verndale/accessibility-standards@3.0.0",
5
5
  "profile": "conductor",
6
- "profile_version": "2.0.0",
7
- "profile_digest": "4840ac3a4910f8dc3a850df266a141e0e4df94ca3c8935ae4531c56f6be91e65",
8
- "schema_version": 2,
9
- "source_digest": "e4bf4272751c21e417ddd3e6c52308bf804fab097629ba843964532e7f97d9f0"
6
+ "profile_digest": "beadcb5fe8151303b3e3241de4fee0ece3be9ff2f4dbdb3a6f93a363b0a2d491",
7
+ "profile_version": "3.0.0",
8
+ "schema_version": 3,
9
+ "source_digest": "708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af"
10
10
  },
11
- "schema_version": 2,
12
- "trigger_states": [
13
- "unobserved",
14
- "not_applicable",
15
- "candidate",
16
- "applicable"
17
- ],
18
- "resolution_states": [
19
- "skipped",
20
- "needs_confirmation",
21
- "needs_input",
22
- "resolved",
23
- "deferred",
24
- "conflict"
25
- ],
26
- "facts": {
27
- "artifact.page_context": {
28
- "type": "boolean"
11
+ "evidence": {
12
+ "proof_kinds": {
13
+ "axe": {
14
+ "purpose": "automated rule evidence",
15
+ "required_capability": "axe"
16
+ },
17
+ "e2e": {
18
+ "purpose": "keyboard, focus, and integrated behavior",
19
+ "required_capability": "e2e"
20
+ },
21
+ "human": {
22
+ "purpose": "judgment, assistive technology, content, and visual evidence",
23
+ "required_capability": "human"
24
+ },
25
+ "unit": {
26
+ "purpose": "semantic state and deterministic resolver behavior",
27
+ "required_capability": "unit"
28
+ }
29
29
  },
30
- "content.has_non_text": {
30
+ "rule": "Tool availability changes the evidence route, never requirement applicability. A missing required capability is a blocker.",
31
+ "version": 1
32
+ },
33
+ "facts": {
34
+ "artifact.has_repeated_help_across_page_set": {
31
35
  "type": "boolean"
32
36
  },
33
- "content.has_media": {
37
+ "artifact.page_context": {
34
38
  "type": "boolean"
35
39
  },
36
- "component.ui_pattern_ids": {
37
- "type": "array",
38
- "items": "string",
39
- "source": "ui-design-brain"
40
- },
41
40
  "component.accessibility_pattern_ids": {
42
- "type": "array",
41
+ "derived": true,
43
42
  "items": "string",
44
- "derived": true
43
+ "type": "array"
45
44
  },
46
45
  "component.command_menu_trigger": {
47
46
  "type": "boolean"
48
47
  },
49
- "component.has_form_fields": {
48
+ "component.has_data_table": {
50
49
  "type": "boolean"
51
50
  },
52
- "component.has_validation": {
51
+ "component.has_dynamic_status": {
53
52
  "type": "boolean"
54
53
  },
55
- "component.submission_consequence": {
56
- "type": "array",
57
- "items": "string"
54
+ "component.has_form_fields": {
55
+ "type": "boolean"
58
56
  },
59
- "component.has_dynamic_status": {
57
+ "component.has_validation": {
60
58
  "type": "boolean"
61
59
  },
62
60
  "component.message_urgency": {
@@ -68,180 +66,201 @@
68
66
  "component.selection_model": {
69
67
  "type": "string"
70
68
  },
71
- "interaction.has_motion_or_timing": {
72
- "type": "boolean"
69
+ "component.submission_consequence": {
70
+ "items": "string",
71
+ "type": "array"
73
72
  },
74
- "interaction.has_complex_pointer": {
75
- "type": "boolean"
73
+ "component.ui_pattern_ids": {
74
+ "items": "string",
75
+ "source": "ui-design-brain",
76
+ "type": "array"
76
77
  },
77
- "interaction.has_character_shortcuts": {
78
+ "content.has_media": {
78
79
  "type": "boolean"
79
80
  },
80
- "content.uses_orientation_or_sensory_cues": {
81
+ "content.has_non_text": {
81
82
  "type": "boolean"
82
83
  },
83
- "interaction.has_pointer_targets": {
84
+ "flow.has_authentication": {
84
85
  "type": "boolean"
85
86
  },
86
- "interaction.can_obscure_focus": {
87
+ "flow.repeats_entry": {
87
88
  "type": "boolean"
88
89
  },
89
- "flow.has_authentication": {
90
+ "interaction.can_obscure_focus": {
90
91
  "type": "boolean"
91
92
  },
92
- "flow.repeats_entry": {
93
+ "interaction.has_complex_pointer": {
93
94
  "type": "boolean"
94
95
  },
95
- "artifact.has_help": {
96
+ "interaction.has_dragging": {
96
97
  "type": "boolean"
97
98
  },
98
- "content.has_locale_or_bidi": {
99
+ "interaction.has_motion_or_timing": {
99
100
  "type": "boolean"
100
101
  },
101
- "component.has_data_table_or_grid": {
102
+ "interaction.has_pointer_targets": {
102
103
  "type": "boolean"
103
104
  }
104
105
  },
106
+ "resolution_states": [
107
+ "skipped",
108
+ "needs_confirmation",
109
+ "needs_input",
110
+ "resolved",
111
+ "deferred",
112
+ "conflict"
113
+ ],
105
114
  "rows": [
106
115
  {
107
- "id": "applicability.page-context",
108
- "when": {
109
- "equals": {
110
- "fact": "artifact.page_context",
111
- "value": true
112
- }
113
- },
114
- "outcomes": [
115
- "semantics.headings",
116
- "semantics.landmarks"
117
- ],
118
116
  "evidence": [
119
117
  "axe",
120
118
  "human"
121
119
  ],
120
+ "id": "applicability.page-context",
122
121
  "order": 0,
122
+ "outcomes": [
123
+ "semantics.headings",
124
+ "semantics.landmarks"
125
+ ],
126
+ "resolution_state": "needs_input",
123
127
  "trigger_state": "unobserved",
124
- "resolution_state": "needs_input"
125
- },
126
- {
127
- "id": "applicability.non-text-content",
128
128
  "when": {
129
129
  "equals": {
130
- "fact": "content.has_non_text",
130
+ "fact": "artifact.page_context",
131
131
  "value": true
132
132
  }
133
- },
134
- "outcomes": [
135
- "pattern.image"
136
- ],
133
+ }
134
+ },
135
+ {
137
136
  "evidence": [
138
137
  "axe",
139
138
  "human"
140
139
  ],
140
+ "id": "applicability.non-text-content",
141
141
  "order": 1,
142
+ "outcomes": [
143
+ "pattern.image"
144
+ ],
145
+ "resolution_state": "needs_input",
142
146
  "trigger_state": "unobserved",
143
- "resolution_state": "needs_input"
144
- },
145
- {
146
- "id": "applicability.media",
147
147
  "when": {
148
148
  "equals": {
149
- "fact": "content.has_media",
149
+ "fact": "content.has_non_text",
150
150
  "value": true
151
151
  }
152
- },
153
- "outcomes": [
154
- "pattern.media-player"
155
- ],
152
+ }
153
+ },
154
+ {
156
155
  "evidence": [
157
156
  "e2e",
158
157
  "human"
159
158
  ],
159
+ "id": "applicability.media",
160
160
  "order": 2,
161
+ "outcomes": [
162
+ "pattern.media-player"
163
+ ],
164
+ "resolution_state": "needs_input",
161
165
  "trigger_state": "unobserved",
162
- "resolution_state": "needs_input"
163
- },
164
- {
165
- "id": "applicability.forms",
166
166
  "when": {
167
167
  "equals": {
168
- "fact": "component.has_form_fields",
168
+ "fact": "content.has_media",
169
169
  "value": true
170
170
  }
171
- },
172
- "outcomes": [
173
- "pattern.field"
174
- ],
171
+ }
172
+ },
173
+ {
175
174
  "evidence": [
176
175
  "unit",
177
176
  "axe"
178
177
  ],
178
+ "id": "applicability.forms",
179
179
  "order": 3,
180
+ "outcomes": [
181
+ "pattern.field"
182
+ ],
183
+ "resolution_state": "needs_input",
180
184
  "trigger_state": "unobserved",
181
- "resolution_state": "needs_input"
182
- },
183
- {
184
- "id": "applicability.validation",
185
185
  "when": {
186
186
  "equals": {
187
- "fact": "component.has_validation",
187
+ "fact": "component.has_form_fields",
188
188
  "value": true
189
189
  }
190
- },
191
- "outcomes": [
192
- "pattern.validation"
193
- ],
190
+ }
191
+ },
192
+ {
194
193
  "evidence": [
195
194
  "unit",
196
195
  "axe",
197
196
  "e2e",
198
197
  "human"
199
198
  ],
199
+ "id": "applicability.validation",
200
200
  "order": 4,
201
+ "outcomes": [
202
+ "pattern.validation"
203
+ ],
204
+ "resolution_state": "needs_input",
201
205
  "trigger_state": "unobserved",
202
- "resolution_state": "needs_input"
206
+ "when": {
207
+ "equals": {
208
+ "fact": "component.has_validation",
209
+ "value": true
210
+ }
211
+ }
203
212
  },
204
213
  {
214
+ "evidence": [
215
+ "e2e",
216
+ "human"
217
+ ],
205
218
  "id": "applicability.consequential-submission",
219
+ "order": 5,
220
+ "outcomes": [
221
+ "pattern.consequential-submission"
222
+ ],
223
+ "resolution_state": "needs_input",
224
+ "trigger_state": "unobserved",
206
225
  "when": {
207
226
  "contains": {
208
227
  "fact": "component.submission_consequence",
209
228
  "value": "consequential"
210
229
  }
211
- },
212
- "outcomes": [
213
- "pattern.consequential-submission"
214
- ],
230
+ }
231
+ },
232
+ {
215
233
  "evidence": [
234
+ "unit",
216
235
  "e2e",
217
236
  "human"
218
237
  ],
219
- "order": 5,
220
- "trigger_state": "unobserved",
221
- "resolution_state": "needs_input"
222
- },
223
- {
224
238
  "id": "applicability.dynamic-status",
239
+ "order": 6,
240
+ "outcomes": [
241
+ "pattern.dynamic-status"
242
+ ],
243
+ "resolution_state": "needs_input",
244
+ "trigger_state": "unobserved",
225
245
  "when": {
226
246
  "equals": {
227
247
  "fact": "component.has_dynamic_status",
228
248
  "value": true
229
249
  }
230
- },
231
- "outcomes": [
232
- "pattern.dynamic-status"
233
- ],
234
- "evidence": [
235
- "unit",
236
- "e2e",
237
- "human"
238
- ],
239
- "order": 6,
240
- "trigger_state": "unobserved",
241
- "resolution_state": "needs_input"
250
+ }
242
251
  },
243
252
  {
253
+ "evidence": [
254
+ "e2e"
255
+ ],
244
256
  "id": "applicability.overlays",
257
+ "order": 7,
258
+ "outcomes": [
259
+ "semantics.keyboard.escape",
260
+ "semantics.focus.return"
261
+ ],
262
+ "resolution_state": "needs_input",
263
+ "trigger_state": "unobserved",
245
264
  "when": {
246
265
  "any": [
247
266
  {
@@ -263,249 +282,187 @@
263
282
  }
264
283
  }
265
284
  ]
266
- },
267
- "outcomes": [
268
- "semantics.keyboard.escape",
269
- "semantics.focus.return"
270
- ],
271
- "evidence": [
272
- "e2e"
273
- ],
274
- "order": 7,
275
- "trigger_state": "unobserved",
276
- "resolution_state": "needs_input"
285
+ }
277
286
  },
278
287
  {
279
- "id": "applicability.motion-timing",
280
- "when": {
281
- "equals": {
282
- "fact": "interaction.has_motion_or_timing",
283
- "value": true
284
- }
285
- },
286
- "outcomes": [
287
- "semantics.motion-control"
288
- ],
289
288
  "evidence": [
290
289
  "e2e",
291
290
  "human"
292
291
  ],
292
+ "id": "applicability.motion-timing",
293
293
  "order": 8,
294
+ "outcomes": [
295
+ "semantics.motion-control"
296
+ ],
297
+ "resolution_state": "needs_input",
294
298
  "trigger_state": "unobserved",
295
- "resolution_state": "needs_input"
296
- },
297
- {
298
- "id": "applicability.complex-pointer",
299
299
  "when": {
300
300
  "equals": {
301
- "fact": "interaction.has_complex_pointer",
301
+ "fact": "interaction.has_motion_or_timing",
302
302
  "value": true
303
303
  }
304
- },
305
- "outcomes": [
306
- "semantics.keyboard"
307
- ],
304
+ }
305
+ },
306
+ {
308
307
  "evidence": [
309
308
  "e2e",
310
309
  "human"
311
310
  ],
311
+ "id": "applicability.complex-pointer",
312
312
  "order": 9,
313
+ "outcomes": [
314
+ "semantics.keyboard"
315
+ ],
316
+ "resolution_state": "needs_input",
313
317
  "trigger_state": "unobserved",
314
- "resolution_state": "needs_input"
315
- },
316
- {
317
- "id": "applicability.character-shortcuts",
318
318
  "when": {
319
319
  "equals": {
320
- "fact": "interaction.has_character_shortcuts",
320
+ "fact": "interaction.has_complex_pointer",
321
321
  "value": true
322
322
  }
323
- },
324
- "outcomes": [
325
- "semantics.keyboard"
326
- ],
323
+ }
324
+ },
325
+ {
327
326
  "evidence": [
328
- "unit",
329
- "e2e"
327
+ "e2e",
328
+ "human"
330
329
  ],
330
+ "id": "applicability.dragging-alternative",
331
331
  "order": 10,
332
+ "outcomes": [
333
+ "semantics.dragging-alternative"
334
+ ],
335
+ "resolution_state": "needs_input",
332
336
  "trigger_state": "unobserved",
333
- "resolution_state": "needs_input"
334
- },
335
- {
336
- "id": "applicability.orientation-sensory",
337
337
  "when": {
338
338
  "equals": {
339
- "fact": "content.uses_orientation_or_sensory_cues",
339
+ "fact": "interaction.has_dragging",
340
340
  "value": true
341
341
  }
342
- },
343
- "outcomes": [
344
- "semantics.name-role-value"
345
- ],
342
+ }
343
+ },
344
+ {
346
345
  "evidence": [
346
+ "e2e",
347
347
  "human"
348
348
  ],
349
+ "id": "applicability.target-size",
349
350
  "order": 11,
351
+ "outcomes": [
352
+ "semantics.target-size"
353
+ ],
354
+ "resolution_state": "needs_input",
350
355
  "trigger_state": "unobserved",
351
- "resolution_state": "needs_input"
352
- },
353
- {
354
- "id": "applicability.target-size",
355
356
  "when": {
356
357
  "equals": {
357
358
  "fact": "interaction.has_pointer_targets",
358
359
  "value": true
359
360
  }
360
- },
361
- "outcomes": [
362
- "semantics.target-size"
363
- ],
361
+ }
362
+ },
363
+ {
364
364
  "evidence": [
365
365
  "e2e",
366
366
  "human"
367
367
  ],
368
+ "id": "applicability.focus-obstruction",
368
369
  "order": 12,
370
+ "outcomes": [
371
+ "semantics.focus.visible"
372
+ ],
373
+ "resolution_state": "needs_input",
369
374
  "trigger_state": "unobserved",
370
- "resolution_state": "needs_input"
371
- },
372
- {
373
- "id": "applicability.focus-obstruction",
374
375
  "when": {
375
376
  "equals": {
376
377
  "fact": "interaction.can_obscure_focus",
377
378
  "value": true
378
379
  }
379
- },
380
- "outcomes": [
381
- "semantics.focus.visible"
382
- ],
380
+ }
381
+ },
382
+ {
383
383
  "evidence": [
384
384
  "e2e",
385
385
  "human"
386
386
  ],
387
+ "id": "applicability.accessible-authentication",
387
388
  "order": 13,
389
+ "outcomes": [
390
+ "semantics.accessible-authentication"
391
+ ],
392
+ "resolution_state": "needs_input",
388
393
  "trigger_state": "unobserved",
389
- "resolution_state": "needs_input"
390
- },
391
- {
392
- "id": "applicability.authentication-captcha",
393
394
  "when": {
394
395
  "equals": {
395
396
  "fact": "flow.has_authentication",
396
397
  "value": true
397
398
  }
398
- },
399
- "outcomes": [
400
- "semantics.form-label",
401
- "semantics.form-error"
402
- ],
399
+ }
400
+ },
401
+ {
403
402
  "evidence": [
404
- "axe",
405
403
  "e2e",
406
404
  "human"
407
405
  ],
406
+ "id": "applicability.redundant-entry",
408
407
  "order": 14,
408
+ "outcomes": [
409
+ "semantics.form-label",
410
+ "semantics.redundant-entry"
411
+ ],
412
+ "resolution_state": "needs_input",
409
413
  "trigger_state": "unobserved",
410
- "resolution_state": "needs_input"
411
- },
412
- {
413
- "id": "applicability.redundant-entry",
414
414
  "when": {
415
415
  "equals": {
416
416
  "fact": "flow.repeats_entry",
417
417
  "value": true
418
418
  }
419
- },
420
- "outcomes": [
421
- "semantics.form-label"
422
- ],
419
+ }
420
+ },
421
+ {
423
422
  "evidence": [
424
423
  "e2e",
425
424
  "human"
426
425
  ],
426
+ "id": "applicability.consistent-help",
427
427
  "order": 15,
428
+ "outcomes": [
429
+ "semantics.consistent-help"
430
+ ],
431
+ "resolution_state": "needs_input",
428
432
  "trigger_state": "unobserved",
429
- "resolution_state": "needs_input"
430
- },
431
- {
432
- "id": "applicability.consistent-help",
433
433
  "when": {
434
434
  "equals": {
435
- "fact": "artifact.has_help",
435
+ "fact": "artifact.has_repeated_help_across_page_set",
436
436
  "value": true
437
437
  }
438
- },
439
- "outcomes": [
440
- "semantics.landmarks"
441
- ],
438
+ }
439
+ },
440
+ {
442
441
  "evidence": [
442
+ "axe",
443
+ "e2e",
443
444
  "human"
444
445
  ],
446
+ "id": "applicability.data-table",
445
447
  "order": 16,
446
- "trigger_state": "unobserved",
447
- "resolution_state": "needs_input"
448
- },
449
- {
450
- "id": "applicability.locale-bidi",
451
- "when": {
452
- "equals": {
453
- "fact": "content.has_locale_or_bidi",
454
- "value": true
455
- }
456
- },
457
448
  "outcomes": [
458
- "semantics.native-elements"
459
- ],
460
- "evidence": [
461
- "unit",
462
- "human"
449
+ "semantics.data-table"
463
450
  ],
464
- "order": 17,
451
+ "resolution_state": "needs_input",
465
452
  "trigger_state": "unobserved",
466
- "resolution_state": "needs_input"
467
- },
468
- {
469
- "id": "applicability.data-table-grid",
470
453
  "when": {
471
454
  "equals": {
472
- "fact": "component.has_data_table_or_grid",
455
+ "fact": "component.has_data_table",
473
456
  "value": true
474
457
  }
475
- },
476
- "outcomes": [
477
- "semantics.data-table"
478
- ],
479
- "evidence": [
480
- "axe",
481
- "e2e",
482
- "human"
483
- ],
484
- "order": 18,
485
- "trigger_state": "unobserved",
486
- "resolution_state": "needs_input"
458
+ }
487
459
  }
488
460
  ],
489
- "evidence": {
490
- "version": 1,
491
- "proof_kinds": {
492
- "unit": {
493
- "purpose": "semantic state and deterministic resolver behavior",
494
- "required_capability": "unit"
495
- },
496
- "axe": {
497
- "purpose": "automated rule evidence",
498
- "required_capability": "axe"
499
- },
500
- "e2e": {
501
- "purpose": "keyboard, focus, and integrated behavior",
502
- "required_capability": "e2e"
503
- },
504
- "human": {
505
- "purpose": "judgment, assistive technology, content, and visual evidence",
506
- "required_capability": "human"
507
- }
508
- },
509
- "rule": "Tool availability changes the evidence route, never requirement applicability. A missing required capability is a blocker."
510
- }
461
+ "schema_version": 3,
462
+ "trigger_states": [
463
+ "unobserved",
464
+ "not_applicable",
465
+ "candidate",
466
+ "applicable"
467
+ ]
511
468
  }