@andespindola/crow-skills 0.24.0 → 0.25.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 (78) hide show
  1. package/LICENSE +32 -4
  2. package/THIRD-PARTY-NOTICES.md +43 -0
  3. package/catalog.json +147 -37
  4. package/crow_skills/__init__.py +1 -1
  5. package/crow_skills/autoupdate.py +6 -1
  6. package/crow_skills/cli.py +15 -2
  7. package/docs/cli.md +2 -0
  8. package/package.json +2 -1
  9. package/release.json +195 -50
  10. package/skills/crow-accessibility/SKILL.md +7 -5
  11. package/skills/crow-accessibility/references/verificacao.md +102 -0
  12. package/skills/crow-agent-security/SKILL.md +8 -4
  13. package/skills/crow-agent-security/references/limites-agente.md +17 -0
  14. package/skills/crow-api-test/SKILL.md +2 -0
  15. package/skills/crow-api-test/references/casos-negativos.md +16 -0
  16. package/skills/crow-architecture/SKILL.md +2 -0
  17. package/skills/crow-architecture/references/modulos-profundos.md +18 -0
  18. package/skills/crow-backend/SKILL.md +3 -1
  19. package/skills/crow-backend/references/servico-backend.md +13 -0
  20. package/skills/crow-be-human/SKILL.md +2 -1
  21. package/skills/crow-be-human/references/voz-e-registro.md +35 -0
  22. package/skills/crow-behaviour/SKILL.md +7 -0
  23. package/skills/crow-behaviour/references/briefing-executavel.md +65 -0
  24. package/skills/crow-behaviour/references/ciclo-de-revisao.md +104 -0
  25. package/skills/crow-behaviour/references/progress-ledger.md +3 -1
  26. package/skills/crow-browser/SKILL.md +6 -3
  27. package/skills/crow-browser/references/mecanismo-de-browser.md +24 -0
  28. package/skills/crow-browser/references/pagina.md +43 -0
  29. package/skills/crow-debug/SKILL.md +1 -1
  30. package/skills/crow-design/SKILL.md +6 -6
  31. package/skills/crow-design/references/contrato.md +84 -0
  32. package/skills/crow-discovery/SKILL.md +5 -4
  33. package/skills/crow-discovery/references/pesquisa-sem-vies.md +33 -0
  34. package/skills/crow-documents/SKILL.md +9 -3
  35. package/skills/crow-documents/references/ooxml.md +43 -0
  36. package/skills/crow-documents/references/pdf.md +31 -0
  37. package/skills/crow-documents/references/planilha.md +35 -0
  38. package/skills/crow-domain/SKILL.md +2 -0
  39. package/skills/crow-domain/references/invariante-e-identidade.md +11 -0
  40. package/skills/crow-frontend/SKILL.md +6 -5
  41. package/skills/crow-growth/SKILL.md +2 -1
  42. package/skills/crow-growth/references/experimento-e-metrica.md +39 -0
  43. package/skills/crow-infra/SKILL.md +6 -5
  44. package/skills/crow-infra/references/kubernetes.md +6 -0
  45. package/skills/crow-interface/SKILL.md +1 -1
  46. package/skills/crow-interface/reference/adapt.md +8 -0
  47. package/skills/crow-interface/reference/layout.md +4 -1
  48. package/skills/crow-interface/reference/workflow.md +2 -0
  49. package/skills/crow-media/SKILL.md +5 -5
  50. package/skills/crow-media/references/producao.md +63 -0
  51. package/skills/crow-native-mobile/SKILL.md +1 -1
  52. package/skills/crow-observe/SKILL.md +8 -4
  53. package/skills/crow-observe/references/cardinalidade.md +11 -0
  54. package/skills/crow-performance/SKILL.md +5 -5
  55. package/skills/crow-performance/references/measurement.md +6 -0
  56. package/skills/crow-platform/SKILL.md +4 -4
  57. package/skills/crow-postgres/SKILL.md +3 -0
  58. package/skills/crow-postgres/references/migracao-online.md +17 -0
  59. package/skills/crow-product-leadership/SKILL.md +4 -3
  60. package/skills/crow-product-leadership/references/decisao-e-pessoas.md +35 -0
  61. package/skills/crow-qa/SKILL.md +1 -1
  62. package/skills/crow-release/SKILL.md +10 -5
  63. package/skills/crow-release/references/transicao.md +13 -0
  64. package/skills/crow-reverse/SKILL.md +1 -1
  65. package/skills/crow-secrets/SKILL.md +2 -2
  66. package/skills/crow-security-review/SKILL.md +12 -5
  67. package/skills/crow-security-scan/SKILL.md +8 -3
  68. package/skills/crow-security-scan/references/evidencia-scan.md +17 -0
  69. package/skills/crow-security-test/SKILL.md +5 -1
  70. package/skills/crow-security-test/references/prova-dinamica.md +24 -0
  71. package/skills/crow-seo/SKILL.md +6 -4
  72. package/skills/crow-seo/references/saida-tecnica.md +78 -0
  73. package/skills/crow-skill-author/SKILL.md +10 -6
  74. package/skills/crow-skill-author/references/medicao.md +85 -0
  75. package/skills/crow-spec/SKILL.md +4 -3
  76. package/skills/crow-spec/references/criterio-e-fatia.md +27 -0
  77. package/skills/crow-threat-model/SKILL.md +5 -1
  78. package/skills/crow-threat-model/references/ciclo-ameaca.md +15 -0
package/release.json CHANGED
@@ -3,13 +3,18 @@
3
3
  "LICENSE": {
4
4
  "executable": false,
5
5
  "kind": "file",
6
- "sha256": "a771a0bbdc03e81e968aa49f1b5049b08782440349f1d5177e3aec54a677dffc"
6
+ "sha256": "d53e243d3496b8e54c5905a75a6b9015631a335905dd57fdd56ba4478f635c57"
7
7
  },
8
8
  "README.md": {
9
9
  "executable": false,
10
10
  "kind": "file",
11
11
  "sha256": "dffd92778b157b4d47d66b43c629262f433289259ff74d0f6e516121a2716a0a"
12
12
  },
