@hegemonart/get-design-done 1.41.5 → 1.43.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 (434) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +1120 -1029
  4. package/README.md +158 -154
  5. package/SKILL.md +42 -42
  6. package/agents/README.md +53 -53
  7. package/agents/a11y-mapper.md +3 -3
  8. package/agents/component-benchmark-harvester.md +8 -8
  9. package/agents/component-benchmark-synthesizer.md +11 -11
  10. package/agents/component-taxonomy-mapper.md +5 -5
  11. package/agents/compose-executor.md +25 -25
  12. package/agents/conflict-resolver.md +8 -8
  13. package/agents/cost-forecaster.md +12 -12
  14. package/agents/decision-journal-exporter.md +5 -5
  15. package/agents/design-advisor.md +19 -19
  16. package/agents/design-assumptions-analyzer.md +16 -16
  17. package/agents/design-auditor.md +39 -39
  18. package/agents/design-authority-watcher.md +28 -28
  19. package/agents/design-component-generator.md +27 -27
  20. package/agents/design-context-builder.md +66 -66
  21. package/agents/design-context-checker-gate.md +5 -5
  22. package/agents/design-context-checker.md +20 -20
  23. package/agents/design-discussant.md +23 -23
  24. package/agents/design-doc-writer.md +12 -12
  25. package/agents/design-executor.md +38 -38
  26. package/agents/design-figma-writer.md +31 -31
  27. package/agents/design-fixer.md +27 -27
  28. package/agents/design-integration-checker-gate.md +5 -5
  29. package/agents/design-integration-checker.md +29 -29
  30. package/agents/design-paper-writer.md +14 -14
  31. package/agents/design-pattern-mapper.md +9 -9
  32. package/agents/design-pencil-writer.md +12 -12
  33. package/agents/design-phase-researcher.md +14 -14
  34. package/agents/design-plan-checker.md +13 -13
  35. package/agents/design-planner.md +24 -24
  36. package/agents/design-reflector.md +48 -48
  37. package/agents/design-research-synthesizer.md +21 -21
  38. package/agents/design-start-writer.md +7 -7
  39. package/agents/design-update-checker.md +8 -8
  40. package/agents/design-verifier-gate.md +5 -5
  41. package/agents/design-verifier.md +80 -80
  42. package/agents/ds-generator.md +14 -14
  43. package/agents/ds-migration-planner.md +12 -12
  44. package/agents/email-executor.md +26 -26
  45. package/agents/experiment-result-ingester.md +10 -10
  46. package/agents/flutter-executor.md +28 -28
  47. package/agents/gdd-graph-refresh.md +10 -10
  48. package/agents/gdd-intel-updater.md +11 -11
  49. package/agents/gdd-learnings-extractor.md +2 -2
  50. package/agents/motion-mapper.md +8 -8
  51. package/agents/motion-verifier.md +16 -16
  52. package/agents/pdf-executor.md +27 -27
  53. package/agents/perf-analyzer.md +20 -20
  54. package/agents/pr-commenter.md +24 -24
  55. package/agents/prototype-gate.md +29 -29
  56. package/agents/quality-gate-runner.md +21 -21
  57. package/agents/rollout-coordinator.md +8 -8
  58. package/agents/swift-executor.md +41 -41
  59. package/agents/ticket-sync-agent.md +19 -19
  60. package/agents/token-mapper.md +6 -6
  61. package/agents/user-research-synthesizer.md +13 -13
  62. package/agents/visual-hierarchy-mapper.md +2 -2
  63. package/dist/claude-code/.claude/skills/add-backlog/SKILL.md +48 -0
  64. package/dist/claude-code/.claude/skills/analyze-dependencies/SKILL.md +95 -0
  65. package/dist/claude-code/.claude/skills/apply-reflections/SKILL.md +92 -0
  66. package/dist/claude-code/.claude/skills/apply-reflections/apply-reflections-procedure.md +170 -0
  67. package/dist/claude-code/.claude/skills/audit/SKILL.md +79 -0
  68. package/dist/claude-code/.claude/skills/bandit-status/SKILL.md +94 -0
  69. package/dist/claude-code/.claude/skills/benchmark/SKILL.md +65 -0
  70. package/dist/claude-code/.claude/skills/bootstrap-ds/SKILL.md +43 -0
  71. package/dist/claude-code/.claude/skills/brief/SKILL.md +128 -0
  72. package/dist/claude-code/.claude/skills/budget/SKILL.md +45 -0
  73. package/dist/claude-code/.claude/skills/cache-manager/SKILL.md +66 -0
  74. package/dist/claude-code/.claude/skills/cache-manager/cache-policy.md +126 -0
  75. package/dist/claude-code/.claude/skills/check-update/SKILL.md +98 -0
  76. package/dist/claude-code/.claude/skills/compare/SKILL.md +82 -0
  77. package/dist/claude-code/.claude/skills/compare/compare-rubric.md +171 -0
  78. package/dist/claude-code/.claude/skills/complete-cycle/SKILL.md +81 -0
  79. package/dist/claude-code/.claude/skills/connections/SKILL.md +71 -0
  80. package/dist/claude-code/.claude/skills/connections/connections-onboarding.md +608 -0
  81. package/dist/claude-code/.claude/skills/continue/SKILL.md +24 -0
  82. package/dist/claude-code/.claude/skills/darkmode/SKILL.md +76 -0
  83. package/dist/claude-code/.claude/skills/darkmode/darkmode-audit-procedure.md +258 -0
  84. package/dist/claude-code/.claude/skills/debug/SKILL.md +41 -0
  85. package/dist/claude-code/.claude/skills/debug/debug-feedback-loops.md +119 -0
  86. package/dist/claude-code/.claude/skills/design/SKILL.md +99 -0
  87. package/dist/claude-code/.claude/skills/design/design-procedure.md +304 -0
  88. package/dist/claude-code/.claude/skills/discover/SKILL.md +72 -0
  89. package/dist/claude-code/.claude/skills/discover/discover-procedure.md +222 -0
  90. package/dist/claude-code/.claude/skills/discuss/SKILL.md +96 -0
  91. package/dist/claude-code/.claude/skills/do/SKILL.md +45 -0
  92. package/dist/claude-code/.claude/skills/explore/SKILL.md +105 -0
  93. package/dist/claude-code/.claude/skills/explore/explore-procedure.md +267 -0
  94. package/dist/claude-code/.claude/skills/export/SKILL.md +30 -0
  95. package/dist/claude-code/.claude/skills/extract-learnings/SKILL.md +98 -0
  96. package/dist/claude-code/.claude/skills/fast/SKILL.md +91 -0
  97. package/dist/claude-code/.claude/skills/figma-extract/SKILL.md +64 -0
  98. package/dist/claude-code/.claude/skills/figma-write/SKILL.md +39 -0
  99. package/dist/claude-code/.claude/skills/graphify/SKILL.md +49 -0
  100. package/dist/claude-code/.claude/skills/health/SKILL.md +99 -0
  101. package/dist/claude-code/.claude/skills/health/health-mcp-detection.md +44 -0
  102. package/dist/claude-code/.claude/skills/health/health-skill-length-report.md +69 -0
  103. package/dist/claude-code/.claude/skills/help/SKILL.md +87 -0
  104. package/dist/claude-code/.claude/skills/list-assumptions/SKILL.md +61 -0
  105. package/dist/claude-code/.claude/skills/locale/SKILL.md +51 -0
  106. package/dist/claude-code/.claude/skills/map/SKILL.md +89 -0
  107. package/dist/claude-code/.claude/skills/migrate/SKILL.md +70 -0
  108. package/dist/claude-code/.claude/skills/new-cycle/SKILL.md +37 -0
  109. package/dist/claude-code/.claude/skills/new-cycle/milestone-completeness-rubric.md +87 -0
  110. package/dist/claude-code/.claude/skills/new-project/SKILL.md +53 -0
  111. package/dist/claude-code/.claude/skills/next/SKILL.md +68 -0
  112. package/dist/claude-code/.claude/skills/note/SKILL.md +48 -0
  113. package/dist/claude-code/.claude/skills/openrouter-status/SKILL.md +86 -0
  114. package/dist/claude-code/.claude/skills/optimize/SKILL.md +97 -0
  115. package/dist/claude-code/.claude/skills/pause/SKILL.md +77 -0
  116. package/dist/claude-code/.claude/skills/peer-cli-add/SKILL.md +88 -0
  117. package/dist/claude-code/.claude/skills/peer-cli-add/peer-cli-protocol.md +161 -0
  118. package/dist/claude-code/.claude/skills/peer-cli-customize/SKILL.md +90 -0
  119. package/dist/claude-code/.claude/skills/peers/SKILL.md +96 -0
  120. package/dist/claude-code/.claude/skills/plan/SKILL.md +105 -0
  121. package/dist/claude-code/.claude/skills/plan/plan-procedure.md +278 -0
  122. package/dist/claude-code/.claude/skills/plant-seed/SKILL.md +48 -0
  123. package/dist/claude-code/.claude/skills/pr-branch/SKILL.md +32 -0
  124. package/dist/claude-code/.claude/skills/progress/SKILL.md +95 -0
  125. package/dist/claude-code/.claude/skills/quality-gate/SKILL.md +90 -0
  126. package/dist/claude-code/.claude/skills/quality-gate/threat-modeling.md +101 -0
  127. package/dist/claude-code/.claude/skills/quick/SKILL.md +44 -0
  128. package/dist/claude-code/.claude/skills/reapply-patches/SKILL.md +32 -0
  129. package/dist/claude-code/.claude/skills/recall/SKILL.md +75 -0
  130. package/dist/claude-code/.claude/skills/reflect/SKILL.md +85 -0
  131. package/dist/claude-code/.claude/skills/reflect/procedures/capability-gap-scan.md +120 -0
  132. package/dist/claude-code/.claude/skills/report-issue/SKILL.md +53 -0
  133. package/dist/claude-code/.claude/skills/report-issue/report-issue-procedure.md +120 -0
  134. package/dist/claude-code/.claude/skills/resume/SKILL.md +93 -0
  135. package/dist/claude-code/.claude/skills/review-backlog/SKILL.md +46 -0
  136. package/dist/claude-code/.claude/skills/review-decisions/SKILL.md +42 -0
  137. package/dist/claude-code/.claude/skills/roi/SKILL.md +54 -0
  138. package/dist/claude-code/.claude/skills/rollout-status/SKILL.md +35 -0
  139. package/dist/claude-code/.claude/skills/router/SKILL.md +89 -0
  140. package/dist/claude-code/.claude/skills/router/capability-gap-emitter.md +65 -0
  141. package/dist/claude-code/.claude/skills/router/router-pick-emitter.md +78 -0
  142. package/dist/claude-code/.claude/skills/router/router-rules.md +84 -0
  143. package/dist/claude-code/.claude/skills/scan/SKILL.md +92 -0
  144. package/dist/claude-code/.claude/skills/scan/scan-procedure.md +732 -0
  145. package/dist/claude-code/.claude/skills/settings/SKILL.md +87 -0
  146. package/dist/claude-code/.claude/skills/ship/SKILL.md +48 -0
  147. package/dist/claude-code/.claude/skills/sketch/SKILL.md +78 -0
  148. package/dist/claude-code/.claude/skills/sketch-wrap-up/SKILL.md +92 -0
  149. package/dist/claude-code/.claude/skills/skill-manifest/SKILL.md +79 -0
  150. package/dist/claude-code/.claude/skills/spike/SKILL.md +67 -0
  151. package/dist/claude-code/.claude/skills/spike-wrap-up/SKILL.md +86 -0
  152. package/dist/claude-code/.claude/skills/start/SKILL.md +67 -0
  153. package/dist/claude-code/.claude/skills/start/start-procedure.md +115 -0
  154. package/dist/claude-code/.claude/skills/stats/SKILL.md +51 -0
  155. package/dist/claude-code/.claude/skills/style/SKILL.md +71 -0
  156. package/dist/claude-code/.claude/skills/style/style-doc-procedure.md +150 -0
  157. package/dist/claude-code/.claude/skills/synthesize/SKILL.md +94 -0
  158. package/dist/claude-code/.claude/skills/timeline/SKILL.md +66 -0
  159. package/dist/claude-code/.claude/skills/todo/SKILL.md +64 -0
  160. package/dist/claude-code/.claude/skills/turn-closeout/SKILL.md +95 -0
  161. package/dist/claude-code/.claude/skills/undo/SKILL.md +31 -0
  162. package/dist/claude-code/.claude/skills/unlock-decision/SKILL.md +54 -0
  163. package/dist/claude-code/.claude/skills/update/SKILL.md +56 -0
  164. package/dist/claude-code/.claude/skills/using-gdd/SKILL.md +78 -0
  165. package/dist/claude-code/.claude/skills/verify/SKILL.md +113 -0
  166. package/dist/claude-code/.claude/skills/verify/verify-procedure.md +512 -0
  167. package/dist/claude-code/.claude/skills/warm-cache/SKILL.md +81 -0
  168. package/dist/claude-code/.claude/skills/watch-authorities/SKILL.md +82 -0
  169. package/dist/claude-code/.claude/skills/zoom-out/SKILL.md +26 -0
  170. package/package.json +8 -2
  171. package/reference/DEPRECATIONS.md +21 -7
  172. package/reference/STATE-TEMPLATE.md +26 -26
  173. package/reference/accessibility.md +13 -13
  174. package/reference/adr-format.md +13 -13
  175. package/reference/ai-native-tool-interface.md +5 -5
  176. package/reference/anti-patterns.md +9 -9
  177. package/reference/architecture-vocabulary.md +31 -31
  178. package/reference/audit-scoring.md +13 -13
  179. package/reference/authority-feeds.md +36 -36
  180. package/reference/bandit-integration.md +25 -25
  181. package/reference/brand-voice.md +36 -36
  182. package/reference/capability-gap-stage-gate.md +20 -20
  183. package/reference/checklists.md +26 -26
  184. package/reference/cli-localization.md +13 -13
  185. package/reference/codex-tools.md +2 -2
  186. package/reference/color-theory.md +28 -28
  187. package/reference/component-authoring.md +4 -4
  188. package/reference/components/README.md +13 -13
  189. package/reference/components/TEMPLATE.md +13 -13
  190. package/reference/components/accordion.md +15 -15
  191. package/reference/components/alert.md +25 -25
  192. package/reference/components/badge.md +18 -18
  193. package/reference/components/breadcrumbs.md +24 -24
  194. package/reference/components/button.md +21 -21
  195. package/reference/components/card.md +13 -13
  196. package/reference/components/checkbox.md +20 -20
  197. package/reference/components/chip.md +20 -20
  198. package/reference/components/command-palette.md +15 -15
  199. package/reference/components/date-picker.md +22 -22
  200. package/reference/components/drawer.md +13 -13
  201. package/reference/components/file-upload.md +22 -22
  202. package/reference/components/input.md +18 -18
  203. package/reference/components/label.md +25 -25
  204. package/reference/components/link.md +19 -19
  205. package/reference/components/list.md +17 -17
  206. package/reference/components/menu.md +19 -19
  207. package/reference/components/modal-dialog.md +16 -16
  208. package/reference/components/navbar.md +19 -19
  209. package/reference/components/pagination.md +18 -18
  210. package/reference/components/popover.md +12 -12
  211. package/reference/components/progress.md +18 -18
  212. package/reference/components/radio.md +17 -17
  213. package/reference/components/rich-text-editor.md +24 -24
  214. package/reference/components/select-combobox.md +16 -16
  215. package/reference/components/sidebar.md +15 -15
  216. package/reference/components/skeleton.md +20 -20
  217. package/reference/components/slider.md +20 -20
  218. package/reference/components/stepper.md +24 -24
  219. package/reference/components/switch.md +19 -19
  220. package/reference/components/table.md +21 -21
  221. package/reference/components/tabs.md +11 -11
  222. package/reference/components/toast.md +19 -19
  223. package/reference/components/tooltip.md +19 -19
  224. package/reference/components/tree.md +17 -17
  225. package/reference/composition.md +38 -38
  226. package/reference/config-schema.md +37 -37
  227. package/reference/context-md-format.md +9 -9
  228. package/reference/contrast-advanced.md +29 -29
  229. package/reference/conversational-ui.md +17 -17
  230. package/reference/cost-governance.md +14 -14
  231. package/reference/css-grid-layout.md +8 -8
  232. package/reference/cycle-handoff-preamble.md +3 -3
  233. package/reference/data-visualization.md +67 -67
  234. package/reference/debugger-philosophy.md +5 -5
  235. package/reference/design-system-guidance.md +21 -21
  236. package/reference/design-systems-catalog.md +20 -20
  237. package/reference/design-variants.md +11 -11
  238. package/reference/domains/civic-patterns.md +10 -10
  239. package/reference/domains/finance-patterns.md +9 -9
  240. package/reference/domains/gaming-patterns.md +9 -9
  241. package/reference/domains/healthcare-patterns.md +11 -11
  242. package/reference/ds-bootstrap-rubric.md +13 -13
  243. package/reference/email-design.md +22 -22
  244. package/reference/emotional-design.md +10 -10
  245. package/reference/error-recovery.md +11 -11
  246. package/reference/export-formats.md +7 -7
  247. package/reference/figma-sandbox.md +6 -6
  248. package/reference/first-principles.md +10 -10
  249. package/reference/form-patterns.md +26 -26
  250. package/reference/framer-motion-patterns.md +49 -49
  251. package/reference/gdd-runtime-audit.md +17 -17
  252. package/reference/gdd-threat-model.md +44 -44
  253. package/reference/gemini-tools.md +3 -3
  254. package/reference/gestalt.md +24 -24
  255. package/reference/heuristics.md +32 -32
  256. package/reference/i18n.md +44 -44
  257. package/reference/iconography.md +24 -24
  258. package/reference/image-optimization.md +14 -14
  259. package/reference/information-architecture.md +47 -47
  260. package/reference/intel-schema.md +1 -1
  261. package/reference/known-failure-modes.md +37 -37
  262. package/reference/meta-rules.md +5 -5
  263. package/reference/migrations/material-3-to-4.md +17 -17
  264. package/reference/migrations/mui-v6.md +16 -16
  265. package/reference/migrations/shadcn-v2.md +25 -25
  266. package/reference/migrations/tailwind-v4.md +21 -21
  267. package/reference/model-prices.md +3 -3
  268. package/reference/model-tiers.md +40 -40
  269. package/reference/motion-advanced.md +21 -21
  270. package/reference/motion-easings.md +29 -29
  271. package/reference/motion-interpolate.md +1 -1
  272. package/reference/motion-spring.md +13 -13
  273. package/reference/motion-transition-taxonomy.md +34 -34
  274. package/reference/motion.md +31 -31
  275. package/reference/multi-author-model.md +13 -13
  276. package/reference/native-platforms.md +28 -28
  277. package/reference/notification-routing.md +6 -6
  278. package/reference/onboarding-progressive-disclosure.md +32 -32
  279. package/reference/openrouter-tier-mapping.md +8 -8
  280. package/reference/palette-catalog.md +37 -37
  281. package/reference/parallelism-rules.md +20 -20
  282. package/reference/peer-cli-capabilities.md +14 -14
  283. package/reference/peer-protocols.md +21 -21
  284. package/reference/perf-budget.md +21 -21
  285. package/reference/performance.md +22 -22
  286. package/reference/platforms.md +51 -51
  287. package/reference/pr-review-integration.md +7 -7
  288. package/reference/prices/antigravity.md +3 -3
  289. package/reference/prices/augment.md +3 -3
  290. package/reference/prices/claude.md +2 -2
  291. package/reference/prices/cline.md +4 -4
  292. package/reference/prices/codebuddy.md +3 -3
  293. package/reference/prices/codex.md +2 -2
  294. package/reference/prices/copilot.md +3 -3
  295. package/reference/prices/cursor.md +3 -3
  296. package/reference/prices/gemini.md +2 -2
  297. package/reference/prices/kilo.md +3 -3
  298. package/reference/prices/opencode.md +4 -4
  299. package/reference/prices/qwen.md +2 -2
  300. package/reference/prices/trae.md +3 -3
  301. package/reference/prices/windsurf.md +3 -3
  302. package/reference/prices.openrouter.md +5 -5
  303. package/reference/print-design.md +36 -36
  304. package/reference/priority-matrix.md +2 -2
  305. package/reference/project-skills-guide.md +3 -3
  306. package/reference/proportion-systems.md +23 -23
  307. package/reference/pseudonymization-rules.md +30 -30
  308. package/reference/registry.json +7 -0
  309. package/reference/retrieval-contract.md +14 -14
  310. package/reference/review-format.md +7 -7
  311. package/reference/rollout-coordination.md +10 -10
  312. package/reference/rtl-cjk-cultural.md +39 -39
  313. package/reference/runtime-models.md +28 -28
  314. package/reference/shared-preamble.md +26 -26
  315. package/reference/skill-authoring-contract.md +16 -16
  316. package/reference/skill-placeholders.md +71 -0
  317. package/reference/start-interview.md +10 -10
  318. package/reference/style-vocabulary.md +25 -25
  319. package/reference/surfaces.md +4 -4
  320. package/reference/ticket-sync.md +9 -9
  321. package/reference/typography.md +64 -64
  322. package/reference/user-research.md +54 -54
  323. package/reference/variable-fonts-loading.md +15 -15
  324. package/reference/visual-hierarchy-layout.md +41 -41
  325. package/scripts/lib/build/factory.cjs +62 -0
  326. package/scripts/lib/build/harness-configs.cjs +64 -0
  327. package/scripts/lib/manifest/prose-denylist.json +1 -1
  328. package/sdk/cli/commands/build.ts +106 -0
  329. package/sdk/cli/index.js +84 -2
  330. package/sdk/cli/index.ts +7 -0
  331. package/skills/add-backlog/SKILL.md +3 -3
  332. package/skills/analyze-dependencies/SKILL.md +10 -10
  333. package/skills/apply-reflections/SKILL.md +13 -13
  334. package/skills/apply-reflections/apply-reflections-procedure.md +20 -20
  335. package/skills/audit/SKILL.md +7 -7
  336. package/skills/bandit-status/SKILL.md +7 -7
  337. package/skills/benchmark/SKILL.md +7 -7
  338. package/skills/bootstrap-ds/SKILL.md +10 -10
  339. package/skills/brief/SKILL.md +20 -20
  340. package/skills/budget/SKILL.md +4 -4
  341. package/skills/cache-manager/SKILL.md +6 -6
  342. package/skills/cache-manager/cache-policy.md +5 -5
  343. package/skills/check-update/SKILL.md +5 -5
  344. package/skills/compare/SKILL.md +15 -15
  345. package/skills/compare/compare-rubric.md +17 -17
  346. package/skills/complete-cycle/SKILL.md +5 -5
  347. package/skills/connections/SKILL.md +11 -11
  348. package/skills/connections/connections-onboarding.md +76 -76
  349. package/skills/continue/SKILL.md +2 -2
  350. package/skills/darkmode/SKILL.md +17 -17
  351. package/skills/darkmode/darkmode-audit-procedure.md +7 -7
  352. package/skills/debug/SKILL.md +3 -3
  353. package/skills/debug/debug-feedback-loops.md +12 -12
  354. package/skills/design/SKILL.md +12 -12
  355. package/skills/design/design-procedure.md +23 -23
  356. package/skills/discover/SKILL.md +7 -7
  357. package/skills/discover/discover-procedure.md +18 -18
  358. package/skills/discuss/SKILL.md +12 -12
  359. package/skills/do/SKILL.md +1 -1
  360. package/skills/explore/SKILL.md +21 -21
  361. package/skills/explore/explore-procedure.md +48 -48
  362. package/skills/export/SKILL.md +9 -9
  363. package/skills/extract-learnings/SKILL.md +5 -5
  364. package/skills/fast/SKILL.md +7 -7
  365. package/skills/figma-extract/SKILL.md +11 -11
  366. package/skills/figma-write/SKILL.md +6 -6
  367. package/skills/graphify/SKILL.md +4 -4
  368. package/skills/health/SKILL.md +16 -16
  369. package/skills/health/health-mcp-detection.md +3 -3
  370. package/skills/health/health-skill-length-report.md +6 -6
  371. package/skills/help/SKILL.md +1 -1
  372. package/skills/list-assumptions/SKILL.md +4 -4
  373. package/skills/map/SKILL.md +12 -12
  374. package/skills/migrate/SKILL.md +5 -5
  375. package/skills/new-cycle/SKILL.md +2 -2
  376. package/skills/new-cycle/milestone-completeness-rubric.md +16 -16
  377. package/skills/new-project/SKILL.md +1 -1
  378. package/skills/next/SKILL.md +5 -5
  379. package/skills/note/SKILL.md +1 -1
  380. package/skills/openrouter-status/SKILL.md +4 -4
  381. package/skills/optimize/SKILL.md +15 -15
  382. package/skills/pause/SKILL.md +5 -5
  383. package/skills/peer-cli-add/SKILL.md +11 -11
  384. package/skills/peer-cli-add/peer-cli-protocol.md +39 -39
  385. package/skills/peer-cli-customize/SKILL.md +14 -14
  386. package/skills/peers/SKILL.md +4 -4
  387. package/skills/plan/SKILL.md +13 -13
  388. package/skills/plan/plan-procedure.md +24 -24
  389. package/skills/plant-seed/SKILL.md +4 -4
  390. package/skills/pr-branch/SKILL.md +2 -2
  391. package/skills/progress/SKILL.md +15 -15
  392. package/skills/quality-gate/SKILL.md +22 -22
  393. package/skills/quality-gate/threat-modeling.md +19 -19
  394. package/skills/quick/SKILL.md +5 -5
  395. package/skills/reapply-patches/SKILL.md +7 -7
  396. package/skills/reflect/SKILL.md +3 -3
  397. package/skills/reflect/procedures/capability-gap-scan.md +11 -11
  398. package/skills/report-issue/SKILL.md +5 -5
  399. package/skills/report-issue/report-issue-procedure.md +27 -27
  400. package/skills/resume/SKILL.md +9 -9
  401. package/skills/review-backlog/SKILL.md +3 -3
  402. package/skills/review-decisions/SKILL.md +3 -3
  403. package/skills/roi/SKILL.md +5 -5
  404. package/skills/rollout-status/SKILL.md +4 -4
  405. package/skills/router/SKILL.md +11 -11
  406. package/skills/router/capability-gap-emitter.md +6 -6
  407. package/skills/router/router-pick-emitter.md +9 -9
  408. package/skills/router/router-rules.md +7 -7
  409. package/skills/scan/SKILL.md +16 -16
  410. package/skills/scan/scan-procedure.md +42 -42
  411. package/skills/settings/SKILL.md +2 -2
  412. package/skills/ship/SKILL.md +7 -7
  413. package/skills/sketch/SKILL.md +10 -10
  414. package/skills/sketch-wrap-up/SKILL.md +12 -12
  415. package/skills/skill-manifest/SKILL.md +5 -5
  416. package/skills/spike/SKILL.md +7 -7
  417. package/skills/spike-wrap-up/SKILL.md +13 -13
  418. package/skills/start/SKILL.md +8 -8
  419. package/skills/start/start-procedure.md +9 -9
  420. package/skills/stats/SKILL.md +5 -5
  421. package/skills/style/SKILL.md +12 -12
  422. package/skills/style/style-doc-procedure.md +12 -12
  423. package/skills/synthesize/SKILL.md +10 -10
  424. package/skills/timeline/SKILL.md +4 -4
  425. package/skills/todo/SKILL.md +3 -3
  426. package/skills/turn-closeout/SKILL.md +10 -10
  427. package/skills/unlock-decision/SKILL.md +3 -3
  428. package/skills/update/SKILL.md +9 -9
  429. package/skills/using-gdd/SKILL.md +17 -17
  430. package/skills/verify/SKILL.md +13 -13
  431. package/skills/verify/verify-procedure.md +34 -34
  432. package/skills/warm-cache/SKILL.md +8 -8
  433. package/skills/watch-authorities/SKILL.md +9 -9
  434. package/skills/zoom-out/SKILL.md +4 -4
