agileflow 4.0.0-alpha.2 → 4.0.0-alpha.21

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 (372) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/content/plugins/accessibility/plugin.yaml +14 -0
  3. package/content/plugins/accessibility/skills/agileflow-accessibility/SKILL.md +392 -0
  4. package/content/plugins/accessibility/skills/agileflow-accessibility/references/aria-patterns.md +528 -0
  5. package/content/plugins/accessibility/skills/agileflow-accessibility/references/testing-checklist.md +457 -0
  6. package/content/plugins/accessibility/skills/agileflow-accessibility/references/wcag-guide.md +683 -0
  7. package/content/plugins/accessibility/skills/agileflow-accessibility/workflows/audit-page.md +310 -0
  8. package/content/plugins/accessibility/skills/agileflow-accessibility/workflows/implement-accessible-component.md +479 -0
  9. package/content/plugins/ads/agents/ads-audit-budget.md +185 -0
  10. package/content/plugins/ads/agents/ads-audit-compliance.md +171 -0
  11. package/content/plugins/ads/agents/ads-audit-creative.md +168 -0
  12. package/content/plugins/ads/agents/ads-audit-google.md +227 -0
  13. package/content/plugins/ads/agents/ads-audit-meta.md +184 -0
  14. package/content/plugins/ads/agents/ads-audit-tracking.md +205 -0
  15. package/content/plugins/ads/agents/ads-consensus.md +410 -0
  16. package/content/plugins/ads/agents/ads-generate.md +152 -0
  17. package/content/plugins/ads/agents/ads-performance-tracker.md +212 -0
  18. package/content/plugins/ads/plugin.yaml +23 -4
  19. package/content/plugins/ads/skills/agileflow-ads/SKILL.md +218 -0
  20. package/content/plugins/ads/skills/agileflow-ads/references/ad-copy-formula-guide.md +131 -0
  21. package/content/plugins/ads/skills/agileflow-ads/references/audience-targeting-guide.md +137 -0
  22. package/content/plugins/ads/skills/agileflow-ads/references/bid-strategy-guide.md +115 -0
  23. package/content/plugins/ads/skills/agileflow-ads/references/platform-benchmarks.md +100 -0
  24. package/content/plugins/ads/skills/agileflow-ads/workflows/audit.md +118 -0
  25. package/content/plugins/ads/skills/agileflow-ads/workflows/generate.md +84 -0
  26. package/content/plugins/audit/agents/a11y-analyzer-aria.md +173 -0
  27. package/content/plugins/audit/agents/a11y-analyzer-forms.md +173 -0
  28. package/content/plugins/audit/agents/a11y-analyzer-keyboard.md +183 -0
  29. package/content/plugins/audit/agents/a11y-analyzer-semantic.md +169 -0
  30. package/content/plugins/audit/agents/a11y-analyzer-visual.md +172 -0
  31. package/content/plugins/audit/agents/a11y-consensus.md +249 -0
  32. package/content/plugins/audit/agents/accessibility.md +558 -0
  33. package/content/plugins/audit/agents/api-quality-analyzer-conventions.md +156 -0
  34. package/content/plugins/audit/agents/api-quality-analyzer-docs.md +184 -0
  35. package/content/plugins/audit/agents/api-quality-analyzer-errors.md +191 -0
  36. package/content/plugins/audit/agents/api-quality-analyzer-pagination.md +179 -0
  37. package/content/plugins/audit/agents/api-quality-analyzer-versioning.md +150 -0
  38. package/content/plugins/audit/agents/api-quality-consensus.md +217 -0
  39. package/content/plugins/audit/agents/api-validator.md +191 -0
  40. package/content/plugins/audit/agents/arch-analyzer-circular.md +156 -0
  41. package/content/plugins/audit/agents/arch-analyzer-complexity.md +193 -0
  42. package/content/plugins/audit/agents/arch-analyzer-coupling.md +152 -0
  43. package/content/plugins/audit/agents/arch-analyzer-layering.md +160 -0
  44. package/content/plugins/audit/agents/arch-analyzer-patterns.md +210 -0
  45. package/content/plugins/audit/agents/arch-consensus.md +228 -0
  46. package/content/plugins/audit/agents/browser-qa.md +342 -0
  47. package/content/plugins/audit/agents/code-reviewer.md +298 -0
  48. package/content/plugins/audit/agents/completeness-analyzer-api.md +199 -0
  49. package/content/plugins/audit/agents/completeness-analyzer-conditional.md +211 -0
  50. package/content/plugins/audit/agents/completeness-analyzer-handlers.md +166 -0
  51. package/content/plugins/audit/agents/completeness-analyzer-imports.md +165 -0
  52. package/content/plugins/audit/agents/completeness-analyzer-routes.md +190 -0
  53. package/content/plugins/audit/agents/completeness-analyzer-state.md +196 -0
  54. package/content/plugins/audit/agents/completeness-analyzer-stubs.md +206 -0
  55. package/content/plugins/audit/agents/completeness-consensus.md +295 -0
  56. package/content/plugins/audit/agents/error-analyzer.md +213 -0
  57. package/content/plugins/audit/agents/flow-analyzer-authorization.md +182 -0
  58. package/content/plugins/audit/agents/flow-analyzer-discovery.md +174 -0
  59. package/content/plugins/audit/agents/flow-analyzer-errors.md +186 -0
  60. package/content/plugins/audit/agents/flow-analyzer-feedback.md +185 -0
  61. package/content/plugins/audit/agents/flow-analyzer-navigation.md +177 -0
  62. package/content/plugins/audit/agents/flow-analyzer-persistence.md +193 -0
  63. package/content/plugins/audit/agents/flow-analyzer-wiring.md +169 -0
  64. package/content/plugins/audit/agents/flow-consensus.md +237 -0
  65. package/content/plugins/audit/agents/legal-analyzer-a11y.md +114 -0
  66. package/content/plugins/audit/agents/legal-analyzer-ai.md +121 -0
  67. package/content/plugins/audit/agents/legal-analyzer-consumer.md +114 -0
  68. package/content/plugins/audit/agents/legal-analyzer-content.md +117 -0
  69. package/content/plugins/audit/agents/legal-analyzer-international.md +119 -0
  70. package/content/plugins/audit/agents/legal-analyzer-licensing.md +119 -0
  71. package/content/plugins/audit/agents/legal-analyzer-privacy.md +112 -0
  72. package/content/plugins/audit/agents/legal-analyzer-security.md +116 -0
  73. package/content/plugins/audit/agents/legal-analyzer-terms.md +115 -0
  74. package/content/plugins/audit/agents/legal-consensus.md +250 -0
  75. package/content/plugins/audit/agents/logic-analyzer-edge.md +179 -0
  76. package/content/plugins/audit/agents/logic-analyzer-flow.md +264 -0
  77. package/content/plugins/audit/agents/logic-analyzer-invariant.md +215 -0
  78. package/content/plugins/audit/agents/logic-analyzer-race.md +280 -0
  79. package/content/plugins/audit/agents/logic-analyzer-type.md +227 -0
  80. package/content/plugins/audit/agents/logic-consensus.md +259 -0
  81. package/content/plugins/audit/agents/perf-analyzer-assets.md +182 -0
  82. package/content/plugins/audit/agents/perf-analyzer-bundle.md +173 -0
  83. package/content/plugins/audit/agents/perf-analyzer-caching.md +170 -0
  84. package/content/plugins/audit/agents/perf-analyzer-compute.md +173 -0
  85. package/content/plugins/audit/agents/perf-analyzer-memory.md +193 -0
  86. package/content/plugins/audit/agents/perf-analyzer-network.md +165 -0
  87. package/content/plugins/audit/agents/perf-analyzer-queries.md +162 -0
  88. package/content/plugins/audit/agents/perf-analyzer-rendering.md +168 -0
  89. package/content/plugins/audit/agents/perf-consensus.md +287 -0
  90. package/content/plugins/audit/agents/qa.md +820 -0
  91. package/content/plugins/audit/agents/quality-analyzer-comments.md +159 -0
  92. package/content/plugins/audit/agents/quality-analyzer-duplication.md +184 -0
  93. package/content/plugins/audit/agents/quality-analyzer-naming.md +160 -0
  94. package/content/plugins/audit/agents/quality-consensus.md +241 -0
  95. package/content/plugins/audit/agents/schema-validator.md +473 -0
  96. package/content/plugins/audit/agents/security-analyzer-api.md +210 -0
  97. package/content/plugins/audit/agents/security-analyzer-auth.md +169 -0
  98. package/content/plugins/audit/agents/security-analyzer-authz.md +180 -0
  99. package/content/plugins/audit/agents/security-analyzer-deps.md +153 -0
  100. package/content/plugins/audit/agents/security-analyzer-infra.md +184 -0
  101. package/content/plugins/audit/agents/security-analyzer-injection.md +155 -0
  102. package/content/plugins/audit/agents/security-analyzer-input.md +201 -0
  103. package/content/plugins/audit/agents/security-analyzer-secrets.md +183 -0
  104. package/content/plugins/audit/agents/security-consensus.md +283 -0
  105. package/content/plugins/audit/agents/test-analyzer-assertions.md +188 -0
  106. package/content/plugins/audit/agents/test-analyzer-coverage.md +189 -0
  107. package/content/plugins/audit/agents/test-analyzer-fragility.md +193 -0
  108. package/content/plugins/audit/agents/test-analyzer-integration.md +161 -0
  109. package/content/plugins/audit/agents/test-analyzer-maintenance.md +180 -0
  110. package/content/plugins/audit/agents/test-analyzer-mocking.md +188 -0
  111. package/content/plugins/audit/agents/test-analyzer-patterns.md +196 -0
  112. package/content/plugins/audit/agents/test-analyzer-structure.md +184 -0
  113. package/content/plugins/audit/agents/test-consensus.md +301 -0
  114. package/content/plugins/audit/agents/testing.md +561 -0
  115. package/content/plugins/audit/agents/ui-validator.md +344 -0
  116. package/content/plugins/audit/plugin.yaml +186 -5
  117. package/content/plugins/audit/skills/agileflow-audit/SKILL.md +113 -0
  118. package/content/plugins/audit/skills/agileflow-audit/references/audit-depth-guide.md +151 -0
  119. package/content/plugins/audit/skills/agileflow-audit/references/dependency-risk-guide.md +139 -0
  120. package/content/plugins/audit/skills/agileflow-audit/references/owasp-top10.md +120 -0
  121. package/content/plugins/audit/skills/agileflow-audit/references/performance-budget-guide.md +143 -0
  122. package/content/plugins/audit/skills/agileflow-audit/references/wcag-criteria.md +117 -0
  123. package/content/plugins/audit/skills/agileflow-audit/workflows/run-audit.md +52 -0
  124. package/content/plugins/audit/skills/agileflow-audit/workflows/tdd.md +66 -0
  125. package/content/plugins/core/agents/adr-writer.md +521 -0
  126. package/content/plugins/core/agents/epic-planner.md +520 -0
  127. package/content/plugins/core/agents/mentor.md +709 -0
  128. package/content/plugins/core/agents/orchestrator.md +776 -0
  129. package/content/plugins/core/agents/team-coordinator.md +334 -0
  130. package/content/plugins/core/agents/team-lead.md +181 -0
  131. package/content/plugins/core/agents/workspace-orchestrator.md +146 -0
  132. package/content/plugins/core/hooks/context-loader.js +31 -4
  133. package/content/plugins/core/hooks/damage-control-bash.js +10 -2
  134. package/content/plugins/core/hooks/damage-control-edit.js +4 -1
  135. package/content/plugins/core/hooks/damage-control-patterns.yaml +1 -1
  136. package/content/plugins/core/hooks/damage-control-write.js +4 -1
  137. package/content/plugins/core/hooks/{pre-compact-state.js → post-compact-state.js} +25 -8
  138. package/content/plugins/core/hooks/preferences-injector.js +352 -0
  139. package/content/plugins/core/plugin.yaml +24 -28
  140. package/content/plugins/core/skills/agileflow-adr/SKILL.md +34 -8
  141. package/content/plugins/core/skills/agileflow-adr/references/madr-format-guide.md +86 -0
  142. package/content/plugins/core/skills/agileflow-adr/workflows/write-adr.md +57 -0
  143. package/content/plugins/core/skills/agileflow-babysit-mentor/SKILL.md +94 -27
  144. package/content/plugins/core/skills/agileflow-babysit-mentor/references/mentor-decision-guide.md +81 -0
  145. package/content/plugins/core/skills/agileflow-babysit-mentor/workflows/mentor-session.md +79 -0
  146. package/content/plugins/core/skills/agileflow-epic-planner/SKILL.md +37 -7
  147. package/content/plugins/core/skills/agileflow-epic-planner/references/epic-sizing-guide.md +81 -0
  148. package/content/plugins/core/skills/agileflow-epic-planner/workflows/plan-epic.md +55 -0
  149. package/content/plugins/core/skills/agileflow-status-updater/SKILL.md +36 -20
  150. package/content/plugins/core/skills/agileflow-status-updater/references/status-transitions.md +89 -0
  151. package/content/plugins/core/skills/agileflow-status-updater/workflows/update-status.md +56 -0
  152. package/content/plugins/core/skills/agileflow-story-writer/SKILL.md +39 -114
  153. package/content/plugins/core/skills/agileflow-story-writer/references/estimation-reference.md +36 -0
  154. package/content/plugins/core/skills/agileflow-story-writer/references/story-template.md +92 -0
  155. package/content/plugins/core/skills/agileflow-story-writer/workflows/write-story.md +138 -0
  156. package/content/plugins/council/agents/council-advocate.md +223 -0
  157. package/content/plugins/council/agents/council-analyst.md +278 -0
  158. package/content/plugins/council/agents/council-compounder.md +204 -0
  159. package/content/plugins/council/agents/council-contrarian.md +217 -0
  160. package/content/plugins/council/agents/council-moonshot.md +217 -0
  161. package/content/plugins/council/agents/council-optimist.md +185 -0
  162. package/content/plugins/council/agents/council-revenue.md +200 -0
  163. package/content/plugins/council/agents/council-technical.md +218 -0
  164. package/content/plugins/council/agents/multi-expert.md +334 -0
  165. package/content/plugins/council/plugin.yaml +23 -4
  166. package/content/plugins/council/skills/agileflow-council/SKILL.md +102 -0
  167. package/content/plugins/council/skills/agileflow-council/references/decision-log-template.md +109 -0
  168. package/content/plugins/council/skills/agileflow-council/references/perspective-guide.md +104 -0
  169. package/content/plugins/council/skills/agileflow-council/references/when-to-convene-guide.md +112 -0
  170. package/content/plugins/council/skills/agileflow-council/workflows/convene.md +73 -0
  171. package/content/plugins/council/skills/agileflow-council/workflows/multi-expert.md +75 -0
  172. package/content/plugins/database/plugin.yaml +14 -0
  173. package/content/plugins/database/skills/agileflow-database/SKILL.md +284 -0
  174. package/content/plugins/database/skills/agileflow-database/references/indexing-guide.md +313 -0
  175. package/content/plugins/database/skills/agileflow-database/references/migration-guide.md +328 -0
  176. package/content/plugins/database/skills/agileflow-database/references/schema-design-guide.md +467 -0
  177. package/content/plugins/database/skills/agileflow-database/workflows/design-schema.md +213 -0
  178. package/content/plugins/database/skills/agileflow-database/workflows/optimize-query.md +253 -0
  179. package/content/plugins/debugging/plugin.yaml +14 -0
  180. package/content/plugins/debugging/skills/agileflow-debug/SKILL.md +236 -0
  181. package/content/plugins/debugging/skills/agileflow-debug/references/common-patterns.md +350 -0
  182. package/content/plugins/debugging/skills/agileflow-debug/references/debugging-strategies.md +328 -0
  183. package/content/plugins/debugging/skills/agileflow-debug/workflows/debug-issue.md +187 -0
  184. package/content/plugins/debugging/skills/agileflow-debug/workflows/reproduce-bug.md +194 -0
  185. package/content/plugins/delivery/agents/ci.md +547 -0
  186. package/content/plugins/delivery/agents/devops.md +789 -0
  187. package/content/plugins/delivery/plugin.yaml +19 -0
  188. package/content/plugins/delivery/skills/agileflow-delivery/SKILL.md +111 -0
  189. package/content/plugins/delivery/skills/agileflow-delivery/references/changelog-format-guide.md +133 -0
  190. package/content/plugins/delivery/skills/agileflow-delivery/references/ci-pipeline-guide.md +158 -0
  191. package/content/plugins/delivery/skills/agileflow-delivery/references/pr-checklist-guide.md +133 -0
  192. package/content/plugins/delivery/skills/agileflow-delivery/references/release-checklist.md +142 -0
  193. package/content/plugins/delivery/skills/agileflow-delivery/workflows/changelog.md +72 -0
  194. package/content/plugins/delivery/skills/agileflow-delivery/workflows/deploy.md +74 -0
  195. package/content/plugins/delivery/skills/agileflow-delivery/workflows/pr.md +75 -0
  196. package/content/plugins/docs/agents/documentation.md +544 -0
  197. package/content/plugins/docs/agents/readme-updater.md +640 -0
  198. package/content/plugins/docs/plugin.yaml +19 -0
  199. package/content/plugins/docs/skills/agileflow-docs/SKILL.md +106 -0
  200. package/content/plugins/docs/skills/agileflow-docs/references/api-doc-template.md +167 -0
  201. package/content/plugins/docs/skills/agileflow-docs/references/doc-types-guide.md +141 -0
  202. package/content/plugins/docs/skills/agileflow-docs/references/readme-template.md +156 -0
  203. package/content/plugins/docs/skills/agileflow-docs/workflows/readme-sync.md +57 -0
  204. package/content/plugins/docs/skills/agileflow-docs/workflows/sync.md +64 -0
  205. package/content/plugins/engineering/agents/api.md +718 -0
  206. package/content/plugins/engineering/agents/codebase-query.md +285 -0
  207. package/content/plugins/engineering/agents/compliance.md +559 -0
  208. package/content/plugins/engineering/agents/database.md +644 -0
  209. package/content/plugins/engineering/agents/integrations.md +644 -0
  210. package/content/plugins/engineering/agents/mobile.md +552 -0
  211. package/content/plugins/engineering/agents/monitoring.md +585 -0
  212. package/content/plugins/engineering/agents/performance.md +529 -0
  213. package/content/plugins/engineering/agents/refactor.md +592 -0
  214. package/content/plugins/engineering/agents/security.md +524 -0
  215. package/content/plugins/engineering/agents/ui.md +1336 -0
  216. package/content/plugins/engineering/plugin.yaml +37 -0
  217. package/content/plugins/engineering/skills/agileflow-engineering/SKILL.md +127 -0
  218. package/content/plugins/engineering/skills/agileflow-engineering/references/code-review-guide.md +126 -0
  219. package/content/plugins/engineering/skills/agileflow-engineering/references/domain-routing-guide.md +89 -0
  220. package/content/plugins/engineering/skills/agileflow-engineering/references/refactoring-guide.md +136 -0
  221. package/content/plugins/engineering/skills/agileflow-engineering/workflows/diagnose.md +63 -0
  222. package/content/plugins/engineering/skills/agileflow-engineering/workflows/impact.md +60 -0
  223. package/content/plugins/ideation/agents/brainstorm-analyzer-features.md +179 -0
  224. package/content/plugins/ideation/agents/brainstorm-analyzer-growth.md +169 -0
  225. package/content/plugins/ideation/agents/brainstorm-analyzer-integration.md +181 -0
  226. package/content/plugins/ideation/agents/brainstorm-analyzer-market.md +150 -0
  227. package/content/plugins/ideation/agents/brainstorm-analyzer-ux.md +180 -0
  228. package/content/plugins/ideation/agents/brainstorm-consensus.md +245 -0
  229. package/content/plugins/ideation/agents/design.md +568 -0
  230. package/content/plugins/ideation/agents/product.md +582 -0
  231. package/content/plugins/ideation/plugin.yaml +31 -0
  232. package/content/plugins/ideation/skills/agileflow-ideation/SKILL.md +109 -0
  233. package/content/plugins/ideation/skills/agileflow-ideation/references/brainstorm-techniques.md +138 -0
  234. package/content/plugins/ideation/skills/agileflow-ideation/references/competitive-analysis-template.md +148 -0
  235. package/content/plugins/ideation/skills/agileflow-ideation/references/feature-prioritization-guide.md +147 -0
  236. package/content/plugins/ideation/skills/agileflow-ideation/references/user-story-patterns.md +152 -0
  237. package/content/plugins/ideation/skills/agileflow-ideation/workflows/features.md +65 -0
  238. package/content/plugins/ideation/skills/agileflow-ideation/workflows/ideate.md +54 -0
  239. package/content/plugins/migration/agents/datamigration.md +757 -0
  240. package/content/plugins/migration/plugin.yaml +17 -0
  241. package/content/plugins/migration/skills/agileflow-migration/SKILL.md +106 -0
  242. package/content/plugins/migration/skills/agileflow-migration/references/data-validation-checklist.md +154 -0
  243. package/content/plugins/migration/skills/agileflow-migration/references/migration-patterns.md +209 -0
  244. package/content/plugins/migration/skills/agileflow-migration/references/rollback-playbook.md +171 -0
  245. package/content/plugins/migration/skills/agileflow-migration/references/version-compatibility-matrix.md +155 -0
  246. package/content/plugins/migration/skills/agileflow-migration/workflows/plan.md +73 -0
  247. package/content/plugins/migration/skills/agileflow-migration/workflows/validate.md +71 -0
  248. package/content/plugins/performance/plugin.yaml +14 -0
  249. package/content/plugins/performance/skills/agileflow-performance/SKILL.md +224 -0
  250. package/content/plugins/performance/skills/agileflow-performance/references/optimization-patterns.md +554 -0
  251. package/content/plugins/performance/skills/agileflow-performance/references/profiling-guide.md +383 -0
  252. package/content/plugins/performance/skills/agileflow-performance/references/web-vitals-guide.md +360 -0
  253. package/content/plugins/performance/skills/agileflow-performance/workflows/improve-web-vitals.md +344 -0
  254. package/content/plugins/performance/skills/agileflow-performance/workflows/profile-and-fix.md +254 -0
  255. package/content/plugins/planning/agents/analytics.md +670 -0
  256. package/content/plugins/planning/agents/rlm-subcore.md +215 -0
  257. package/content/plugins/planning/plugin.yaml +19 -0
  258. package/content/plugins/planning/skills/agileflow-planning/SKILL.md +111 -0
  259. package/content/plugins/planning/skills/agileflow-planning/references/estimation-guide.md +114 -0
  260. package/content/plugins/planning/skills/agileflow-planning/references/rpi-workflow.md +119 -0
  261. package/content/plugins/planning/skills/agileflow-planning/references/sprint-planning-guide.md +145 -0
  262. package/content/plugins/planning/skills/agileflow-planning/workflows/impact.md +63 -0
  263. package/content/plugins/planning/skills/agileflow-planning/workflows/rpi.md +104 -0
  264. package/content/plugins/psychology/plugin.yaml +14 -0
  265. package/content/plugins/psychology/skills/agileflow-retention/SKILL.md +252 -0
  266. package/content/plugins/psychology/skills/agileflow-retention/references/competitor-analysis.md +240 -0
  267. package/content/plugins/psychology/skills/agileflow-retention/references/psychology-models.md +349 -0
  268. package/content/plugins/psychology/skills/agileflow-retention/references/retention-patterns.md +279 -0
  269. package/content/plugins/psychology/skills/agileflow-retention/workflows/design-retention-feature.md +287 -0
  270. package/content/plugins/psychology/skills/agileflow-retention/workflows/retention-audit.md +259 -0
  271. package/content/plugins/refactoring/plugin.yaml +14 -0
  272. package/content/plugins/refactoring/skills/agileflow-refactor/SKILL.md +235 -0
  273. package/content/plugins/refactoring/skills/agileflow-refactor/references/refactoring-patterns.md +405 -0
  274. package/content/plugins/refactoring/skills/agileflow-refactor/references/safety-checks.md +177 -0
  275. package/content/plugins/refactoring/skills/agileflow-refactor/workflows/extract-module.md +226 -0
  276. package/content/plugins/refactoring/skills/agileflow-refactor/workflows/safe-refactor.md +169 -0
  277. package/content/plugins/research/agents/research.md +503 -0
  278. package/content/plugins/research/plugin.yaml +17 -0
  279. package/content/plugins/research/skills/agileflow-research/SKILL.md +110 -0
  280. package/content/plugins/research/skills/agileflow-research/references/knowledge-decay-guide.md +121 -0
  281. package/content/plugins/research/skills/agileflow-research/references/research-prompt-guide.md +141 -0
  282. package/content/plugins/research/skills/agileflow-research/references/synthesis-template.md +154 -0
  283. package/content/plugins/research/skills/agileflow-research/workflows/analyze.md +60 -0
  284. package/content/plugins/research/skills/agileflow-research/workflows/ask.md +64 -0
  285. package/content/plugins/research/skills/agileflow-research/workflows/import.md +66 -0
  286. package/content/plugins/research/skills/agileflow-research/workflows/synthesize.md +66 -0
  287. package/content/plugins/reviews/plugin.yaml +14 -0
  288. package/content/plugins/reviews/skills/agileflow-pr-reviewer/SKILL.md +241 -0
  289. package/content/plugins/reviews/skills/agileflow-pr-reviewer/references/review-checklist.md +200 -0
  290. package/content/plugins/reviews/skills/agileflow-pr-reviewer/references/security-patterns.md +328 -0
  291. package/content/plugins/reviews/skills/agileflow-pr-reviewer/workflows/review-pr.md +153 -0
  292. package/content/plugins/reviews/skills/agileflow-pr-reviewer/workflows/security-review.md +177 -0
  293. package/content/plugins/seo/agents/seo-analyzer-content.md +169 -0
  294. package/content/plugins/seo/agents/seo-analyzer-images.md +198 -0
  295. package/content/plugins/seo/agents/seo-analyzer-performance.md +217 -0
  296. package/content/plugins/seo/agents/seo-analyzer-schema.md +184 -0
  297. package/content/plugins/seo/agents/seo-analyzer-sitemap.md +177 -0
  298. package/content/plugins/seo/agents/seo-analyzer-technical.md +151 -0
  299. package/content/plugins/seo/agents/seo-consensus.md +304 -0
  300. package/content/plugins/seo/plugin.yaml +19 -4
  301. package/content/plugins/seo/skills/agileflow-seo/SKILL.md +188 -0
  302. package/content/plugins/seo/skills/agileflow-seo/references/cwv-thresholds.md +110 -0
  303. package/content/plugins/seo/skills/agileflow-seo/references/eeat-framework.md +144 -0
  304. package/content/plugins/seo/skills/agileflow-seo/references/keyword-research-guide.md +125 -0
  305. package/content/plugins/seo/skills/agileflow-seo/references/schema-types.md +139 -0
  306. package/content/plugins/seo/skills/agileflow-seo/references/technical-seo-checklist.md +139 -0
  307. package/content/plugins/seo/skills/agileflow-seo/workflows/audit.md +98 -0
  308. package/content/plugins/seo/skills/agileflow-seo/workflows/page.md +118 -0
  309. package/content/plugins/testing/plugin.yaml +16 -0
  310. package/content/plugins/testing/skills/agileflow-test-writer/SKILL.md +260 -0
  311. package/content/plugins/testing/skills/agileflow-test-writer/references/coverage-targets.md +239 -0
  312. package/content/plugins/testing/skills/agileflow-test-writer/references/test-patterns.md +420 -0
  313. package/content/plugins/testing/skills/agileflow-test-writer/workflows/add-coverage.md +154 -0
  314. package/content/plugins/testing/skills/agileflow-test-writer/workflows/write-tests-from-ac.md +225 -0
  315. package/package.json +2 -2
  316. package/src/cli/commands/doctor.js +818 -30
  317. package/src/cli/commands/hook.js +17 -14
  318. package/src/cli/commands/launch.js +1454 -0
  319. package/src/cli/commands/learn.js +149 -0
  320. package/src/cli/commands/plugins.js +113 -0
  321. package/src/cli/commands/setup.js +455 -110
  322. package/src/cli/commands/skills.js +324 -0
  323. package/src/cli/commands/status.js +8 -10
  324. package/src/cli/commands/update.js +76 -15
  325. package/src/cli/index.js +90 -26
  326. package/src/cli/wizard/babysit-mode-picker.js +192 -0
  327. package/src/cli/wizard/behaviors-picker.js +208 -54
  328. package/src/cli/wizard/ide-picker.js +40 -28
  329. package/src/cli/wizard/install-scope-picker.js +57 -0
  330. package/src/cli/wizard/launch-alias-picker.js +50 -0
  331. package/src/cli/wizard/launch-cli-picker.js +129 -0
  332. package/src/cli/wizard/launch-tmux-picker.js +133 -0
  333. package/src/cli/wizard/learnings-picker.js +40 -0
  334. package/src/cli/wizard/plugin-picker.js +47 -16
  335. package/src/lib/brand.js +116 -0
  336. package/src/lib/errors.js +120 -0
  337. package/src/lib/path-check.js +39 -0
  338. package/src/runtime/config/defaults.js +22 -17
  339. package/src/runtime/config/loader.js +77 -8
  340. package/src/runtime/config/schema.json +43 -16
  341. package/src/runtime/config/writer.js +3 -1
  342. package/src/runtime/ide/babysit-skill.js +202 -0
  343. package/src/runtime/ide/capabilities.js +84 -29
  344. package/src/runtime/ide/claude-code-content.js +177 -0
  345. package/src/runtime/ide/claude-code-settings.js +67 -29
  346. package/src/runtime/ide/claude-code-skills.js +47 -32
  347. package/src/runtime/ide/codex-config.js +295 -0
  348. package/src/runtime/installer/install.js +252 -24
  349. package/src/runtime/launch/alias-installer.js +191 -0
  350. package/src/runtime/launch/cli-resume.js +244 -0
  351. package/src/runtime/launch/closed-windows.js +338 -0
  352. package/src/runtime/launch/defaults.js +66 -0
  353. package/src/runtime/launch/detect-clis.js +69 -0
  354. package/src/runtime/launch/doctor.js +464 -0
  355. package/src/runtime/launch/exec-wrapper.js +114 -0
  356. package/src/runtime/launch/parallel-session.js +247 -0
  357. package/src/runtime/launch/prefs.js +211 -0
  358. package/src/runtime/launch/project-prefs.js +234 -0
  359. package/src/runtime/launch/resolve-cli.js +56 -0
  360. package/src/runtime/launch/restore.js +152 -0
  361. package/src/runtime/launch/schema.json +75 -0
  362. package/src/runtime/launch/session-lifecycle.js +313 -0
  363. package/src/runtime/launch/session-registry.js +401 -0
  364. package/src/runtime/launch/spawn.js +103 -0
  365. package/src/runtime/launch/tabs.js +350 -0
  366. package/src/runtime/launch/tmux.js +764 -0
  367. package/src/runtime/launch/worktree.js +260 -0
  368. package/src/runtime/plugins/registry.js +16 -11
  369. package/src/runtime/plugins/validator.js +57 -43
  370. package/src/runtime/skills/learnings.js +308 -0
  371. package/content/plugins/core/hooks/babysit-mentor-injector.js +0 -55
  372. package/src/cli/wizard/personalization.js +0 -64