13
+ "THIRD-PARTY-NOTICES.md": {
14
+ "executable": false,
15
+ "kind": "file",
16
+ "sha256": "83650f0045132c721b28c8c18dfea96b2b19457c2840303092bcba105777890e"
17
+ },
13
18
  "bin/npm-crow-skills.cjs": {
14
19
  "executable": true,
15
20
  "kind": "file",
@@ -18,12 +23,12 @@
18
23
  "catalog.json": {
19
24
  "executable": false,
20
25
  "kind": "file",
21
- "sha256": "03fea3339322eafb1cb62c2eafc28b963e0a3e66900d1fb6f9b111524085df0d"
26
+ "sha256": "d77a2eb80f172b0a595445ce07b00370941b0e654330038f536de265bbe8539c"
22
27
  },
23
28
  "crow_skills/__init__.py": {
24
29
  "executable": false,
25
30
  "kind": "file",
26
- "sha256": "ce4163aac4cba304adfe6f977fdbfc25ac53958da94df36b5f7657710cb1f2ca"
31
+ "sha256": "4ed6a1ce960058eaeead6b4b4b91796ef6f575864bda8a280c569e383888253f"
27
32
  },
28
33
  "crow_skills/__main__.py": {
29
34
  "executable": false,
@@ -38,7 +43,7 @@
38
43
  "crow_skills/autoupdate.py": {
39
44
  "executable": false,
40
45
  "kind": "file",
41
- "sha256": "c192495c895a95b957cad04c2d7fc058aa86cd67e76077200fa202d7c96fb039"
46
+ "sha256": "04dde8bc39c1f5671c3a3aed4ff3eed718776efb8e7fc5da6344d79235ce1a60"
42
47
  },
43
48
  "crow_skills/broadcast.py": {
44
49
  "executable": false,
@@ -48,7 +53,7 @@
48
53
  "crow_skills/cli.py": {
49
54
  "executable": false,
50
55
  "kind": "file",
51
- "sha256": "979e003dfb16e090279d223288d9a01e0958c02adf5bfb2059003d781f23d366"
56
+ "sha256": "a2ca69276fb427941917a39fcb6285691d9adc75dc2b73df5cea98e80dc4b9f9"
52
57
  },
53
58
  "crow_skills/events.py": {
54
59
  "executable": false,
@@ -128,58 +133,98 @@
128
133
  "docs/cli.md": {
129
134
  "executable": false,
130
135
  "kind": "file",
131
- "sha256": "799c9659309c10ec653f1837836c941e13b66e124b1258aefac5e372954f0b71"
136
+ "sha256": "f89e5334472b72754c5f2cfae34323bbfb930fb73dba30f45444d830990c5b51"
132
137
  },
133
138
  "package.json": {
134
139
  "executable": false,
135
140
  "kind": "file",
136
- "sha256": "f8b9cbcc7aba2205f332cb2edb88a5f701115edccad84181ee248bbf0cc8972e"
141
+ "sha256": "29c53f265ba269cd9c79f71e8c86e76e8e946f57e174703abe93f5b1afa295cd"
137
142
  },
138
143
  "skills/crow-accessibility/SKILL.md": {
139
144
  "executable": false,
140
145
  "kind": "file",
141
- "sha256": "7ee1abafa6a1a2497fcd3b274d2eeda8edea77dcc7c46b87ffa80cc2c98260dc"
146
+ "sha256": "88daadc30698594152f8b359bccc0a475583386b7361b3c22643f755f59fd664"
147
+ },
148
+ "skills/crow-accessibility/references/verificacao.md": {
149
+ "executable": false,
150
+ "kind": "file",
151
+ "sha256": "6d132bf506a7d540ebe049481bd7c97fb6aec89b436366bf46fa6aa4e2642023"
142
152
  },
143
153
  "skills/crow-agent-security/SKILL.md": {
144
154
  "executable": false,
145
155
  "kind": "file",
146
- "sha256": "d056626b72667d0e87143b7745125a476dc0797b1629ab8eec32b08b84e24dd3"
156
+ "sha256": "4f3e4dfc3cc3301f6c6152fe24fcb07f6c15feb8fa52f20593930d8112ee045a"
157
+ },
158
+ "skills/crow-agent-security/references/limites-agente.md": {
159
+ "executable": false,
160
+ "kind": "file",
161
+ "sha256": "b10ab668a871edcf332e482828c9ab621e548acda7f58ab5d313086ed8dba4ef"
147
162
  },
148
163
  "skills/crow-api-test/SKILL.md": {
149
164
  "executable": false,
150
165
  "kind": "file",
151
- "sha256": "ae7dcf7e8e1942f2d68607a0ab8c2243bf0458141b3bd89b6e04a370f4981e39"
166
+ "sha256": "7f0d9e20e95c6341bd2d1a158e47b9df57184440951f2d49a2ff4eec5a94ffb1"
167
+ },
168
+ "skills/crow-api-test/references/casos-negativos.md": {
169
+ "executable": false,
170
+ "kind": "file",
171
+ "sha256": "743231b62af6ac6fe6267a5d1f9fac968d5b165065b66d568bbf67b2bb7538e5"
152
172
  },
153
173
  "skills/crow-architecture/SKILL.md": {
154
174
  "executable": false,
155
175
  "kind": "file",
156
- "sha256": "f4964ecb4750397791d9c9a9c0b5733d01b4ccd3bfc9d888ee762686c8633908"
176
+ "sha256": "f752b91bed17bac47d5612783328f5eb1587b14444d2a887601a66124b9f7368"
177
+ },
178
+ "skills/crow-architecture/references/modulos-profundos.md": {
179
+ "executable": false,
180
+ "kind": "file",
181
+ "sha256": "8be93fad1d94158c9d42c81d92fdc28ebde043baa837905c953ae671994e85b3"
157
182
  },
158
183
  "skills/crow-backend/SKILL.md": {
159
184
  "executable": false,
160
185
  "kind": "file",
161
- "sha256": "11b5bb19149ba004bcdc814c87472a61a63537ceca16a7ff22edb6309d3b0b76"
186
+ "sha256": "fb980c8a7102aff088ee7b3ba2cd683db268134b4b8afefcfd8efd5340d8f259"
187
+ },
188
+ "skills/crow-backend/references/servico-backend.md": {
189
+ "executable": false,
190
+ "kind": "file",
191
+ "sha256": "8caf78096fac41f9bbf7d3e9b88c9afeb8c9c0dd19d0409a86fc2bfd616df87b"
162
192
  },
163
193
  "skills/crow-be-human/SKILL.md": {
164
194
  "executable": false,
165
195
  "kind": "file",
166
- "sha256": "b9446368e320724012589ef7364254b18fd6270cf7ea8da199cd56f131462029"
196
+ "sha256": "75ba3d42bf61ca42316a6fce0acb824c51199c2f0cd5be34f3589e19d601ac9a"
197
+ },
198
+ "skills/crow-be-human/references/voz-e-registro.md": {
199
+ "executable": false,
200
+ "kind": "file",
201
+ "sha256": "16f1b23032935a58643d8000cd2007594870b5b0ab6a877ee600bd7db0095c9b"
167
202
  },
168
203
  "skills/crow-behaviour/SKILL.md": {
169
204
  "executable": false,
170
205
  "kind": "file",
171
- "sha256": "3e6364f549eeb2103abf87a57b3e782f1bc938f626efd2c9a4726ed8d256177c"
206
+ "sha256": "409c0f5cc0f6110ee1dabea3b1aa748b026644ecc1a6034747c9febddb0a1278"
172
207
  },
173
208
  "skills/crow-behaviour/agents/openai.yaml": {
174
209
  "executable": false,
175
210
  "kind": "file",
176
211
  "sha256": "f3fbfed84a4f635a1185fc42ab1204bf2100499b811a7d138d25077b7fab12f2"
177
212
  },
213
+ "skills/crow-behaviour/references/briefing-executavel.md": {
214
+ "executable": false,
215
+ "kind": "file",
216
+ "sha256": "94fcffbd3e9dd2f2e93bb5f17bbfe3d6aa6a101429cb215652d92bd0c6c5c76d"
217
+ },
178
218
  "skills/crow-behaviour/references/broadcast.md": {
179
219
  "executable": false,
180
220
  "kind": "file",
181
221
  "sha256": "9ab49014b0e6a8276401d4d09a0b2554414db75bfdfe0e59b5f3a06899ab825e"
182
222
  },
223
+ "skills/crow-behaviour/references/ciclo-de-revisao.md": {
224
+ "executable": false,
225
+ "kind": "file",
226
+ "sha256": "14c03fd45b8378db98d838439ad671939ba912a36cd38f2f0ecfd752b657ae90"
227
+ },
183
228
  "skills/crow-behaviour/references/context-economy.md": {
184
229
  "executable": false,
185
230
  "kind": "file",
@@ -208,7 +253,7 @@
208
253
  "skills/crow-behaviour/references/progress-ledger.md": {
209
254
  "executable": false,
210
255
  "kind": "file",
211
- "sha256": "72044f37c557409ddccb4d7faa66a79aa090f36ba0e0372ed61d075ae03ebf6f"
256
+ "sha256": "ac95e67cd4364201759672de12bbaefca97a8ccfcedce7639816756ce08d0e12"
212
257
  },
213
258
  "skills/crow-behaviour/references/quality-patterns.md": {
214
259
  "executable": false,
@@ -253,52 +298,97 @@
253
298
  "skills/crow-browser/SKILL.md": {
254
299
  "executable": false,
255
300
  "kind": "file",
256
- "sha256": "b17d15517daf5354af75dd745052fa2c70415a2a15664d3ceadb44ef96a6c560"
301
+ "sha256": "015e3c3aee038a566bb415a7b0e96bada0edc9027dd304ad7a4b283cd37f3f90"
302
+ },
303
+ "skills/crow-browser/references/mecanismo-de-browser.md": {
304
+ "executable": false,
305
+ "kind": "file",
306
+ "sha256": "f4fce8614532db339ee0bccb3268f60939de215e4917bc4ce14c0231cff7c629"
307
+ },
308
+ "skills/crow-browser/references/pagina.md": {
309
+ "executable": false,
310
+ "kind": "file",
311
+ "sha256": "9593d96d8eed195e1afd9f92e6d234750223e760670325776d42724b810b92ce"
257
312
  },
258
313
  "skills/crow-debug/SKILL.md": {
259
314
  "executable": false,
260
315
  "kind": "file",
261
- "sha256": "1771fb0ec61277a8883a715bea612fb3cb8facfadbd629f234209386be928fa8"
316
+ "sha256": "4b13c8c4eafcd5ecd7285fbb974e1ef74f3e7708632ff068f068b085ddaa5b3c"
262
317
  },
263
318
  "skills/crow-design/SKILL.md": {
264
319
  "executable": false,
265
320
  "kind": "file",
266
- "sha256": "266bdb9c7c19aba8ac8a42eb983bc052f8ac88246643664ecd83189259a9a8e0"
321
+ "sha256": "f797d9e4261972d33d2f0a846a7b8762af0f3caab68bcb6eace7567fec9ba322"
322
+ },
323
+ "skills/crow-design/references/contrato.md": {
324
+ "executable": false,
325
+ "kind": "file",
326
+ "sha256": "e63d4a04ecb39be3ea0c066ef796dee0a53988df116b391337a43872f43d11b7"
267
327
  },
268
328
  "skills/crow-discovery/SKILL.md": {
269
329
  "executable": false,
270
330
  "kind": "file",
271
- "sha256": "03152f289712398b2ce9e3734c179834ee2df92a8932a017d5b25dba88094323"
331
+ "sha256": "df190b5926022d1ff09030d99f152dd9136231a6d01e168997d03759afaba5e8"
332
+ },
333
+ "skills/crow-discovery/references/pesquisa-sem-vies.md": {
334
+ "executable": false,
335
+ "kind": "file",
336
+ "sha256": "52f1fa9289437c0d764f52810ddd0af94f60ad4ee56dbf9a81f5e06ff7e71ddf"
272
337
  },
273
338
  "skills/crow-documents/SKILL.md": {
274
339
  "executable": false,
275
340
  "kind": "file",
276
- "sha256": "9d8c68575b67d0aef9bdc4f09f32e6f2080a823799cc8113cf0146d1c0c58386"
341
+ "sha256": "88571e140a6092aa7850a834449c395df54d2b8f74e49df93851145eb0aca4ac"
342
+ },
343
+ "skills/crow-documents/references/ooxml.md": {
344
+ "executable": false,
345
+ "kind": "file",
346
+ "sha256": "9809e0db3308fa3df4e2d2ce23f4853e34d85fbe66b8a2ef6178d3d7024496cb"
347
+ },
348
+ "skills/crow-documents/references/pdf.md": {
349
+ "executable": false,
350
+ "kind": "file",
351
+ "sha256": "ceca8bfaecf243e474e35d1a6e22bc1e7e77faf5bf421d21fcc4e55aa3b3425f"
352
+ },
353
+ "skills/crow-documents/references/planilha.md": {
354
+ "executable": false,
355
+ "kind": "file",
356
+ "sha256": "0b0bac1dc085ff9fd0091ae8d350d22435cc5a1c4cd39f7bdf619761396c9fc5"
277
357
  },
278
358
  "skills/crow-domain/SKILL.md": {
279
359
  "executable": false,
280
360
  "kind": "file",
281
- "sha256": "bfb7c6eb9cee6c198aaab5eac09924d4f32917483b00454d5ce932c02ac394ef"
361
+ "sha256": "453dac91f72a347dd4c1065d897a8a8cfb59a694ffa730f0850df98c1217b4bb"
362
+ },
363
+ "skills/crow-domain/references/invariante-e-identidade.md": {
364
+ "executable": false,
365
+ "kind": "file",
366
+ "sha256": "c6ddc2680b02abc8d01a6129e377f47a87544d5d8bb9d3ccf5c5cbef9ae82ee7"
282
367
  },
283
368
  "skills/crow-frontend/SKILL.md": {
284
369
  "executable": false,
285
370
  "kind": "file",
286
- "sha256": "47df5becccac292dc2030a7eb0511af7a795a18d46b1fe387e4f82eeba141a9b"
371
+ "sha256": "704ac31dd13268cc81770332325a0d11d91160193b6cb90d77b899fd2752d5a1"
287
372
  },
288
373
  "skills/crow-growth/SKILL.md": {
289
374
  "executable": false,
290
375
  "kind": "file",
291
- "sha256": "fb3020d4478fc332c9a138dde16f1328f49727c17de912cd426d3c1f342236b7"
376
+ "sha256": "3a81a60a236f8e8de28f261d4c5ef0316284db4402a2a9af3cc8f294e611a13a"
377
+ },
378
+ "skills/crow-growth/references/experimento-e-metrica.md": {
379
+ "executable": false,
380
+ "kind": "file",
381
+ "sha256": "85d722b0de16ebe27f06d9f4bcec71282dcd4f4d0f69bb142f0fe675d237cef6"
292
382
  },
293
383
  "skills/crow-infra/SKILL.md": {
294
384
  "executable": false,
295
385
  "kind": "file",
296
- "sha256": "cd0e1f558a9c7ef43964d3047abf06857d01a9476ba776732427f15a940e752d"
386
+ "sha256": "61c50a083f2d19f9f31d5e05b9bd2b3beed020d310f4e0a0a72d631829a2fcf9"
297
387
  },
298
388
  "skills/crow-infra/references/kubernetes.md": {
299
389
  "executable": false,
300
390
  "kind": "file",
301
- "sha256": "325ec470051477ba2c39dc94f9c95fa72f02487a7ae78ef00afe28fa9c1f6b6b"
391
+ "sha256": "5c129081dddc45e7b8897dfd11347924c960cdf3e5a6fc23d62cc08c3a87fe1a"
302
392
  },
303
393
  "skills/crow-interface/NOTICE.md": {
304
394
  "executable": false,
@@ -308,7 +398,7 @@
308
398
  "skills/crow-interface/SKILL.md": {
309
399
  "executable": false,
310
400
  "kind": "file",
311
- "sha256": "a2e68ce5a102763dce58d8be110fce16a2d4f780d7f078d6e85dcd890c2c0ca5"
401
+ "sha256": "a8cc1215e71ec54557c281d0505b0c8d446caf34132ecff534b0bcade71dd746"
312
402
  },
313
403
  "skills/crow-interface/agents/impeccable_asset_producer.toml": {
314
404
  "executable": false,
@@ -358,7 +448,7 @@
358
448
  "skills/crow-interface/reference/adapt.md": {
359
449
  "executable": false,
360
450
  "kind": "file",
361
- "sha256": "260b8b8369b200b9e1362b95f66889e1ca862875e93b51915f13a725523a5f6d"
451
+ "sha256": "2a5dc7a331a1849fb365250d7add610ea69552ba10cb4234291fab70db9c9623"
362
452
  },
363
453
  "skills/crow-interface/reference/adapt.native.md": {
364
454
  "executable": false,
@@ -488,7 +578,7 @@
488
578
  "skills/crow-interface/reference/layout.md": {
489
579
  "executable": false,
490
580
  "kind": "file",
491
- "sha256": "4566c87f052bc1b15e1d31e2946e31c75f1a09ab300b70e88e4428a8cd791204"
581
+ "sha256": "70602cd28d01878d44384854e3b501891370ee1463d3c432d2ed1fde94e9e1af"
492
582
  },
493
583
  "skills/crow-interface/reference/live-setup.md": {
494
584
  "executable": false,
@@ -583,7 +673,7 @@
583
673
  "skills/crow-interface/reference/workflow.md": {
584
674
  "executable": false,
585
675
  "kind": "file",
586
- "sha256": "84e65ba2311141aa39dd00187ede4a65afc3fd365b9b35c5e773d8c4cde5c6b2"
676
+ "sha256": "940fc216b4d01b1732f7a77163e732cdabda71173cc91da7cddb13057b697fb9"
587
677
  },
588
678
  "skills/crow-interface/scripts/VERSION": {
589
679
  "executable": false,
@@ -648,100 +738,155 @@
648
738
  "skills/crow-media/SKILL.md": {
649
739
  "executable": false,
650
740
  "kind": "file",
651
- "sha256": "05fae21807c514a52a9c3770b7f03cd48536dd1bff348dd9c90af0cfbadda87e"
741
+ "sha256": "c69c7be1b72f61a989d4df8811f0e11a9e9f337b5f0ef8b075605ac53209390e"
742
+ },
743
+ "skills/crow-media/references/producao.md": {
744
+ "executable": false,
745
+ "kind": "file",
746
+ "sha256": "137046d78522469367087a26942cdbf401b46f08534a7c1d8194ef950cf9b043"
652
747
  },
653
748
  "skills/crow-native-mobile/SKILL.md": {
654
749
  "executable": false,
655
750
  "kind": "file",
656
- "sha256": "dfbb0702f976d846a9cd77e5e00da36a09cb62dcbc7016e13cebaec0a8bbf0d2"
751
+ "sha256": "1b16ab1b2b0dd3c55f362b8a487a247d0f497eb99a8929bcf3c7f2a74b2381b3"
657
752
  },
658
753
  "skills/crow-observe/SKILL.md": {
659
754
  "executable": false,
660
755
  "kind": "file",
661
- "sha256": "41ede8dd668e4b5bb650247c8b6b8ca185feb3c64c67d6efaabbf8e751d419c9"
756
+ "sha256": "65ea137a30830717d7da1bf90d765e04ba9ba5a4cae8da7a3a75cbfafc759b2c"
757
+ },
758
+ "skills/crow-observe/references/cardinalidade.md": {
759
+ "executable": false,
760
+ "kind": "file",
761
+ "sha256": "963d41d2b5594a009714927abc066aef02a41ef60f6a650c0cf00b637794fa88"
662
762
  },
663
763
  "skills/crow-performance/SKILL.md": {
664
764
  "executable": false,
665
765
  "kind": "file",
666
- "sha256": "cdd87b12f94e21743ce09287a9acaf164e9389a88b85719b7aa6dddde35b9f9b"
766
+ "sha256": "ea27aaae25867692bc3bb4584962ac5875e2786ab3c64b995b6d3fdd94d4b10f"
667
767
  },
668
768
  "skills/crow-performance/references/measurement.md": {
669
769
  "executable": false,
670
770
  "kind": "file",
671
- "sha256": "cbdcedff81b6571a851f5223bf72d641438fa304f3e57e5abd90a63f4ef591bd"
771
+ "sha256": "e7ba64bf33d6205810cc8b5ca98cd34aeb74eb40d11684f71b824528c9f82b31"
672
772
  },
673
773
  "skills/crow-platform/SKILL.md": {
674
774
  "executable": false,
675
775
  "kind": "file",
676
- "sha256": "0717f2385070ac4cca21522d484e8c7cad46aa4088ca4866b419213b7d6ba504"
776
+ "sha256": "6049676859084e1c4cae13f3ba022ca6d1610b97ad8bcb1a2aced2ebccd2589d"
677
777
  },
678
778
  "skills/crow-postgres/SKILL.md": {
679
779
  "executable": false,
680
780
  "kind": "file",
681
- "sha256": "2da3fee828019456d610967191025ebb793620ee19d59fb8aabf5da7b644fa51"
781
+ "sha256": "24de6515852537f4b7bfb66de5858d0091c950333006c931a9f03de458fec9ef"
782
+ },
783
+ "skills/crow-postgres/references/migracao-online.md": {
784
+ "executable": false,
785
+ "kind": "file",
786
+ "sha256": "26c1ee55f076283c729cf7ff45af9ca352b94bf80e3d90344243291ff40e6fb8"
682
787
  },
683
788
  "skills/crow-product-leadership/SKILL.md": {
684
789
  "executable": false,
685
790
  "kind": "file",
686
- "sha256": "1079a825e3f567e59dcc30aa6e58671edf1d5ae5f0858552fb4d5f2f02946377"
791
+ "sha256": "35a0e58785e06580d1093576b4c8eb11c19b3e347cba4e21953de14370027adf"
792
+ },
793
+ "skills/crow-product-leadership/references/decisao-e-pessoas.md": {
794
+ "executable": false,
795
+ "kind": "file",
796
+ "sha256": "3d4c39afab527b8ad92809e8b9f740731965d817be4bcc22ad3a4a2d6ef81c75"
687
797
  },
688
798
  "skills/crow-qa/SKILL.md": {
689
799
  "executable": false,
690
800
  "kind": "file",
691
- "sha256": "b05a0b76fcb0ceef0139de4eb33930114fe2621cf99c8bed352999c9963781cf"
801
+ "sha256": "e828c500dd0ec97f42733c405791db5c9be12ae30cb6a32c15d04e12c5561c7b"
692
802
  },
693
803
  "skills/crow-release/SKILL.md": {
694
804
  "executable": false,
695
805
  "kind": "file",
696
- "sha256": "c25e0f95052e7dfd7c935a9ae916016aeab217f978e9c46788a0da5ae257c12a"
806
+ "sha256": "94e3e5c71e10bd18cc00202254bb80902a1b71c92b49f2ff5efc6082a52e9322"
807
+ },
808
+ "skills/crow-release/references/transicao.md": {
809
+ "executable": false,
810
+ "kind": "file",
811
+ "sha256": "643e162ec8c1006bf0c4240f0c2a478ac7be1eb1354bacc82c9a947d7d5fb0b6"
697
812
  },
698
813
  "skills/crow-reverse/SKILL.md": {
699
814
  "executable": false,
700
815
  "kind": "file",
701
- "sha256": "5ba51998bdd49c85bfa202986d7af86229e2248914621d66f96e26e6c8954aca"
816
+ "sha256": "ee29145cc12b2c6a2289a557bad77d975284d3e6d8e5ded0f21be8398694ccad"
702
817
  },
703
818
  "skills/crow-secrets/SKILL.md": {
704
819
  "executable": false,
705
820
  "kind": "file",
706
- "sha256": "c2efb9a14b13ba2641a46aa79a7f3dc34833eacfb92c66dfb174fd5a863ce9a3"
821
+ "sha256": "cfe2299d6b7a51ce7c3b911acdc359a2015054b46b6878a1735fff7a511fa75f"
707
822
  },
708
823
  "skills/crow-security-review/SKILL.md": {
709
824
  "executable": false,
710
825
  "kind": "file",
711
- "sha256": "0c57aa14decd594cf4eab7785069d94d9ce7551d556605b5099e431e83f67056"
826
+ "sha256": "6414f0e358b454068174e170a3fe8dbbfd67f7a5e0941c61a53d29b3ac1eaf39"
712
827
  },
713
828
  "skills/crow-security-scan/SKILL.md": {
714
829
  "executable": false,
715
830
  "kind": "file",
716
- "sha256": "a7f369945417333026996663d4179e6a481a062fbe9782919536825dd467d961"
831
+ "sha256": "37b2512f6a523195eea4c093a9b8fd52e194f0c6e4c2daf9cb16d6fdd01e9793"
832
+ },
833
+ "skills/crow-security-scan/references/evidencia-scan.md": {
834
+ "executable": false,
835
+ "kind": "file",
836
+ "sha256": "233e7e8dc66efe9ffefbff2dd17ae88f21c080f183573306f9ff26fa43551be7"
717
837
  },
718
838
  "skills/crow-security-test/SKILL.md": {
719
839
  "executable": false,
720
840
  "kind": "file",
721
- "sha256": "aec41780e04836d48bddb317ca4c45d994a9c46952345a7306559b30633a2569"
841
+ "sha256": "43d62923931f6019348763fa779052e905a80b5e9b25120223540f7ec1815bfc"
842
+ },
843
+ "skills/crow-security-test/references/prova-dinamica.md": {
844
+ "executable": false,
845
+ "kind": "file",
846
+ "sha256": "f1e44ab2696a57bd478076c1f266592559d98b4c43e7b8382a77b7da98086fed"
722
847
  },
723
848
  "skills/crow-seo/SKILL.md": {
724
849
  "executable": false,
725
850
  "kind": "file",
726
- "sha256": "fb2d1528de5631bd5a72951e95c0e6841c870caede2137b6d74e944e428ec9f4"
851
+ "sha256": "1f66ea4da630f69e7e2a1c9a4fbcb6c5379f608fa0c39cbd2ddb08f69740b066"
852
+ },
853
+ "skills/crow-seo/references/saida-tecnica.md": {
854
+ "executable": false,
855
+ "kind": "file",
856
+ "sha256": "18edc4ef84c6eee327fa6b0e4cabe7b3a63c2819278a09738e89e97e9a91cd39"
727
857
  },
728
858
  "skills/crow-skill-author/SKILL.md": {
729
859
  "executable": false,
730
860
  "kind": "file",
731
- "sha256": "586c87a6a1285dd759f2f6b2e6486770ad2ea31e9eb0e85fda64ee171302bcbc"
861
+ "sha256": "49dddbbf7edf13463ada483b17b14eb1d18611ba65e993bee065341db45a472e"
862
+ },
863
+ "skills/crow-skill-author/references/medicao.md": {
864
+ "executable": false,
865
+ "kind": "file",
866
+ "sha256": "9d7c11f2d958f05b481910361702c24f33c5a98aeeaa130e6735e3c2007d84d0"
732
867
  },
733
868
  "skills/crow-spec/SKILL.md": {
734
869
  "executable": false,
735
870
  "kind": "file",
736
- "sha256": "f4d005517e997be9505df67527412f6b4f1805939c6a19621a045e05c4fc9143"
871
+ "sha256": "9e1d9ea9e91a2b7264ab37ebe3a755c29ef4490c886aebe7f84faed84c18ab02"
872
+ },
873
+ "skills/crow-spec/references/criterio-e-fatia.md": {
874
+ "executable": false,
875
+ "kind": "file",
876
+ "sha256": "ae9b5e342a5a582e972dde54b99f8b7931bf1538f84d1c6d3e0a8482f093d011"
737
877
  },
738
878
  "skills/crow-threat-model/SKILL.md": {
739
879
  "executable": false,
740
880
  "kind": "file",
741
- "sha256": "e37132ef8b060548191fbf14a5a18a9dd3acd84ea9a35e802174455b9e374d3d"
881
+ "sha256": "a4f012a1670ae3a87b736da13ecb8c4b0ca869ac6a69472bb49a6b6ae4610a82"
882
+ },
883
+ "skills/crow-threat-model/references/ciclo-ameaca.md": {
884
+ "executable": false,
885
+ "kind": "file",
886
+ "sha256": "caeb9192eb6a60bcb417089516374ef967977ab920bc8bf9f13ffa504b915fd0"
742
887
  }
743
888
  },
744
- "revision": "93dd577a9e05ba8c28deae81e70167a46838e755",
889
+ "revision": "b84300dc86153024e446c311d7ee5f3da58adbf1",
745
890
  "schema_version": 1,
746
- "version": "0.24.0"
891
+ "version": "0.25.0"
747
892
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: crow-accessibility
3
- description: "Valide e corrija semântica, teclado, foco, leitura assistiva e autenticação de uma interface real. Não certifica conformidade completa por scanner."
3
+ description: "Use quando a pergunta é se uma jornada real pode ser usada sem mouse, sem visão e sem memorização: semântica, teclado, foco, leitura assistiva, contraste medido, zoom e reflow, movimento e autenticação acessível. Entra depois de implementada, ou para julgar achado de varredura. Não certifica conformidade de nível por scanner, não substitui a verificação de comportamento de crow-qa e não é refinamento estético, que é de crow-interface."
4
4
  ---
5
5
 
6
6
  # Uso acessível da jornada
@@ -15,11 +15,13 @@ Se pedido, documentação ou requisitos se contradizem, nomeie o conflito com a
15
15
 
16
16
  ## Trabalho
17
17
 
18
- 1. Escolha os controles presentes e o caminho completo, incluindo erros e recuperação. Prefira semântica nativa antes de adicionar ARIA.
18
+ 1. Escolha os controles presentes e o caminho completo, incluindo erros e recuperação. Prefira semântica nativa antes de adicionar ARIA. Percorra os blocos pertinentes da [matriz de verificação](references/verificacao.md); bloco sem o widget correspondente entra como não aplicável, não como aprovado.
19
19
  2. Confira nome, role, estado, labels, mensagens, contraste, zoom/reflow e alvos de interação pertinentes. Registre o contraste numérico antes e depois de cada par alterado, com o limiar AA. `alt=""` decorativo, ícone com `aria-hidden` e label já associado não são defeito.
20
- 3. Percorra teclado: entrada/saída, ordem, foco visível (`:focus-visible`), modais e retorno do foco. Se a marca conflitar com o foco visível, mantenha o foco e registre a pendência para o dono. Fluxos de auth devem permitir paste/password manager e alternativas acessíveis.
21
- 4. Use scanner para estrutura e teste manual/assistivo para comportamento. Anuncie atualizações dinâmicas sem ruído excessivo.
22
- 5. Corrija no componente responsável e teste de novo o fluxo; se houver suíte, deixe teste de regressão com ferramenta já presente e o comando para reexecutar. Registre navegador, dispositivo, ferramenta e o que não pôde ser avaliado.
20
+ 3. Percorra teclado: entrada/saída, ordem, foco visível (`:focus-visible`), modais e retorno do foco. Confira que o elemento focado fica inteiro visível, sem barra fixa nem container com rolagem por cima. Se a marca conflitar com o foco visível, mantenha o foco e registre a pendência para o dono. Fluxos de auth devem permitir paste/password manager e ter pelo menos um caminho sem teste de memória ou transcrição, do login à recuperação.
21
+ 4. Use scanner para estrutura e teste manual/assistivo para comportamento. Anuncie atualizações dinâmicas sem ruído excessivo. Confira movimento, mídia e tempo: nada pisca em frequência perigosa, `prefers-reduced-motion` tem alternativa intencional, loop infinito tem como parar, nada toca sozinho sem controle e sessão que expira não perde dado digitado.
22
+ 5. Corrija no componente responsável e teste de novo o fluxo; se houver suíte, deixe teste de regressão com ferramenta já presente e o comando para reexecutar. Registre navegador, dispositivo, par com a tecnologia assistiva, ferramenta e versão, e o que não pôde ser avaliado.
23
+
24
+ Varredura automatizada é piso, não atestado: ela encontra violação de estrutura e não vê ordem de leitura errada com markup válido, link descritivo mas inútil, anúncio que atropela o usuário nem alternativa de autenticação ausente. Afirme os critérios verificados neste fluxo, nestas condições, com estes resultados — nunca conformidade de nível a partir de scanner.
23
25
 
24
26
  Recursos da máquina: um navegador ou leitor de tela automatizado por vez e scanner com concorrência mínima; feche as sessões que abriu. Sob pressão `critical` (`crow-skills resources --json`, quando existir), adie a varredura e relate. Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
25
27
 
@@ -0,0 +1,102 @@
1
+ # Matriz de verificação: o que conferir, com que ferramenta e o que cada resultado prova
2
+
3
+ Leia antes de declarar um fluxo acessível. Cada bloco diz o defeito, como observá-lo e o que não conta como prova. Cubra só os blocos presentes no alvo; bloco sem o widget correspondente entra como não aplicável, não como aprovado.
4
+
5
+ ## O que o scanner prova e o que não prova
6
+
7
+ Scanner automatizado encontra violação de estrutura: nome ausente, atributo inválido, contraste calculável, id duplicado, landmark faltando. Ele não vê ordem de leitura errada com markup válido, texto de link correto mas inútil, foco que some atrás de barra fixa, anúncio de live region que atropela o usuário, nem alternativa de autenticação ausente. Scanner limpo é um piso, nunca um atestado: diga a ferramenta, a versão, as regras ativas e o número de itens que exigiram julgamento manual.
8
+
9
+ Não escreva "conforme WCAG 2.2 AA" a partir de varredura. O que você pode afirmar é "os critérios X, Y e Z foram verificados neste fluxo, nestas condições, com estes resultados", mais a lista do que ficou fora de cobertura.
10
+
11
+ ## Semântica antes de ARIA
12
+
13
+ - **Elemento nativo primeiro.** `button`, `a[href]`, `input`, `select`, `details`, `dialog` já trazem papel, estado, foco e teclado. `div` com `role` e handler reimplementa tudo isso pior.
14
+ - **Papel válido e vivo.** Papel inexistente, papel depreciado e papel que o navegador não mapeia mais não produzem nome nem estado; o leitor anuncia um genérico.
15
+ - **Atributo permitido para o papel.** Cada papel aceita um conjunto de `aria-*`; atributo fora desse conjunto é ignorado, e atributo obrigatório ausente deixa o widget sem estado.
16
+ - **Valor válido no atributo.** `aria-expanded="yes"`, `aria-checked="1"` e id inexistente em `aria-labelledby` falham em silêncio: o atributo existe e não informa nada.
17
+ - **Hierarquia de papéis.** Papel que exige filho (`list`/`listitem`, `tablist`/`tab`, `tree`/`treeitem`, `table`/`row`/`cell`) quebra quando um wrapper entra no meio; papel que exige pai, fora dele, não é anunciado como parte do conjunto.
18
+ - **Id único em tudo que é referenciado.** Id repetido faz `aria-labelledby`, `aria-describedby`, `for` e `aria-controls` apontarem para o primeiro e não para o elemento certo. É o defeito clássico de componente repetido em loop.
19
+ - **`aria-hidden` não vai no body nem em container com foco dentro.** No body, apaga a página inteira para a tecnologia assistiva. Em container com elemento focável, cria o item que recebe foco e não existe para quem lê.
20
+ - **Decorativo escondido de verdade.** Ícone sem significado leva `aria-hidden="true"`, imagem decorativa leva `alt=""`. Os dois já estão corretos: não os liste como defeito.
21
+
22
+ ## Nome acessível de cada controle
23
+
24
+ Confira nome em: botão (inclusive botão só de ícone e `input[type=image]`), campo de formulário, `select`, checkbox e switch, link, diálogo, tooltip, barra de progresso, medidor, item de árvore, tabela, iframe e frame, `object` e `embed`.
25
+
26
+ - **Um label por campo.** `label` associado e `aria-label` no mesmo campo competem; o leitor anuncia um e o visível pode ser o outro.
27
+ - **Nome acessível contém o rótulo visível.** Quem usa comando de voz fala o que lê. Nome que não começa pelo texto visível torna o controle inalcançável por voz.
28
+ - **Texto de link descreve o destino.** "Leia mais", "clique aqui" e url crua repetidos na página dão uma lista de links intercambiáveis. Links com o mesmo texto precisam do mesmo destino; mesmo texto para destinos diferentes é defeito mesmo com markup válido.
29
+ - **Link vazio e link quebrado.** Link só com ícone sem nome, e link cujo `href` é `#` ou vazio, são foco sem função.
30
+ - **Link dentro de bloco de texto distinguível sem cor.** Sublinhado, peso ou borda, não apenas matiz.
31
+
32
+ ## Estrutura da página
33
+
34
+ - **Um `main`.** Zero impede o pulo direto ao conteúdo; mais de um torna o pulo ambíguo.
35
+ - **Landmarks com papel real.** `header`, `nav`, `main`, `aside`, `footer`, `search`, `form` nomeado. Vários do mesmo tipo precisam de nome que os distinga.
36
+ - **Link de pular para o conteúdo.** Primeiro item focável, visível ao receber foco, e que move o foco de fato — âncora que só rola a página deixa o foco na navegação.
37
+ - **Hierarquia de títulos sem salto e sem título vazio.** Um `h1` por documento, nível descendo de um em um, título com texto. Título usado para tamanho de fonte é estrutura falsa.
38
+ - **Lista é lista.** `li` só dentro de `ul`/`ol`, `dt`/`dd` só dentro de `dl`, sem wrapper entre o container e os itens.
39
+ - **Tabela de dados com cabeçalho associado.** `th` com `scope`, ou `headers`/`id` quando a tabela é irregular; `caption` ou nome acessível único por tabela. Tabela usada para layout não leva papel de tabela.
40
+ - **`lang` no documento e em trecho de outro idioma.** `lang` e `xml:lang`, quando ambos existem, precisam concordar; divergência troca a voz do sintetizador. Conteúdo RTL precisa de `dir`.
41
+ - **Conteúdo legível sem CSS.** Ordem do DOM é a ordem de leitura; ordem visual criada só por posicionamento mente para quem lê linearmente.
42
+ - **Sem `meta refresh` e sem `accesskey` duplicado.** Refresh temporizado rouba o controle do tempo; accesskey repetido colide com atalho de tecnologia assistiva.
43
+
44
+ ## Teclado e foco
45
+
46
+ Percorra o fluxo inteiro só com teclado, incluindo erro e recuperação.
47
+
48
+ - **Tudo que age é alcançável e acionável.** Alcançável por Tab, acionável por Enter e, em botão, também por Espaço.
49
+ - **Nada de armadilha.** Entra e sai de todo componente. Modal prende o foco de propósito e devolve ao disparador ao fechar; qualquer outra prisão é defeito.
50
+ - **Ordem de foco acompanha a ordem visual.** `tabindex` positivo e reordenação por CSS (`order`, `grid-area`, `row-reverse`) são as duas causas usuais de divergência.
51
+ - **Foco visível e não obscurecido.** Use `:focus-visible` com indicador que passa o contraste contra a vizinhança. Barra fixa, rodapé fixo e container com rolagem escondem o elemento focado: confira que ele fica inteiro visível ao chegar por teclado.
52
+ - **Foco gerenciado em mudança dinâmica.** Ao abrir painel, inserir conteúdo, remover o elemento focado ou concluir uma etapa, declare onde o foco vai. Foco que cai no body perde o lugar do usuário.
53
+ - **Sem `autofocus` em formulário de página.** Ele move o leitor para o meio da página antes de ele ouvir o contexto. Em modal, o foco inicial é parte do padrão e é esperado.
54
+ - **Alvo de interação com área utilizável.** Marca pequena pode ter área de toque grande; alvos vizinhos não se sobrepõem.
55
+ - **Widget composto usa as teclas do seu padrão.** Tabs, accordion, árvore, carrossel, menu, combobox e arrastar-e-soltar têm navegação por setas e alternativa sem arraste. Não deixe o arraste como único caminho.
56
+
57
+ ## Movimento, mídia e tempo
58
+
59
+ - **Sem conteúdo que pisca em frequência perigosa.** Mais de três flashes por segundo em área significativa é risco de convulsão, não questão de gosto.
60
+ - **`prefers-reduced-motion` com alternativa intencional.** Reduza deslocamento e paralaxe; preserve mudança de estado, cor e opacidade que carregam significado. Reduzido não é imóvel.
61
+ - **Loop infinito tem como parar.** Animação, marquee, shimmer ou pulso que dura mais que alguns segundos precisa de pausa, parada ou ocultação, e precisa parar fora da tela. Exigir micro-interação perpétua em todo componente é defeito de direção, não refinamento.
62
+ - **Nada toca sozinho.** Áudio e vídeo com autoplay precisam de controle imediato de pausa e volume; áudio que toca mais que poucos segundos sem controle bloqueia o leitor de tela.
63
+ - **Rolagem suave e rolagem sequestrada têm alternativa.** Âncora precisa de salto imediato sob movimento reduzido; rolagem customizada não pode desalinhar foco e posição.
64
+ - **Vídeo com legenda, e descrição quando a imagem carrega informação.** Legenda cobre fala e som relevante. Transcrição é complemento, não substituto da legenda sincronizada.
65
+ - **Paralaxe e efeito ligado à rolagem têm versão estática.**
66
+ - **Sessão que expira não perde dado.** Avise antes, permita estender e preserve o que foi digitado.
67
+
68
+ ## Apresentação e adaptação
69
+
70
+ - **Contraste medido, par por par.** Registre o valor antes e depois e o limiar aplicado: 4,5:1 para texto normal, 3:1 para texto grande, 3:1 para borda de componente e indicador de estado. Texto sobre imagem ou gradiente mede no pior ponto.
71
+ - **Estado e prioridade não dependem só de cor.** Erro, selecionado, obrigatório e ativo precisam de um segundo sinal.
72
+ - **Reflow a 400%.** Equivalente a 320px de largura, sem rolagem em dois eixos, exceto onde o conteúdo exige (tabela larga, mapa, código).
73
+ - **Texto a 200% sem perda.** Sem corte, sem sobreposição, sem container de altura fixa estourando.
74
+ - **Zoom por pinça liberado e orientação livre.** `user-scalable=no` e `maximum-scale` baixo são defeito; travar retrato ou paisagem só se a atividade exigir.
75
+ - **Sem imagem de texto onde texto resolve.** Texto em bitmap não escala, não traduz e não é lido.
76
+ - **`alt` sem redundância.** Sem "imagem de", sem repetir a legenda adjacente, sem nome de arquivo.
77
+
78
+ ## Linguagem e carga cognitiva
79
+
80
+ - **Instrução não depende de sentido.** "Clique no botão vermelho à direita" não serve para quem não vê cor nem posição; nomeie o controle.
81
+ - **Linguagem simples e termo consistente.** Mesmo nome para a mesma coisa em todo o fluxo.
82
+ - **Sem reentrada de dado no mesmo processo.** O que o usuário já informou vem preenchido ou selecionável, exceto quando repetir é parte do controle (confirmação de senha).
83
+ - **Ajuda repetida fica no mesmo lugar.** Contato, chat e link de ajuda não mudam de posição entre páginas.
84
+
85
+ ## Autenticação
86
+
87
+ - **Cole e gerenciador de senha liberados.** Bloquear paste, dividir o código em um campo por dígito sem `autocomplete="one-time-code"`, ou impedir o autofill do gerenciador transforma o login em teste de transcrição.
88
+ - **Pelo menos um caminho sem teste de memória ou transcrição.** Passkey, link por e-mail, aprovação em dispositivo ou gerenciador de senha servem. Pergunta secreta e CAPTCHA de transcrição sozinhos não.
89
+ - **Recuperação e segundo fator seguem a mesma regra do login.** O fluxo todo, inclusive erro, reenvio e expiração do código.
90
+
91
+ ## Anúncio dinâmico sem ruído
92
+
93
+ - **Live region existe antes do conteúdo.** Região inserida já com o texto dentro costuma não ser anunciada.
94
+ - **Urgência proporcional.** `polite` para progresso e resultado; `assertive` só para o que interrompe. Lista que atualiza a cada tecla em `assertive` é inutilizável.
95
+ - **Erro de formulário anunciado e associado.** Mensagem ligada ao campo por `aria-describedby`, e resumo com foco quando o envio falha.
96
+
97
+ ## Ferramenta e evidência
98
+
99
+ - **Scanner para estrutura, leitor de tela para comportamento.** Um navegador e um leitor automatizado por vez; feche o que abriu.
100
+ - **Registre o par navegador + tecnologia assistiva.** O mapeamento de ARIA difere entre combinações; resultado em um par não é resultado no outro.
101
+ - **Separe o que foi observado do que foi inferido.** Diga o que não pôde ser avaliado e por quê, inclusive a falta do leitor de tela ou do dispositivo.
102
+ - **Deixe o fluxo testável de novo.** Quando houver suíte, um teste de regressão por defeito corrigido, com o comando para reexecutar.