@@ -1,4 +1,4 @@
1
- # Input Benchmark Spec
1
+ # Input - Benchmark Spec
2
2
 
3
3
  **Harvested from**: Material 3, Carbon, Ant Design, Mantine, Polaris, Fluent 2, Atlassian, shadcn/ui
4
4
  **Wave**: 1 · **Category**: Inputs
@@ -47,7 +47,7 @@ Label * ← <label for="id"> — always visible
47
47
  | Number | `type="number"` or `inputmode="numeric"` | Material 3, Ant, Mantine |
48
48
 
49
49
  **Norm** (≥6/18): outlined with floating or static label is the most-cited default.
50
- **Diverge**: floating vs. static label Material 3 uses floating; Carbon, Polaris, Atlassian use static (above). Static label is safer for a11y (floating requires JavaScript + ARIA management).
50
+ **Diverge**: floating vs. static label - Material 3 uses floating; Carbon, Polaris, Atlassian use static (above). Static label is safer for a11y (floating requires JavaScript + ARIA management).
51
51
 
52
52
  ---
53
53
 
@@ -55,14 +55,14 @@ Label * ← <label for="id"> — always visible
55
55
 
56
56
  | State | Trigger | Visual | ARIA |
57
57
  |-------|---------|--------|------|
58
- | default | | Resting border | |
59
- | hover | pointer over | Border lightens 20% | |
60
- | focus | keyboard / click | 2px focus-visible ring or thickened border | |
61
- | filled | has value | Label lifts (floating) or stays static | |
58
+ | default | - | Resting border | - |
59
+ | hover | pointer over | Border lightens 20% | - |
60
+ | focus | keyboard / click | 2px focus-visible ring or thickened border | - |
61
+ | filled | has value | Label lifts (floating) or stays static | - |
62
62
  | disabled | `disabled` attr | 38% opacity; cursor: not-allowed | `disabled` attr |