@@ -0,0 +1,528 @@
1
+ # ARIA Patterns Reference
2
+
3
+ ARIA (Accessible Rich Internet Applications) is a set of attributes that extend HTML's native semantics. Use ARIA to fill gaps where HTML alone cannot express the accessibility information assistive technologies need — not as a replacement for correct HTML.
4
+
5
+ **The cardinal rule: if HTML can do it, use HTML.**
6
+
7
+ ```
8
+ Native HTML ARIA equivalent (avoid if native works)
9
+ ────────── ──────────────────────────────────────
10
+ <button> vs <div role="button" tabindex="0">
11
+ <input type="checkbox"> vs <div role="checkbox" tabindex="0">
12
+ <nav> vs <div role="navigation">
13
+ <h2> vs <div role="heading" aria-level="2">
14
+ <details><summary> vs <button aria-expanded> + hidden panel
15
+ ```
16
+
17
+ ---
18
+
19
+ ## The Five ARIA Rules (W3C)
20
+
21
+ 1. **Use native HTML first.** Only use ARIA when there is no native HTML element or attribute for the pattern.
22
+ 2. **Don't change native semantics.** Don't add `role="button"` to an `<a>` or `role="heading"` to a `<p>`.
23
+ 3. **All interactive ARIA widgets must be keyboard operable.** If you add a role, add keyboard event handlers.
24
+ 4. **Don't use `role="presentation"` or `aria-hidden="true"` on focusable elements.** This hides elements from AT while leaving them in tab order.
25
+ 5. **All interactive elements must have an accessible name.** Every `role="button"`, `role="textbox"`, `role="dialog"` etc. needs a label.
26
+
27
+ ---
28
+
29
+ ## Pattern: Modal Dialog
30
+
31
+ A modal dialog traps focus, announces to screen readers as a dialog, and returns focus on close.
32
+
33
+ ```html
34
+ <!-- Trigger -->
35
+ <button id="open-dialog" onclick="openModal()">Delete account</button>
36
+
37
+ <!-- Dialog -->
38
+ <div
39
+ id="confirm-dialog"
40
+ role="dialog"
41
+ aria-modal="true"
42
+ aria-labelledby="dialog-title"
43
+ aria-describedby="dialog-desc"
44
+ hidden
45
+ >
46
+ <h2 id="dialog-title">Confirm account deletion</h2>
47
+ <p id="dialog-desc">
48
+ This action is permanent and cannot be undone. All your data will be
49
+ deleted.
50
+ </p>
51
+ <button onclick="confirmDelete()">Delete my account</button>
52
+ <button onclick="closeModal()">Cancel</button>
53
+ </div>
54
+ ```
55
+
56
+ ```js
57
+ function openModal() {
58
+ const dialog = document.getElementById("confirm-dialog");
59
+ const trigger = document.getElementById("open-dialog");
60
+
61
+ dialog.hidden = false;
62
+
63
+ // Move focus to first focusable element or dialog heading
64
+ const firstFocusable = dialog.querySelector(
65
+ "button, [href], input, select, textarea, [tabindex]:not([tabindex='-1'])",
66
+ );
67
+ firstFocusable?.focus();
68
+
69
+ // Trap focus inside dialog
70
+ dialog.addEventListener("keydown", trapFocus);
71
+
72
+ // Close on Escape
73
+ dialog.addEventListener("keydown", (e) => {
74
+ if (e.key === "Escape") closeModal();
75
+ });
76
+ }
77
+
78
+ function closeModal() {
79
+ const dialog = document.getElementById("confirm-dialog");
80
+ dialog.hidden = true;
81
+ dialog.removeEventListener("keydown", trapFocus);
82
+
83
+ // Return focus to the element that opened the dialog
84
+ document.getElementById("open-dialog").focus();
85
+ }
86
+
87
+ function trapFocus(e) {
88
+ if (e.key !== "Tab") return;
89
+
90
+ const dialog = document.getElementById("confirm-dialog");
91
+ const focusable = dialog.querySelectorAll(
92
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',
93
+ );
94
+ const first = focusable[0];
95
+ const last = focusable[focusable.length - 1];
96
+
97
+ if (e.shiftKey && document.activeElement === first) {
98
+ e.preventDefault();
99
+ last.focus();
100
+ } else if (!e.shiftKey && document.activeElement === last) {
101
+ e.preventDefault();
102
+ first.focus();
103
+ }
104
+ }
105
+ ```
106
+
107
+ **Keyboard behaviour:**
108
+
109
+ - Tab cycles through focusable elements inside the dialog only
110
+ - Shift+Tab reverses cycle, stays inside dialog
111
+ - Escape closes the dialog and returns focus to trigger
112
+
113
+ **Note:** `aria-modal="true"` tells screen readers to ignore content outside the dialog. Some older screen readers (JAWS < 2019) do not support this — for maximum compatibility, also set `aria-hidden="true"` on sibling elements outside the dialog when it is open.
114
+
115
+ ---
116
+
117
+ ## Pattern: Disclosure (Accordion)
118
+
119
+ ```html
120
+ <div class="accordion">
121
+ <h3>
122
+ <button id="acc-btn-1" aria-expanded="false" aria-controls="acc-panel-1">
123
+ What is your return policy?
124
+ </button>
125
+ </h3>
126
+ <div id="acc-panel-1" role="region" aria-labelledby="acc-btn-1" hidden>
127
+ <p>We offer 30-day returns on all products...</p>
128
+ </div>
129
+ </div>
130
+ ```
131
+
132
+ ```js
133
+ document.querySelectorAll(".accordion button").forEach((btn) => {
134
+ btn.addEventListener("click", () => {
135
+ const expanded = btn.getAttribute("aria-expanded") === "true";
136
+ const panel = document.getElementById(btn.getAttribute("aria-controls"));
137
+
138
+ btn.setAttribute("aria-expanded", String(!expanded));
139
+ panel.hidden = expanded;
140
+ });
141
+ });
142
+ ```
143
+
144
+ **Note:** For accordions where only one panel can be open at a time, update all other buttons to `aria-expanded="false"` and hide their panels when one is opened.
145
+
146
+ ---
147
+
148
+ ## Pattern: Tab Panel
149
+
150
+ ```html
151
+ <div class="tabs">
152
+ <div role="tablist" aria-label="Account sections">
153
+ <button
154
+ role="tab"
155
+ id="tab-profile"
156
+ aria-selected="true"
157
+ aria-controls="panel-profile"
158
+ tabindex="0"
159
+ >
160
+ Profile
161
+ </button>
162
+ <button
163
+ role="tab"
164
+ id="tab-billing"
165
+ aria-selected="false"
166
+ aria-controls="panel-billing"
167
+ tabindex="-1"
168
+ >
169
+ Billing
170
+ </button>
171
+ <button
172
+ role="tab"
173
+ id="tab-security"
174
+ aria-selected="false"
175
+ aria-controls="panel-security"
176
+ tabindex="-1"
177
+ >
178
+ Security
179
+ </button>
180
+ </div>
181
+
182
+ <div id="panel-profile" role="tabpanel" aria-labelledby="tab-profile">
183
+ Profile settings content...
184
+ </div>
185
+ <div id="panel-billing" role="tabpanel" aria-labelledby="tab-billing" hidden>
186
+ Billing content...
187
+ </div>
188
+ <div
189
+ id="panel-security"
190
+ role="tabpanel"
191
+ aria-labelledby="tab-security"
192
+ hidden
193
+ >
194
+ Security content...
195
+ </div>
196
+ </div>
197
+ ```
198
+
199
+ **Keyboard behaviour (arrow key navigation pattern):**
200
+
201
+ - Left/Right arrow: move between tabs (automatic activation) or just move focus (manual activation)
202
+ - Home: first tab; End: last tab
203
+ - Tab: moves into the active panel content
204
+ - Only the selected tab is in tab order (tabindex="0"); others are tabindex="-1"
205
+
206
+ ---
207
+
208
+ ## Pattern: Combobox (Searchable Select)
209
+
210
+ Combobox is the most complex widget pattern. Use a library (Radix UI, Headless UI, Downshift) unless you have a strong reason to roll your own.
211
+
212
+ ```html
213
+ <label for="country-input">Country</label>
214
+ <div class="combobox-wrapper">
215
+ <input
216
+ id="country-input"
217
+ type="text"
218
+ role="combobox"
219
+ aria-expanded="false"
220
+ aria-haspopup="listbox"
221
+ aria-autocomplete="list"
222
+ aria-controls="country-listbox"
223
+ aria-activedescendant=""
224
+ autocomplete="off"
225
+ />
226
+ <ul id="country-listbox" role="listbox" aria-label="Countries" hidden>
227
+ <li role="option" id="opt-us" aria-selected="false">United States</li>
228
+ <li role="option" id="opt-ca" aria-selected="false">Canada</li>
229
+ <li role="option" id="opt-gb" aria-selected="false">United Kingdom</li>
230
+ </ul>
231
+ </div>
232
+ ```
233
+
234
+ **Keyboard behaviour:**
235
+
236
+ - Type to filter options
237
+ - Down arrow opens listbox and moves to first option
238
+ - Up/Down arrow navigates options (update `aria-activedescendant` on input)
239
+ - Enter selects highlighted option
240
+ - Escape closes listbox without selection, returns focus to input
241
+
242
+ ---
243
+
244
+ ## Pattern: Live Regions
245
+
246
+ Live regions announce dynamic content changes to screen readers without moving focus.
247
+
248
+ ```html
249
+ <!-- Polite: announce after current speech completes -->
250
+ <!-- Use for: save confirmations, search result counts, non-critical updates -->
251
+ <div aria-live="polite" aria-atomic="true" id="status-message">
252
+ <!-- JS injects: "3 results found" or "Changes saved." -->
253
+ </div>
254
+
255
+ <!-- Assertive: interrupt immediately -->
256
+ <!-- Use sparingly: critical errors only -->
257
+ <div aria-live="assertive" role="alert" id="critical-error">
258
+ <!-- JS injects: "Session expired. Please log in again." -->
259
+ </div>
260
+
261
+ <!-- Log: cumulative announcements (chat, activity feed) -->
262
+ <div aria-live="polite" role="log" aria-label="Chat messages">
263
+ <div>Alice: Hello!</div>
264
+ <div>Bob: Hi there!</div>
265
+ <!-- New messages appended here get announced -->
266
+ </div>
267
+ ```
268
+
269
+ **Important implementation details:**
270
+
271
+ - The live region element must exist in the DOM BEFORE content is injected — don't create it dynamically
272
+ - `aria-atomic="true"` announces the entire region contents; `false` (default) announces only the changed portion
273
+ - `aria-relevant="additions"` (default) announces only added content; "all" announces additions and removals
274
+ - Empty the container briefly before re-injecting to ensure re-announcement of the same message:
275
+
276
+ ```js
277
+ function announce(message, type = "polite") {
278
+ const region = document.getElementById("status-message");
279
+ region.textContent = ""; // Clear first
280
+ // Small timeout allows screen readers to register the change
281
+ requestAnimationFrame(() => {
282
+ region.textContent = message;
283
+ });
284
+ }
285
+ ```
286
+
287
+ ---
288
+
289
+ ## Pattern: Navigation Menu with Dropdown
290
+
291
+ ```html
292
+ <nav aria-label="Main navigation">
293
+ <ul role="list">
294
+ <li>
295
+ <a href="/">Home</a>
296
+ </li>
297
+ <li>
298
+ <button
299
+ id="products-btn"
300
+ aria-expanded="false"
301
+ aria-haspopup="true"
302
+ aria-controls="products-menu"
303
+ >
304
+ Products
305
+ </button>
306
+ <ul id="products-menu" role="list" hidden>
307
+ <li><a href="/products/widget">Widget</a></li>
308
+ <li><a href="/products/gadget">Gadget</a></li>
309
+ </ul>
310
+ </li>
311
+ <li>
312
+ <a href="/about">About</a>
313
+ </li>
314
+ </ul>
315
+ </nav>
316
+ ```
317
+
318
+ **Keyboard behaviour:**
319
+
320
+ - Enter/Space on trigger button: toggle submenu (`aria-expanded`)
321
+ - Escape: close submenu, return focus to trigger button
322
+ - Tab: moves to next interactive element (closes submenus)
323
+
324
+ ---
325
+
326
+ ## Pattern: Form Error Handling
327
+
328
+ ```html
329
+ <!-- 1. On submit, move focus to error summary -->
330
+ <div
331
+ id="error-summary"
332
+ role="alert"
333
+ tabindex="-1"
334
+ aria-labelledby="error-heading"
335
+ >
336
+ <h2 id="error-heading">3 errors need to be corrected</h2>
337
+ <ul>
338
+ <li><a href="#email-field">Email: Enter a valid email address</a></li>
339
+ <li><a href="#phone-field">Phone: Enter a valid phone number</a></li>
340
+ <li>
341
+ <a href="#dob-field">Date of birth: Enter a date in MM/DD/YYYY format</a>
342
+ </li>
343
+ </ul>
344
+ </div>
345
+
346
+ <!-- 2. Individual field errors -->
347
+ <div class="field-group">
348
+ <label for="email-field">Email address</label>
349
+ <input
350
+ id="email-field"
351
+ type="email"
352
+ aria-required="true"
353
+ aria-invalid="true"
354
+ aria-describedby="email-error"
355
+ value="john@"
356
+ />
357
+ <span id="email-error" class="field-error">
358
+ Enter a valid email address (e.g. you@example.com)
359
+ </span>
360
+ </div>
361
+ ```
362
+
363
+ ```js
364
+ function handleSubmit(e) {
365
+ e.preventDefault();
366
+ const errors = validateForm();
367
+ if (errors.length) {
368
+ renderErrors(errors);
369
+ // Move focus to error summary
370
+ document.getElementById("error-summary").focus();
371
+ }
372
+ }
373
+ ```
374
+
375
+ ---
376
+
377
+ ## Pattern: Icon Button (Button with No Visible Text)
378
+
379
+ ```html
380
+ <!-- Bad: no accessible name -->
381
+ <button onclick="closeDialog()">
382
+ <svg><!-- X icon --></svg>
383
+ </button>
384
+
385
+ <!-- Good: aria-label provides the accessible name -->
386
+ <button aria-label="Close dialog" onclick="closeDialog()">
387
+ <svg aria-hidden="true" focusable="false"><!-- X icon --></svg>
388
+ </button>
389
+
390
+ <!-- Good: visually hidden text -->
391
+ <button onclick="closeDialog()">
392
+ <svg aria-hidden="true" focusable="false"><!-- X icon --></svg>
393
+ <span class="sr-only">Close dialog</span>
394
+ </button>
395
+ ```
396
+
397
+ ```css
398
+ /* Screen-reader-only utility class */
399
+ .sr-only {
400
+ position: absolute;
401
+ width: 1px;
402
+ height: 1px;
403
+ padding: 0;
404
+ margin: -1px;
405
+ overflow: hidden;
406
+ clip: rect(0, 0, 0, 0);
407
+ white-space: nowrap;
408
+ border: 0;
409
+ }
410
+ ```
411
+
412
+ ---
413
+
414
+ ## Pattern: Toggle / Switch
415
+
416
+ ```html
417
+ <button
418
+ role="switch"
419
+ aria-checked="false"
420
+ id="dark-mode-toggle"
421
+ onclick="toggleDarkMode(this)"
422
+ >
423
+ Dark mode
424
+ </button>
425
+ ```
426
+
427
+ ```js
428
+ function toggleDarkMode(btn) {
429
+ const isOn = btn.getAttribute("aria-checked") === "true";
430
+ btn.setAttribute("aria-checked", String(!isOn));
431
+ document.body.classList.toggle("dark", !isOn);
432
+ }
433
+ ```
434
+
435
+ Screen readers will announce: "Dark mode, switch, off" or "Dark mode, switch, on".
436
+
437
+ ---
438
+
439
+ ## Pattern: Breadcrumb Navigation
440
+
441
+ ```html
442
+ <nav aria-label="Breadcrumb">
443
+ <ol>
444
+ <li><a href="/">Home</a></li>
445
+ <li><a href="/products">Products</a></li>
446
+ <li><a href="/products/widgets">Widgets</a></li>
447
+ <li aria-current="page">Super Widget Pro</li>
448
+ </ol>
449
+ </nav>
450
+ ```
451
+
452
+ `aria-current="page"` identifies the current page in the breadcrumb trail.
453
+
454
+ ---
455
+
456
+ ## Pattern: Data Table with Sort
457
+
458
+ ```html
459
+ <table>
460
+ <caption>
461
+ Q1 2024 Sales by Region
462
+ </caption>
463
+ <thead>
464
+ <tr>
465
+ <th scope="col">
466
+ <button aria-sort="ascending" onclick="sortByRegion()">Region</button>
467
+ </th>
468
+ <th scope="col">
469
+ <button aria-sort="none" onclick="sortByRevenue()">Revenue</button>
470
+ </th>
471
+ </tr>
472
+ </thead>
473
+ <tbody>
474
+ <tr>
475
+ <td>North</td>
476
+ <td>$48,000</td>
477
+ </tr>
478
+ </tbody>
479
+ </table>
480
+ ```
481
+
482
+ `aria-sort` values: `"ascending"`, `"descending"`, `"none"`, `"other"`. Update on click.
483
+
484
+ ---
485
+
486
+ ## Focus Management Reference
487
+
488
+ | Scenario | Action |
489
+ | ------------------------ | ---------------------------------------------------------------------- |
490
+ | Modal opens | Move focus to modal heading or first interactive element |
491
+ | Modal closes | Return focus to the element that triggered the modal |
492
+ | Route change (SPA) | Move focus to `<h1>` or `<main>` (add `tabindex="-1"`) |
493
+ | Toast/notification | Announce via `aria-live="polite"` — do not move focus |
494
+ | Critical alert | Announce via `role="alert"` — do not move focus unless action required |
495
+ | Inline form error | Add `aria-invalid`, `aria-describedby` — do not move focus mid-entry |
496
+ | Form submit error | Move focus to error summary element |
497
+ | Delete item from list | Move focus to next item, previous item, or list container |
498
+ | Expandable content added | If triggered by user, optionally move focus; otherwise use `aria-live` |
499
+
500
+ ---
501
+
502
+ ## Screen Reader Announcement Cheat Sheet
503
+
504
+ | HTML / ARIA | VoiceOver | NVDA |
505
+ | --------------------------------------- | ------------------------------------ | ---------------------------------- |
506
+ | `<button>Submit</button>` | "Submit, button" | "Submit button" |
507
+ | `<a href>Read more</a>` | "Read more, link" | "Read more link" |
508
+ | `<input required aria-invalid="true">` | "text field, required, invalid data" | "invalid entry, text" |
509
+ | `role="dialog" aria-labelledby="title"` | Announces title, "web dialog" | Opens virtual buffer inside dialog |
510
+ | `aria-expanded="false"` | "collapsed" | "collapsed" |
511
+ | `aria-expanded="true"` | "expanded" | "expanded" |
512
+ | `aria-checked="true"` (role=checkbox) | "checked" | "checked" |
513
+ | `aria-live="polite"` | Announces after current speech | Announces after current speech |
514
+ | `role="alert"` | Interrupts immediately | Interrupts immediately |
515
+ | `aria-hidden="true"` | Element skipped | Element skipped |
516
+ | `aria-label="Close dialog"` | "Close dialog, button" | "Close dialog button" |
517
+
518
+ ---
519
+
520
+ ## When to NOT use ARIA
521
+
522
+ - **`aria-label` on a `<div>`** — unless it has a role that warrants a label
523
+ - **`role="button"` on an `<a href>`** — use `<button>` instead; `<a>` is for navigation
524
+ - **`aria-hidden` on the `<body>`** — this hides the entire page from AT
525
+ - **`aria-required` without visual indication** — always pair with visible label text or `*`
526
+ - **Nested interactive ARIA widgets without keyboard** — adding role without keyboard support breaks access
527
+ - **`tabindex="1"` or higher** — disrupts natural tab order; use DOM order instead
528
+ - **`aria-label` that conflicts with visible text** — violates 2.5.3 Label in Name