63
63
  | read-only | `readonly` attr | No border change; cursor: default | `readonly` attr |
64
64
  | error | invalid | Red/error border + icon + error message | `aria-invalid="true"` + `aria-describedby` |
65
- | success | valid (opt.) | Green border + check icon | |
65
+ | success | valid (opt.) | Green border + check icon | - |
66
66
 
67
67
  ---
68
68
 
@@ -75,20 +75,20 @@ Label * ← <label for="id"> — always visible
75
75
  | lg | 48px | 16px | 16px | 16px |
76
76
 
77
77
  **Norm**: 40px default height (Carbon, Polaris, Fluent, Atlassian confirm).
78
- Minimum width: 200px narrower inputs invite input truncation and frustrate users.
78
+ Minimum width: 200px - narrower inputs invite input truncation and frustrate users.
79
79
 
80
- Cross-link: `reference/surfaces.md` hit area ≥44px via padding; `reference/typography.md` label sizing.
80
+ Cross-link: `reference/surfaces.md` - hit area ≥44px via padding; `reference/typography.md` - label sizing.
81
81
 
82
82
  ---
83
83
 
84
84
  ## Typography
85
85
 
86
86
  - Label: 14px/500 above input; 12px when floating in focus/filled state
87
- - Placeholder: 14px/400; color at 40% contrast minimum never the only label
87
+ - Placeholder: 14px/400; color at 40% contrast minimum - never the only label
88
88
  - Helper/error: 12px/400; full contrast for error messages
89
89
  - **Placeholder is not a label**: it disappears on type, fails contrast, and cannot be announced by screen readers as a persistent label
90
90
 
91
- Cross-link: `reference/typography.md` text-wrap, font-smoothing rules
91
+ Cross-link: `reference/typography.md` - text-wrap, font-smoothing rules
92
92
 
93
93
  ---
94
94
 
@@ -99,7 +99,7 @@ Cross-link: `reference/typography.md` — text-wrap, font-smoothing rules
99
99
 
100
100
  ### Keyboard Contract
101
101
 
102
- *Quoted verbatim from WAI-ARIA APG https://www.w3.org/WAI/ARIA/apg/patterns/textbox/ W3C 2024*
102
+ *Quoted verbatim from WAI-ARIA APG - https://www.w3.org/WAI/ARIA/apg/patterns/textbox/ - W3C - 2024*
103
103
 
104
104
  | Key | Action |
105
105
  |-----|--------|
@@ -115,7 +115,7 @@ Password toggle and clear button must be keyboard accessible (Enter/Space activa
115
115
 
116
116
  ### Accessibility Rules
117
117
 
118
- - Label MUST be associated via `<label for="id">` or `aria-label` `placeholder` alone is not sufficient
118
+ - Label MUST be associated via `<label for="id">` or `aria-label` - `placeholder` alone is not sufficient
119
119
  - Error message MUST be linked via `aria-describedby` and triggered before or alongside visual indicator
120
120
  - `aria-invalid="true"` MUST be set on the input when in error state
121
121
  - `aria-required="true"` for required fields (supplement with visual `*` + legend)
@@ -133,7 +133,7 @@ Cross-link: `reference/accessibility.md`
133
133
  | border colour | 100ms | ease | Focus/error state border change |
134
134
  | error message in | 150ms | ease-out | Slide-down + fade; respect prefers-reduced-motion |
135
135
 
136
- Cross-link: `reference/motion.md` `prefers-reduced-motion` guard required on label float
136
+ Cross-link: `reference/motion.md` - `prefers-reduced-motion` guard required on label float
137
137
 
138
138
  ---
139
139
 
@@ -146,10 +146,10 @@ Cross-link: `reference/motion.md` — `prefers-reduced-motion` guard required on
146
146
  - Use `autocomplete` attributes for common fields (name, email, address) *(Polaris, Fluent)*
147
147
 
148
148
  ### Don't
149
- - Don't use `placeholder` as the only label it disappears and fails contrast *(Carbon, Polaris, Atlassian)*
149
+ - Don't use `placeholder` as the only label - it disappears and fails contrast *(Carbon, Polaris, Atlassian)*
150
150
  - Don't show error state before the user has had a chance to input (premature validation) *(Polaris)*
151
- - Don't remove the label on focus to create space floating labels break screen readers *(Atlassian)*
152
- - Don't use `type="number"` for things that aren't math operands (phone, ZIP) use `inputmode` instead *(Mantine, Carbon)*
151
+ - Don't remove the label on focus to create space - floating labels break screen readers *(Atlassian)*
152
+ - Don't use `type="number"` for things that aren't math operands (phone, ZIP) - use `inputmode` instead *(Mantine, Carbon)*
153
153
 
154
154
  ---
155
155
 
@@ -157,7 +157,7 @@ Cross-link: `reference/motion.md` — `prefers-reduced-motion` guard required on
157
157
 
158
158
  | Anti-pattern | Entry |
159
159
  |--------------|-------|
160
- | Placeholder-as-label | `reference/anti-patterns.md` no dedicated BAN yet; cross-ref accessibility.md |
160
+ | Placeholder-as-label | `reference/anti-patterns.md` - no dedicated BAN yet; cross-ref accessibility.md |
161
161
 
162
162
  ---
163
163
 
@@ -1,4 +1,4 @@
1
- # Label Benchmark Spec
1
+ # Label - Benchmark Spec
2
2
 
3
3
  **Harvested from**: WAI-ARIA APG, Carbon, Material 3, Mantine, Polaris, Atlassian, Fluent 2, shadcn/ui
4
4
  **Wave**: 1 · **Category**: Inputs
@@ -7,7 +7,7 @@
7
7
 
8
8
  ## Purpose
9
9
 
10
- A label is the visible text that identifies a form control to the user and to assistive technology. It is the most critical accessibility primitive in forms every input, select, checkbox, radio, and switch MUST have an associated label. Labels are distinct from placeholders (which disappear) and from hints (which supplement but do not replace). *(WAI-ARIA APG, Carbon, Polaris, Atlassian all agree)*
10
+ A label is the visible text that identifies a form control to the user and to assistive technology. It is the most critical accessibility primitive in forms - every input, select, checkbox, radio, and switch MUST have an associated label. Labels are distinct from placeholders (which disappear) and from hints (which supplement but do not replace). *(WAI-ARIA APG, Carbon, Polaris, Atlassian all agree)*
11
11
 
12
12
  ---
13
13
 
@@ -42,26 +42,26 @@ Alternative (legend for group):
42
42
 
43
43
  | Variant | Description | Systems |
44
44
  |---------|-------------|---------|
45
- | Static label (above) | Fixed position above control most accessible | Carbon, Polaris, Atlassian, Fluent |
45
+ | Static label (above) | Fixed position above control - most accessible | Carbon, Polaris, Atlassian, Fluent |
46
46
  | Floating label | Starts inside control, floats up on focus/fill | Material 3, Mantine, shadcn |
47
47
  | Inline label | Label beside control (radio/checkbox) | All |
48
48
  | Legend | Group label inside `<fieldset>` | WAI-ARIA APG, all (for groups) |
49
49
  | Visually hidden | Accessible but not visible (e.g., search icon button) | WAI-ARIA APG, Carbon |
50
50
 
51
- **Norm** (≥5/18): static label above the control is the most accessible and implementation-simple approach recommended as the default.
52
- **Diverge**: floating label Material 3 and Mantine use it; Carbon, Polaris, Atlassian explicitly recommend static labels for a11y predictability. Floating labels require JavaScript, break if JS fails, and require careful `aria-*` management.
51
+ **Norm** (≥5/18): static label above the control is the most accessible and implementation-simple approach - recommended as the default.
52
+ **Diverge**: floating label - Material 3 and Mantine use it; Carbon, Polaris, Atlassian explicitly recommend static labels for a11y predictability. Floating labels require JavaScript, break if JS fails, and require careful `aria-*` management.
53
53
 
54
54
  ---
55
55
 
56
56
  ## States
57
57
 
58
- Labels are not interactive they have no hover/focus states of their own. However:
58
+ Labels are not interactive - they have no hover/focus states of their own. However:
59
59
 
60
60
  | Control State | Label Behaviour |
61
61
  |---------------|-----------------|
62
62
  | error | Label colour may shift to error colour (optional); error text replaces/appends helper |
63
63
  | disabled | Label at 38% opacity alongside disabled control |
64
- | required | Required indicator (`*`) added never remove from DOM |
64
+ | required | Required indicator (`*`) added - never remove from DOM |
65
65
  | focus (on control) | Label may shift colour to primary (Material 3 floating) |
66
66
 
67
67
  ---
@@ -70,19 +70,19 @@ Labels are not interactive — they have no hover/focus states of their own. How
70
70
 
71
71
  | Property | Value | Notes |
72
72
  |----------|-------|-------|
73
- | Font size | 14px (static); 12px (floating small state) | |
73
+ | Font size | 14px (static); 12px (floating - small state) | |
74
74
  | Weight | 500 | Slightly heavier than body to distinguish |
75
75
  | Gap: label → control | 4–8px | *(Carbon: 4px, Material 3: 8px)* |
76
76
  | Required asterisk gap | 2px left of asterisk | |
77
77
  | Width | Match control width | Labels should not exceed their control |
78
78
 
79
- Cross-link: `reference/typography.md` label sizing rules
79
+ Cross-link: `reference/typography.md` - label sizing rules
80
80
 
81
81
  ---
82
82
 
83
83
  ## Typography
84
84
 
85
- - Label text: 14px/500 slightly heavier than body 400; distinguishes from surrounding content
85
+ - Label text: 14px/500 - slightly heavier than body 400; distinguishes from surrounding content
86
86
  - Required `*`: same size, colour matches error or primary brand colour
87
87
  - Visually-hidden labels: use CSS `.sr-only` pattern (clip + overflow: hidden + absolute), never `display:none` or `visibility:hidden`
88
88
 
@@ -108,20 +108,20 @@ Cross-link: `reference/typography.md` — label sizing rules
108
108
 
109
109
  ### Association Methods (in order of preference)
110
110
 
111
- *Per WAI-ARIA APG https://www.w3.org/WAI/ARIA/apg/ W3C 2024*
111
+ *Per WAI-ARIA APG - https://www.w3.org/WAI/ARIA/apg/ - W3C - 2024*
112
112
 
113
- 1. **`<label for="id">`** native HTML; best browser + AT support; clicking label focuses control
114
- 2. **`aria-labelledby="label-id"`** when label cannot use `for` (complex composites)
115
- 3. **`aria-label="string"`** when no visible label is possible (icon-only controls); last resort
116
- 4. **`<legend>` inside `<fieldset>`** for groups of related controls; not replaceable by `aria-label`
113
+ 1. **`<label for="id">`** - native HTML; best browser + AT support; clicking label focuses control
114
+ 2. **`aria-labelledby="label-id"`** - when label cannot use `for` (complex composites)
115
+ 3. **`aria-label="string"`** - when no visible label is possible (icon-only controls); last resort
116
+ 4. **`<legend>` inside `<fieldset>`** - for groups of related controls; not replaceable by `aria-label`
117
117
 
118
118
  ### Accessibility Rules
119
119
 
120
- - NEVER use `placeholder` as the only label it disappears on input and fails colour contrast *(WAI-ARIA APG, WCAG 1.3.1)*
120
+ - NEVER use `placeholder` as the only label - it disappears on input and fails colour contrast *(WAI-ARIA APG, WCAG 1.3.1)*
121
121
  - Required fields: mark with `aria-required="true"` on the control AND `*` visually; provide a form-level note explaining the `*` convention
122
- - Optional fields: prefer marking optional fields with "(optional)" text over marking every required field with `*` reduces asterisk clutter in long forms *(Polaris, Carbon)*
123
- - Group labels: `<legend>` inside `<fieldset>` is the ONLY proper group label technique `aria-label` on a `<div>` group is inadequate for radio/checkbox groups in most AT
124
- - Visually hidden labels: use `.sr-only` CSS never `display:none` (removes from AT tree) or `visibility:hidden`
122
+ - Optional fields: prefer marking optional fields with "(optional)" text over marking every required field with `*` - reduces asterisk clutter in long forms *(Polaris, Carbon)*
123
+ - Group labels: `<legend>` inside `<fieldset>` is the ONLY proper group label technique - `aria-label` on a `<div>` group is inadequate for radio/checkbox groups in most AT
124
+ - Visually hidden labels: use `.sr-only` CSS - never `display:none` (removes from AT tree) or `visibility:hidden`
125
125
 
126
126
  ---
127
127
 
@@ -129,15 +129,15 @@ Cross-link: `reference/typography.md` — label sizing rules
129
129
 
130
130
  ### Do
131
131
  - Place labels above controls, not beside them, for forms wider than 240px *(Carbon, Polaris, Atlassian)*
132
- - Use `<label for="id">` the click zone extends to the full label, improving usability *(WAI-ARIA APG, all)*
132
+ - Use `<label for="id">` - the click zone extends to the full label, improving usability *(WAI-ARIA APG, all)*
133
133
  - Explain the `*` required indicator once near the top of the form *(Polaris, Carbon)*
134
- - Use `<legend>` for groups it is read before each option in the group *(WAI-ARIA APG)*
134
+ - Use `<legend>` for groups - it is read before each option in the group *(WAI-ARIA APG)*
135
135
 
136
136
  ### Don't
137
- - Don't use `placeholder` as the only label it fails at 3 accessibility criteria *(WAI-ARIA APG, WCAG 1.3.1, 1.4.3)*
138
- - Don't use `display:none` on labels removes them from the AT accessibility tree *(WAI-ARIA APG)*
139
- - Don't write labels as questions ("What is your name?") prefer noun phrases ("Full name") *(Polaris, Carbon)*
140
- - Don't truncate label text ellipsis hides required information from all users *(Atlassian, Carbon)*
137
+ - Don't use `placeholder` as the only label - it fails at 3 accessibility criteria *(WAI-ARIA APG, WCAG 1.3.1, 1.4.3)*
138
+ - Don't use `display:none` on labels - removes them from the AT accessibility tree *(WAI-ARIA APG)*
139
+ - Don't write labels as questions ("What is your name?") - prefer noun phrases ("Full name") *(Polaris, Carbon)*
140
+ - Don't truncate label text - ellipsis hides required information from all users *(Atlassian, Carbon)*
141
141
 
142
142
  ---
143
143
 
@@ -1,4 +1,4 @@
1
- # Link Benchmark Spec
1
+ # Link - Benchmark Spec
2
2
 
3
3
  **Harvested from**: Carbon, Polaris, Primer (GitHub), Fluent 2, WAI-ARIA APG, Material 3, Mantine, Atlassian
4
4
  **Wave**: 1 · **Category**: Inputs
@@ -7,7 +7,7 @@
7
7
 
8
8
  ## Purpose
9
9
 
10
- A link navigates the user to a new resource another page, section, or external URL. It is the semantic counterpart to Button: if clicking takes the user somewhere, it is a `<a href>` link; if it triggers an action in the current context, it is a button. Never reverse these roles. *(Carbon, Primer, WAI-ARIA APG all enforce this boundary)*
10
+ A link navigates the user to a new resource - another page, section, or external URL. It is the semantic counterpart to Button: if clicking takes the user somewhere, it is a `<a href>` link; if it triggers an action in the current context, it is a button. Never reverse these roles. *(Carbon, Primer, WAI-ARIA APG all enforce this boundary)*
11
11
 
12
12
  ---
13
13
 
@@ -28,11 +28,11 @@ External: [Open dashboard ↗]
28
28
  | Part | Required | Notes |
29
29
  |------|----------|-------|
30
30
  | `<a href>` | Yes | Native element; href MUST be a real URL or `#anchor` |
31
- | Visible label | Yes | Descriptive of destination not "click here" or "read more" |
31
+ | Visible label | Yes | Descriptive of destination - not "click here" or "read more" |
32
32
  | Underline | Conditional | Required for inline links in body text; optional for standalone/nav |
33
33
  | Visited state | No | Encouraged for inline links in long-form content |
34
34
  | External icon | Conditional | Required when `target="_blank"`; 12–14px, inline-aligned |
35
- | `rel="noopener noreferrer"` | Yes (external) | Security prevents opener access |
35
+ | `rel="noopener noreferrer"` | Yes (external) | Security - prevents opener access |
36
36
 
37
37
  ---
38
38
 
@@ -47,8 +47,8 @@ External: [Open dashboard ↗]
47
47
  | Destructive | Rare; red colour for delete-via-link patterns | Polaris (critical link) |
48
48
  | Disabled | `aria-disabled="true"` + `tabindex="-1"` | Carbon, Primer |
49
49
 
50
- **Norm** (≥6/18): inline links in body text MUST be underlined colour alone fails WCAG 1.4.1.
51
- **Diverge**: visited state Primer and Carbon use it for documentation; most SaaS systems omit it.
50
+ **Norm** (≥6/18): inline links in body text MUST be underlined - colour alone fails WCAG 1.4.1.
51
+ **Diverge**: visited state - Primer and Carbon use it for documentation; most SaaS systems omit it.
52
52
 
53
53
  ---
54
54
 
@@ -57,9 +57,9 @@ External: [Open dashboard ↗]
57
57
  | State | Visual | ARIA / HTML |
58
58
  |-------|--------|-------------|
59
59
  | default | Underline + colour | `href` present |
60
- | hover | Colour shift (10% darker/lighter) | |
61
- | focus | 2px focus-visible ring | |
62
- | active / pressed | Colour darkens + subtle scale 0.98 | |
60
+ | hover | Colour shift (10% darker/lighter) | - |
61
+ | focus | 2px focus-visible ring | - |
62
+ | active / pressed | Colour darkens + subtle scale 0.98 | - |
63
63
  | visited | Distinct colour (purple conventional) | `:visited` pseudo-class |
64
64
  | disabled | 38% opacity; pointer-events: none | `aria-disabled="true"` + `tabindex="-1"` |
65
65
 
@@ -67,11 +67,11 @@ External: [Open dashboard ↗]
67
67
 
68
68
  ## Sizing & Spacing
69
69
 
70
- - Links inherit parent font-size and line-height do not override
70
+ - Links inherit parent font-size and line-height - do not override
71
71
  - Standalone link min-height: 44px via padding for touch targets
72
72
  - Icon size (external/leading): 12–14px; `vertical-align: middle`; 4px gap from text
73
73
 
74
- Cross-link: `reference/surfaces.md` hit-area pattern for standalone links
74
+ Cross-link: `reference/surfaces.md` - hit-area pattern for standalone links
75
75
 
76
76
  ---
77
77
 
@@ -79,7 +79,7 @@ Cross-link: `reference/surfaces.md` — hit-area pattern for standalone links
79
79
 
80
80
  - Inline links: same weight as surrounding text (400); underline distinguishes them
81
81
  - Standalone links: 400–500 weight; may have leading icon or trailing arrow
82
- - Never use ALL CAPS for links reduces readability and implies different semantics
82
+ - Never use ALL CAPS for links - reduces readability and implies different semantics
83
83
  - Truncate with ellipsis + `title` attribute only when space is genuinely constrained
84
84
 
85
85
  ---
@@ -87,11 +87,11 @@ Cross-link: `reference/surfaces.md` — hit-area pattern for standalone links
87
87
  ## Keyboard & Accessibility
88
88
 
89
89
  > **WAI-ARIA role**: `link` (implicit on `<a href>`)
90
- > **Required attributes**: `href` without it, the element is not a link and has no keyboard access
90
+ > **Required attributes**: `href` - without it, the element is not a link and has no keyboard access
91
91
 
92
92
  ### Keyboard Contract
93
93
 
94
- *Quoted verbatim from WAI-ARIA APG https://www.w3.org/WAI/ARIA/apg/patterns/link/ W3C 2024*
94
+ *Quoted verbatim from WAI-ARIA APG - https://www.w3.org/WAI/ARIA/apg/patterns/link/ - W3C - 2024*
95
95
 
96
96
  | Key | Action |
97
97
  |-----|--------|
@@ -101,11 +101,11 @@ Cross-link: `reference/surfaces.md` — hit-area pattern for standalone links
101
101
 
102
102
  ### Accessibility Rules
103
103
 
104
- - Link text MUST describe the destination "click here" and "read more" fail 2.4.6 (descriptive labels)
104
+ - Link text MUST describe the destination - "click here" and "read more" fail 2.4.6 (descriptive labels)
105
105
  - External links opening in new tab MUST disclose this: append "(opens in new tab)" to `aria-label`, or use a visually-hidden span
106
106
  - `target="_blank"` MUST always be paired with `rel="noopener noreferrer"` (security + performance)
107
- - Disabled links: `aria-disabled="true"` + `tabindex="-1"` never `href=""` or `href="#"`
108
- - Inline links in body text MUST be underlined colour alone is insufficient for WCAG 1.4.1 (non-text contrast)
107
+ - Disabled links: `aria-disabled="true"` + `tabindex="-1"` - never `href=""` or `href="#"`
108
+ - Inline links in body text MUST be underlined - colour alone is insufficient for WCAG 1.4.1 (non-text contrast)
109
109
  - Icon-only links (e.g., social icons) MUST have `aria-label` describing the destination
110
110
 
111
111
  ---
@@ -123,12 +123,12 @@ Cross-link: `reference/surfaces.md` — hit-area pattern for standalone links
123
123
 
124
124
  ### Do
125
125
  - Use descriptive link text: "View account settings" not "click here" *(Polaris, Carbon, WAI-ARIA APG)*
126
- - Underline inline links in body text *(Carbon, Polaris, WAI-ARIA APG WCAG 1.4.1)*
126
+ - Underline inline links in body text *(Carbon, Polaris, WAI-ARIA APG - WCAG 1.4.1)*
127
127
  - Add `rel="noopener noreferrer"` to all `target="_blank"` links *(Primer, Carbon, Fluent 2)*
128
128
  - Disclose new-tab behavior in `aria-label` or visually-hidden text *(WAI-ARIA APG, Primer)*
129
129
 
130
130
  ### Don't
131
- - Don't use `<a>` without `href` it's not a link, not keyboard-accessible, and will confuse screen readers *(WAI-ARIA APG)*
131
+ - Don't use `<a>` without `href` - it's not a link, not keyboard-accessible, and will confuse screen readers *(WAI-ARIA APG)*
132
132
  - Don't use `<button>` when the action is navigation *(Carbon, Primer)*
133
133
  - Don't rely on colour alone to distinguish links from surrounding text *(WCAG 1.4.1)*
134
134
  - Don't open links in new tabs unexpectedly without disclosure *(Polaris, Primer, WCAG 3.2.5)*
@@ -1,4 +1,4 @@
1
- # List (Interactive & Display) Benchmark Spec
1
+ # List (Interactive & Display) - Benchmark Spec
2
2
 
3
3
  **Harvested from**: Carbon, Polaris, Material 3, Mantine, WAI-ARIA APG, UUPM (app-interface, MIT)
4
4
  **Wave**: 4 · **Category**: Navigation & Data
@@ -7,7 +7,7 @@
7
7
 
8
8
  ## Purpose
9
9
 
10
- A list component handles two distinct patterns: (1) a display list renders a series of items using semantic `<ul>/<ol>/<li>` HTML no ARIA needed; (2) an interactive list (listbox) presents selectable options with keyboard navigation and selection state. Use a display list for content; use an interactive listbox when users choose one or more items from a set. *(Carbon, Polaris, Material 3 all define separate display and interactive list patterns)*
10
+ A list component handles two distinct patterns: (1) a display list renders a series of items using semantic `<ul>/<ol>/<li>` HTML - no ARIA needed; (2) an interactive list (listbox) presents selectable options with keyboard navigation and selection state. Use a display list for content; use an interactive listbox when users choose one or more items from a set. *(Carbon, Polaris, Material 3 all define separate display and interactive list patterns)*
11
11
 
12
12
  ---
13
13
 
@@ -58,8 +58,8 @@ Display list: Interactive listbox:
58
58
 
59
59
  | State | Trigger | Visual | ARIA |
60
60
  |-------|---------|--------|------|
61
- | default | | Items visible; none selected | `aria-selected="false"` on all options |
62
- | option-hover | pointer over | 8% overlay | |
61
+ | default | - | Items visible; none selected | `aria-selected="false"` on all options |
62
+ | option-hover | pointer over | 8% overlay | - |
63
63
  | option-focus | keyboard focus | 2px focus-visible ring | managed via `tabindex` |
64
64
  | option-selected | click or Enter/Space | Filled highlight; checkmark for multi-select | `aria-selected="true"` |
65
65
  | option-disabled | disabled prop | 38% opacity; cursor: default | `aria-disabled="true"` |
@@ -90,7 +90,7 @@ Display list: Interactive listbox:
90
90
  - Empty state heading: heading-sm, center-aligned
91
91
  - Empty state body: body-sm, `color: --text-subtle`
92
92
 
93
- Cross-link: `reference/typography.md` body-sm, heading scale
93
+ Cross-link: `reference/typography.md` - body-sm, heading scale
94
94
 
95
95
  ---
96
96
 
@@ -101,7 +101,7 @@ Cross-link: `reference/typography.md` — body-sm, heading scale
101
101
 
102
102
  ### Keyboard Contract
103
103
 
104
- *Quoted verbatim from WAI-ARIA APG https://www.w3.org/WAI/ARIA/apg/patterns/listbox/ W3C 2024*
104
+ *Quoted verbatim from WAI-ARIA APG - https://www.w3.org/WAI/ARIA/apg/patterns/listbox/ - W3C - 2024*
105
105
 
106
106
  | Key | Action |
107
107
  |-----|--------|
@@ -117,14 +117,14 @@ Cross-link: `reference/typography.md` — body-sm, heading scale
117
117
 
118
118
  ### Accessibility Rules
119
119
 
120
- - Display lists use native `<ul>/<li>` no ARIA roles needed; they are already accessible
121
- - Interactive lists MUST use `role="listbox"` + `role="option"` not `<ul>/<li>` with click handlers
120
+ - Display lists use native `<ul>/<li>` - no ARIA roles needed; they are already accessible
121
+ - Interactive lists MUST use `role="listbox"` + `role="option"` - not `<ul>/<li>` with click handlers
122
122
  - `aria-selected` MUST be present on every `role="option"` (either `true` or `false`)
123
123
  - Multi-select listbox MUST declare `aria-multiselectable="true"` on the container
124
124
  - Virtual scroll: all options in the virtualised window must have correct `aria-posinset` and `aria-setsize` attributes
125
125
  - Empty state container MUST have `aria-label` or `aria-live` so AT announces the empty state
126
126
 
127
- Cross-link: `reference/accessibility.md` listbox pattern, virtual list accessibility
127
+ Cross-link: `reference/accessibility.md` - listbox pattern, virtual list accessibility
128
128
 
129
129
  ---
130
130
 
@@ -136,25 +136,25 @@ Cross-link: `reference/accessibility.md` — listbox pattern, virtual list acces
136
136
  | Skeleton item shimmer | 1500ms | linear loop | Loading placeholder |
137
137
  | Empty state entry | 150ms | ease-out | Fade in |
138
138
 
139
- **BAN**: Do not animate item reordering unless using a deliberate drag-and-drop library unsolicited reordering causes disorientation.
139
+ **BAN**: Do not animate item reordering unless using a deliberate drag-and-drop library - unsolicited reordering causes disorientation.
140
140
 
141
- Cross-link: `reference/motion.md` skeleton shimmer, list animations
141
+ Cross-link: `reference/motion.md` - skeleton shimmer, list animations
142
142
 
143
143
  ---
144
144
 
145
145
  ## Do / Don't
146
146
 
147
147
  ### Do
148
- - Use native `<ul>/<ol>/<li>` for display-only lists no ARIA needed *(WAI-ARIA APG)*
148
+ - Use native `<ul>/<ol>/<li>` for display-only lists - no ARIA needed *(WAI-ARIA APG)*
149
149
  - Use `role="listbox"` + `role="option"` for selectable lists *(WAI-ARIA APG, Carbon, Polaris)*
150
150
  - Virtualise at > 100 items to prevent DOM bloat *(Carbon, Mantine)*
151
151
  - Provide a meaningful empty state with a CTA when the list can be populated *(Polaris, Material 3)*
152
152
 
153
153
  ### Don't
154
- - Don't use `<div onClick>` list items without `role="option"` keyboard-inaccessible *(WCAG 2.1.1)*
155
- - Don't omit `aria-selected` on options AT cannot determine what is selected *(WAI-ARIA APG)*
156
- - Don't use `<ul>/<li>` with `role="option"` mixing native list semantics and listbox ARIA creates conflicts *(WAI-ARIA)*
157
- - Don't load all items at once when count > 100 renders slowly and wastes memory *(Carbon, Mantine)*
154
+ - Don't use `<div onClick>` list items without `role="option"` - keyboard-inaccessible *(WCAG 2.1.1)*
155
+ - Don't omit `aria-selected` on options - AT cannot determine what is selected *(WAI-ARIA APG)*
156
+ - Don't use `<ul>/<li>` with `role="option"` - mixing native list semantics and listbox ARIA creates conflicts *(WAI-ARIA)*
157
+ - Don't load all items at once when count > 100 - renders slowly and wastes memory *(Carbon, Mantine)*
158
158
 
159
159
  ---
160
160
 
@@ -162,7 +162,7 @@ Cross-link: `reference/motion.md` — skeleton shimmer, list animations
162
162
 
163
163
  | Anti-pattern | Entry |
164
164
  |--------------|-------|
165
- | BAN-04 | `transition: all` on interactive elements `reference/anti-patterns.md#ban-04` |
165
+ | BAN-04 | `transition: all` on interactive elements - `reference/anti-patterns.md#ban-04` |
166
166
 
167
167
  ---
168
168
 
@@ -1,4 +1,4 @@
1
- # Menu (Dropdown / Context Menu) Benchmark Spec
1
+ # Menu (Dropdown / Context Menu) - Benchmark Spec
2
2
 
3
3
  **Harvested from**: Radix UI, WAI-ARIA APG, Carbon, Atlassian, Material 3, Polaris
4
4
  **Wave**: 4 · **Category**: Navigation
@@ -7,7 +7,7 @@
7
7
 
8
8
  ## Purpose
9
9
 
10
- A menu presents a list of actions or options in a temporary overlay anchored to a trigger element. It differs from a Select/Combobox (which chooses a value) a menu executes commands or navigates. Use a Dropdown Menu for trigger-button scenarios; use a Context Menu for right-click/long-press on an element. *(Radix DropdownMenu, Carbon OverflowMenu, Atlassian DropdownMenu, WAI-ARIA APG Menu agree: menus are action lists, not value selectors)*
10
+ A menu presents a list of actions or options in a temporary overlay anchored to a trigger element. It differs from a Select/Combobox (which chooses a value) - a menu executes commands or navigates. Use a Dropdown Menu for trigger-button scenarios; use a Context Menu for right-click/long-press on an element. *(Radix DropdownMenu, Carbon OverflowMenu, Atlassian DropdownMenu, WAI-ARIA APG Menu agree: menus are action lists, not value selectors)*
11
11
 
12
12
  ---
13
13
 
@@ -29,7 +29,7 @@ A menu presents a list of actions or options in a temporary overlay anchored to
29
29
  | Trigger | Yes | `<button>` with `aria-haspopup="menu"` + `aria-expanded` |
30
30
  | Menu container | Yes | `role="menu"` + `aria-labelledby` pointing to trigger |
31
31
  | Menu item | Yes | `role="menuitem"` on each action |
32
- | Separator | No | `role="separator"` groups related items |
32
+ | Separator | No | `role="separator"` - groups related items |
33
33
  | Checkbox item | No | `role="menuitemcheckbox"` + `aria-checked` |
34
34
  | Radio item | No | `role="menuitemradio"` + `aria-checked`; group in `role="group"` |
35
35
  | Sub-menu trigger | No | `role="menuitem"` + `aria-haspopup="menu"` + `aria-expanded` |
@@ -56,7 +56,7 @@ A menu presents a list of actions or options in a temporary overlay anchored to
56
56
 
57
57
  | State | Trigger | Visual | ARIA |
58
58
  |-------|---------|--------|------|
59
- | closed | | Trigger visible; overlay hidden | `aria-expanded="false"` on trigger |
59
+ | closed | - | Trigger visible; overlay hidden | `aria-expanded="false"` on trigger |
60
60
  | open | Click trigger | Overlay visible; first item focused | `aria-expanded="true"` on trigger |
61
61
  | item-hover / focus | Arrow keys or pointer | Item highlight (8% overlay) | `tabindex="-1"` managed via roving tabindex |
62
62
  | item-disabled | `disabled` prop | 38% opacity, cursor: default | `aria-disabled="true"` on item |
@@ -82,12 +82,12 @@ A menu presents a list of actions or options in a temporary overlay anchored to
82
82
 
83
83
  ## Typography
84
84
 
85
- - Item label: body-sm (13–14px), weight 400 not bold; action labels read as text, not controls
85
+ - Item label: body-sm (13–14px), weight 400 - not bold; action labels read as text, not controls
86
86
  - Destructive items: same weight, color token `--color-text-danger`
87
87
  - Keyboard shortcut hints: body-xs (11–12px), muted color, right-aligned, `aria-hidden="true"`
88
88
  - Truncate item labels with `text-overflow: ellipsis`; never wrap item text
89
89
 
90
- Cross-link: `reference/typography.md` body-sm scale
90
+ Cross-link: `reference/typography.md` - body-sm scale
91
91
 
92
92
  ---
93
93
 
@@ -98,7 +98,7 @@ Cross-link: `reference/typography.md` — body-sm scale
98
98
 
99
99
  ### Keyboard Contract
100
100
 
101
- *Quoted verbatim from WAI-ARIA APG https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/ W3C 2024*
101
+ *Quoted verbatim from WAI-ARIA APG - https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/ - W3C - 2024*
102
102
 
103
103
  | Key | Action |
104
104
  |-----|--------|
@@ -115,14 +115,14 @@ Cross-link: `reference/typography.md` — body-sm scale
115
115
 
116
116
  ### Accessibility Rules
117
117
 
118
- - Menu MUST open on click only never on hover for primary open (hover may preview sub-menus)
118
+ - Menu MUST open on click only - never on hover for primary open (hover may preview sub-menus)
119
119
  - All items MUST be reachable by keyboard; no mouse-only items
120
120
  - Focus returns to the trigger element when the menu closes
121
- - Keyboard shortcut labels (e.g. "⌘K") are `aria-hidden="true"` the shortcut must be registered separately
121
+ - Keyboard shortcut labels (e.g. "⌘K") are `aria-hidden="true"` - the shortcut must be registered separately
122
122
  - `role="separator"` dividers are not focusable
123
123
  - Disabled items use `aria-disabled="true"` (keep focusable so AT users know the option exists)
124
124
 
125
- Cross-link: `reference/accessibility.md` focus management, roving tabindex
125
+ Cross-link: `reference/accessibility.md` - focus management, roving tabindex
126
126
 
127
127
  ---
128
128
 
@@ -135,9 +135,9 @@ Cross-link: `reference/accessibility.md` — focus management, roving tabindex
135
135
  | Item highlight | 80ms | ease-out | Background color transition only |
136
136
  | Sub-menu enter | 120ms | ease-out | Same as menu enter |
137
137
 
138
- **BAN**: `transition: all` on menu items triggers layout thrash on width changes.
138
+ **BAN**: `transition: all` on menu items - triggers layout thrash on width changes.
139
139
 
140
- Cross-link: `reference/motion.md` overlay entry pattern, BAN-04
140
+ Cross-link: `reference/motion.md` - overlay entry pattern, BAN-04
141
141
 
142
142
  ---
143
143
 
@@ -145,15 +145,15 @@ Cross-link: `reference/motion.md` — overlay entry pattern, BAN-04
145
145
 
146
146
  ### Do
147
147
  - Use `role="menu"` + `role="menuitem"` for all action menus *(WAI-ARIA APG)*
148
- - Group related items with `role="separator"` keep groups ≤ 7 items *(Carbon, Atlassian)*
148
+ - Group related items with `role="separator"` - keep groups ≤ 7 items *(Carbon, Atlassian)*
149
149
  - Return focus to the trigger on close *(WAI-ARIA APG)*
150
150
  - Use `role="menuitemcheckbox"` for persistent toggle states *(Radix, Material 3)*
151
151
 
152
152
  ### Don't
153
- - Don't open the menu on hover as the primary interaction keyboard users can't discover hover *(WCAG 1.3.3)*
154
- - Don't exceed 2 levels of sub-menus deeply nested menus are cognitively expensive *(Atlassian, Carbon)*
155
- - Don't put form controls (inputs, sliders) inside a menu use a Popover instead *(WAI-ARIA APG)*
156
- - Don't use `<div>` items without `role="menuitem"` invisible to screen readers *(WAI-ARIA)*
153
+ - Don't open the menu on hover as the primary interaction - keyboard users can't discover hover *(WCAG 1.3.3)*
154
+ - Don't exceed 2 levels of sub-menus - deeply nested menus are cognitively expensive *(Atlassian, Carbon)*
155
+ - Don't put form controls (inputs, sliders) inside a menu - use a Popover instead *(WAI-ARIA APG)*
156
+ - Don't use `<div>` items without `role="menuitem"` - invisible to screen readers *(WAI-ARIA)*
157
157
 
158
158
  ---
159
159
 
@@ -161,7 +161,7 @@ Cross-link: `reference/motion.md` — overlay entry pattern, BAN-04
161
161
 
162
162
  | Anti-pattern | Entry |
163
163
  |--------------|-------|
164
- | BAN-04 | `transition: all` on interactive elements `reference/anti-patterns.md#ban-04` |
164
+ | BAN-04 | `transition: all` on interactive elements - `reference/anti-patterns.md#ban-04` |
165
165
 
166
166
  ---
167
167
 
@@ -207,6 +207,6 @@ grep -rn 'role="menu"' src/ | grep -v 'aria-labelledby\|aria-label'
207
207
  </div>
208
208
  ```
209
209
 
210
- **Why it fails**: No `role="menu"` or `role="menuitem"` screen readers cannot announce this as a menu; items are not keyboard-navigable; no arrow-key navigation; trigger lacks `aria-haspopup` and `aria-expanded`.
210
+ **Why it fails**: No `role="menu"` or `role="menuitem"` - screen readers cannot announce this as a menu; items are not keyboard-navigable; no arrow-key navigation; trigger lacks `aria-haspopup` and `aria-expanded`.
211
211
  **Grep detection**: `grep -rn '<div.*onclick\|<div.*onClick' src/ | grep -i 'menu\|dropdown'`
212
212
  **Fix**: Use `<ul role="menu">` with `<li role="menuitem" tabindex="-1">` items, or a headless menu primitive (Radix DropdownMenu, Downshift).