@hegemonart/get-design-done 1.42.0 → 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 (425) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +1080 -1038
  4. package/README.md +157 -155
  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 +3 -3
  64. package/dist/claude-code/.claude/skills/analyze-dependencies/SKILL.md +10 -10
  65. package/dist/claude-code/.claude/skills/apply-reflections/SKILL.md +13 -13
  66. package/dist/claude-code/.claude/skills/apply-reflections/apply-reflections-procedure.md +20 -20
  67. package/dist/claude-code/.claude/skills/audit/SKILL.md +7 -7
  68. package/dist/claude-code/.claude/skills/bandit-status/SKILL.md +7 -7
  69. package/dist/claude-code/.claude/skills/benchmark/SKILL.md +7 -7
  70. package/dist/claude-code/.claude/skills/bootstrap-ds/SKILL.md +10 -10
  71. package/dist/claude-code/.claude/skills/brief/SKILL.md +20 -20
  72. package/dist/claude-code/.claude/skills/budget/SKILL.md +4 -4
  73. package/dist/claude-code/.claude/skills/cache-manager/SKILL.md +6 -6
  74. package/dist/claude-code/.claude/skills/cache-manager/cache-policy.md +5 -5
  75. package/dist/claude-code/.claude/skills/check-update/SKILL.md +5 -5
  76. package/dist/claude-code/.claude/skills/compare/SKILL.md +15 -15
  77. package/dist/claude-code/.claude/skills/compare/compare-rubric.md +17 -17
  78. package/dist/claude-code/.claude/skills/complete-cycle/SKILL.md +5 -5
  79. package/dist/claude-code/.claude/skills/connections/SKILL.md +11 -11
  80. package/dist/claude-code/.claude/skills/connections/connections-onboarding.md +76 -76
  81. package/dist/claude-code/.claude/skills/continue/SKILL.md +2 -2
  82. package/dist/claude-code/.claude/skills/darkmode/SKILL.md +17 -17
  83. package/dist/claude-code/.claude/skills/darkmode/darkmode-audit-procedure.md +7 -7
  84. package/dist/claude-code/.claude/skills/debug/SKILL.md +3 -3
  85. package/dist/claude-code/.claude/skills/debug/debug-feedback-loops.md +12 -12
  86. package/dist/claude-code/.claude/skills/design/SKILL.md +12 -12
  87. package/dist/claude-code/.claude/skills/design/design-procedure.md +23 -23
  88. package/dist/claude-code/.claude/skills/discover/SKILL.md +7 -7
  89. package/dist/claude-code/.claude/skills/discover/discover-procedure.md +18 -18
  90. package/dist/claude-code/.claude/skills/discuss/SKILL.md +12 -12
  91. package/dist/claude-code/.claude/skills/do/SKILL.md +1 -1
  92. package/dist/claude-code/.claude/skills/explore/SKILL.md +21 -21
  93. package/dist/claude-code/.claude/skills/explore/explore-procedure.md +48 -48
  94. package/dist/claude-code/.claude/skills/export/SKILL.md +9 -9
  95. package/dist/claude-code/.claude/skills/extract-learnings/SKILL.md +5 -5
  96. package/dist/claude-code/.claude/skills/fast/SKILL.md +7 -7
  97. package/dist/claude-code/.claude/skills/figma-extract/SKILL.md +11 -11
  98. package/dist/claude-code/.claude/skills/figma-write/SKILL.md +6 -6
  99. package/dist/claude-code/.claude/skills/graphify/SKILL.md +4 -4
  100. package/dist/claude-code/.claude/skills/health/SKILL.md +16 -16
  101. package/dist/claude-code/.claude/skills/health/health-mcp-detection.md +3 -3
  102. package/dist/claude-code/.claude/skills/health/health-skill-length-report.md +6 -6
  103. package/dist/claude-code/.claude/skills/help/SKILL.md +1 -1
  104. package/dist/claude-code/.claude/skills/list-assumptions/SKILL.md +4 -4
  105. package/dist/claude-code/.claude/skills/map/SKILL.md +12 -12
  106. package/dist/claude-code/.claude/skills/migrate/SKILL.md +5 -5
  107. package/dist/claude-code/.claude/skills/new-cycle/SKILL.md +2 -2
  108. package/dist/claude-code/.claude/skills/new-cycle/milestone-completeness-rubric.md +16 -16
  109. package/dist/claude-code/.claude/skills/new-project/SKILL.md +1 -1
  110. package/dist/claude-code/.claude/skills/next/SKILL.md +5 -5
  111. package/dist/claude-code/.claude/skills/note/SKILL.md +1 -1
  112. package/dist/claude-code/.claude/skills/openrouter-status/SKILL.md +4 -4
  113. package/dist/claude-code/.claude/skills/optimize/SKILL.md +15 -15
  114. package/dist/claude-code/.claude/skills/pause/SKILL.md +5 -5
  115. package/dist/claude-code/.claude/skills/peer-cli-add/SKILL.md +11 -11
  116. package/dist/claude-code/.claude/skills/peer-cli-add/peer-cli-protocol.md +39 -39
  117. package/dist/claude-code/.claude/skills/peer-cli-customize/SKILL.md +14 -14
  118. package/dist/claude-code/.claude/skills/peers/SKILL.md +4 -4
  119. package/dist/claude-code/.claude/skills/plan/SKILL.md +13 -13
  120. package/dist/claude-code/.claude/skills/plan/plan-procedure.md +24 -24
  121. package/dist/claude-code/.claude/skills/plant-seed/SKILL.md +4 -4
  122. package/dist/claude-code/.claude/skills/pr-branch/SKILL.md +2 -2
  123. package/dist/claude-code/.claude/skills/progress/SKILL.md +15 -15
  124. package/dist/claude-code/.claude/skills/quality-gate/SKILL.md +22 -22
  125. package/dist/claude-code/.claude/skills/quality-gate/threat-modeling.md +19 -19
  126. package/dist/claude-code/.claude/skills/quick/SKILL.md +5 -5
  127. package/dist/claude-code/.claude/skills/reapply-patches/SKILL.md +7 -7
  128. package/dist/claude-code/.claude/skills/reflect/SKILL.md +3 -3
  129. package/dist/claude-code/.claude/skills/reflect/procedures/capability-gap-scan.md +11 -11
  130. package/dist/claude-code/.claude/skills/report-issue/SKILL.md +5 -5
  131. package/dist/claude-code/.claude/skills/report-issue/report-issue-procedure.md +27 -27
  132. package/dist/claude-code/.claude/skills/resume/SKILL.md +9 -9
  133. package/dist/claude-code/.claude/skills/review-backlog/SKILL.md +3 -3
  134. package/dist/claude-code/.claude/skills/review-decisions/SKILL.md +3 -3
  135. package/dist/claude-code/.claude/skills/roi/SKILL.md +5 -5
  136. package/dist/claude-code/.claude/skills/rollout-status/SKILL.md +4 -4
  137. package/dist/claude-code/.claude/skills/router/SKILL.md +11 -11
  138. package/dist/claude-code/.claude/skills/router/capability-gap-emitter.md +6 -6
  139. package/dist/claude-code/.claude/skills/router/router-pick-emitter.md +9 -9
  140. package/dist/claude-code/.claude/skills/router/router-rules.md +7 -7
  141. package/dist/claude-code/.claude/skills/scan/SKILL.md +16 -16
  142. package/dist/claude-code/.claude/skills/scan/scan-procedure.md +42 -42
  143. package/dist/claude-code/.claude/skills/settings/SKILL.md +2 -2
  144. package/dist/claude-code/.claude/skills/ship/SKILL.md +7 -7
  145. package/dist/claude-code/.claude/skills/sketch/SKILL.md +10 -10
  146. package/dist/claude-code/.claude/skills/sketch-wrap-up/SKILL.md +12 -12
  147. package/dist/claude-code/.claude/skills/skill-manifest/SKILL.md +5 -5
  148. package/dist/claude-code/.claude/skills/spike/SKILL.md +7 -7
  149. package/dist/claude-code/.claude/skills/spike-wrap-up/SKILL.md +13 -13
  150. package/dist/claude-code/.claude/skills/start/SKILL.md +8 -8
  151. package/dist/claude-code/.claude/skills/start/start-procedure.md +9 -9
  152. package/dist/claude-code/.claude/skills/stats/SKILL.md +5 -5
  153. package/dist/claude-code/.claude/skills/style/SKILL.md +12 -12
  154. package/dist/claude-code/.claude/skills/style/style-doc-procedure.md +12 -12
  155. package/dist/claude-code/.claude/skills/synthesize/SKILL.md +10 -10
  156. package/dist/claude-code/.claude/skills/timeline/SKILL.md +4 -4
  157. package/dist/claude-code/.claude/skills/todo/SKILL.md +3 -3
  158. package/dist/claude-code/.claude/skills/turn-closeout/SKILL.md +10 -10
  159. package/dist/claude-code/.claude/skills/unlock-decision/SKILL.md +3 -3
  160. package/dist/claude-code/.claude/skills/update/SKILL.md +9 -9
  161. package/dist/claude-code/.claude/skills/using-gdd/SKILL.md +17 -17
  162. package/dist/claude-code/.claude/skills/verify/SKILL.md +13 -13
  163. package/dist/claude-code/.claude/skills/verify/verify-procedure.md +34 -34
  164. package/dist/claude-code/.claude/skills/warm-cache/SKILL.md +8 -8
  165. package/dist/claude-code/.claude/skills/watch-authorities/SKILL.md +9 -9
  166. package/dist/claude-code/.claude/skills/zoom-out/SKILL.md +4 -4
  167. package/package.json +5 -2
  168. package/reference/DEPRECATIONS.md +10 -10
  169. package/reference/STATE-TEMPLATE.md +26 -26
  170. package/reference/accessibility.md +13 -13
  171. package/reference/adr-format.md +13 -13
  172. package/reference/ai-native-tool-interface.md +5 -5
  173. package/reference/anti-patterns.md +9 -9
  174. package/reference/architecture-vocabulary.md +31 -31
  175. package/reference/audit-scoring.md +13 -13
  176. package/reference/authority-feeds.md +36 -36
  177. package/reference/bandit-integration.md +25 -25
  178. package/reference/brand-voice.md +36 -36
  179. package/reference/capability-gap-stage-gate.md +20 -20
  180. package/reference/checklists.md +26 -26
  181. package/reference/cli-localization.md +13 -13
  182. package/reference/codex-tools.md +2 -2
  183. package/reference/color-theory.md +28 -28
  184. package/reference/component-authoring.md +4 -4
  185. package/reference/components/README.md +13 -13
  186. package/reference/components/TEMPLATE.md +13 -13
  187. package/reference/components/accordion.md +15 -15
  188. package/reference/components/alert.md +25 -25
  189. package/reference/components/badge.md +18 -18
  190. package/reference/components/breadcrumbs.md +24 -24
  191. package/reference/components/button.md +21 -21
  192. package/reference/components/card.md +13 -13
  193. package/reference/components/checkbox.md +20 -20
  194. package/reference/components/chip.md +20 -20
  195. package/reference/components/command-palette.md +15 -15
  196. package/reference/components/date-picker.md +22 -22
  197. package/reference/components/drawer.md +13 -13
  198. package/reference/components/file-upload.md +22 -22
  199. package/reference/components/input.md +18 -18
  200. package/reference/components/label.md +25 -25
  201. package/reference/components/link.md +19 -19
  202. package/reference/components/list.md +17 -17
  203. package/reference/components/menu.md +19 -19
  204. package/reference/components/modal-dialog.md +16 -16
  205. package/reference/components/navbar.md +19 -19
  206. package/reference/components/pagination.md +18 -18
  207. package/reference/components/popover.md +12 -12
  208. package/reference/components/progress.md +18 -18
  209. package/reference/components/radio.md +17 -17
  210. package/reference/components/rich-text-editor.md +24 -24
  211. package/reference/components/select-combobox.md +16 -16
  212. package/reference/components/sidebar.md +15 -15
  213. package/reference/components/skeleton.md +20 -20
  214. package/reference/components/slider.md +20 -20
  215. package/reference/components/stepper.md +24 -24
  216. package/reference/components/switch.md +19 -19
  217. package/reference/components/table.md +21 -21
  218. package/reference/components/tabs.md +11 -11
  219. package/reference/components/toast.md +19 -19
  220. package/reference/components/tooltip.md +19 -19
  221. package/reference/components/tree.md +17 -17
  222. package/reference/composition.md +38 -38
  223. package/reference/config-schema.md +37 -37
  224. package/reference/context-md-format.md +9 -9
  225. package/reference/contrast-advanced.md +29 -29
  226. package/reference/conversational-ui.md +17 -17
  227. package/reference/cost-governance.md +14 -14
  228. package/reference/css-grid-layout.md +8 -8
  229. package/reference/cycle-handoff-preamble.md +3 -3
  230. package/reference/data-visualization.md +67 -67
  231. package/reference/debugger-philosophy.md +5 -5
  232. package/reference/design-system-guidance.md +21 -21
  233. package/reference/design-systems-catalog.md +20 -20
  234. package/reference/design-variants.md +11 -11
  235. package/reference/domains/civic-patterns.md +10 -10
  236. package/reference/domains/finance-patterns.md +9 -9
  237. package/reference/domains/gaming-patterns.md +9 -9
  238. package/reference/domains/healthcare-patterns.md +11 -11
  239. package/reference/ds-bootstrap-rubric.md +13 -13
  240. package/reference/email-design.md +22 -22
  241. package/reference/emotional-design.md +10 -10
  242. package/reference/error-recovery.md +11 -11
  243. package/reference/export-formats.md +7 -7
  244. package/reference/figma-sandbox.md +6 -6
  245. package/reference/first-principles.md +10 -10
  246. package/reference/form-patterns.md +26 -26
  247. package/reference/framer-motion-patterns.md +49 -49
  248. package/reference/gdd-runtime-audit.md +17 -17
  249. package/reference/gdd-threat-model.md +44 -44
  250. package/reference/gemini-tools.md +3 -3
  251. package/reference/gestalt.md +24 -24
  252. package/reference/heuristics.md +32 -32
  253. package/reference/i18n.md +44 -44
  254. package/reference/iconography.md +24 -24
  255. package/reference/image-optimization.md +14 -14
  256. package/reference/information-architecture.md +47 -47
  257. package/reference/intel-schema.md +1 -1
  258. package/reference/known-failure-modes.md +37 -37
  259. package/reference/meta-rules.md +5 -5
  260. package/reference/migrations/material-3-to-4.md +17 -17
  261. package/reference/migrations/mui-v6.md +16 -16
  262. package/reference/migrations/shadcn-v2.md +25 -25
  263. package/reference/migrations/tailwind-v4.md +21 -21
  264. package/reference/model-prices.md +3 -3
  265. package/reference/model-tiers.md +40 -40
  266. package/reference/motion-advanced.md +21 -21
  267. package/reference/motion-easings.md +29 -29
  268. package/reference/motion-interpolate.md +1 -1
  269. package/reference/motion-spring.md +13 -13
  270. package/reference/motion-transition-taxonomy.md +34 -34
  271. package/reference/motion.md +31 -31
  272. package/reference/multi-author-model.md +13 -13
  273. package/reference/native-platforms.md +28 -28
  274. package/reference/notification-routing.md +6 -6
  275. package/reference/onboarding-progressive-disclosure.md +32 -32
  276. package/reference/openrouter-tier-mapping.md +8 -8
  277. package/reference/palette-catalog.md +37 -37
  278. package/reference/parallelism-rules.md +20 -20
  279. package/reference/peer-cli-capabilities.md +14 -14
  280. package/reference/peer-protocols.md +21 -21
  281. package/reference/perf-budget.md +21 -21
  282. package/reference/performance.md +22 -22
  283. package/reference/platforms.md +51 -51
  284. package/reference/pr-review-integration.md +7 -7
  285. package/reference/prices/antigravity.md +3 -3
  286. package/reference/prices/augment.md +3 -3
  287. package/reference/prices/claude.md +2 -2
  288. package/reference/prices/cline.md +4 -4
  289. package/reference/prices/codebuddy.md +3 -3
  290. package/reference/prices/codex.md +2 -2
  291. package/reference/prices/copilot.md +3 -3
  292. package/reference/prices/cursor.md +3 -3
  293. package/reference/prices/gemini.md +2 -2
  294. package/reference/prices/kilo.md +3 -3
  295. package/reference/prices/opencode.md +4 -4
  296. package/reference/prices/qwen.md +2 -2
  297. package/reference/prices/trae.md +3 -3
  298. package/reference/prices/windsurf.md +3 -3
  299. package/reference/prices.openrouter.md +5 -5
  300. package/reference/print-design.md +36 -36
  301. package/reference/priority-matrix.md +2 -2
  302. package/reference/project-skills-guide.md +3 -3
  303. package/reference/proportion-systems.md +23 -23
  304. package/reference/pseudonymization-rules.md +30 -30
  305. package/reference/retrieval-contract.md +14 -14
  306. package/reference/review-format.md +7 -7
  307. package/reference/rollout-coordination.md +10 -10
  308. package/reference/rtl-cjk-cultural.md +39 -39
  309. package/reference/runtime-models.md +28 -28
  310. package/reference/shared-preamble.md +26 -26
  311. package/reference/skill-authoring-contract.md +16 -16
  312. package/reference/skill-placeholders.md +3 -3
  313. package/reference/start-interview.md +10 -10
  314. package/reference/style-vocabulary.md +25 -25
  315. package/reference/surfaces.md +4 -4
  316. package/reference/ticket-sync.md +9 -9
  317. package/reference/typography.md +64 -64
  318. package/reference/user-research.md +54 -54
  319. package/reference/variable-fonts-loading.md +15 -15
  320. package/reference/visual-hierarchy-layout.md +41 -41
  321. package/scripts/lib/manifest/prose-denylist.json +1 -1
  322. package/skills/add-backlog/SKILL.md +3 -3
  323. package/skills/analyze-dependencies/SKILL.md +10 -10
  324. package/skills/apply-reflections/SKILL.md +13 -13
  325. package/skills/apply-reflections/apply-reflections-procedure.md +20 -20
  326. package/skills/audit/SKILL.md +7 -7
  327. package/skills/bandit-status/SKILL.md +7 -7
  328. package/skills/benchmark/SKILL.md +7 -7
  329. package/skills/bootstrap-ds/SKILL.md +10 -10
  330. package/skills/brief/SKILL.md +20 -20
  331. package/skills/budget/SKILL.md +4 -4
  332. package/skills/cache-manager/SKILL.md +6 -6
  333. package/skills/cache-manager/cache-policy.md +5 -5
  334. package/skills/check-update/SKILL.md +5 -5
  335. package/skills/compare/SKILL.md +15 -15
  336. package/skills/compare/compare-rubric.md +17 -17
  337. package/skills/complete-cycle/SKILL.md +5 -5
  338. package/skills/connections/SKILL.md +11 -11
  339. package/skills/connections/connections-onboarding.md +76 -76
  340. package/skills/continue/SKILL.md +2 -2
  341. package/skills/darkmode/SKILL.md +17 -17
  342. package/skills/darkmode/darkmode-audit-procedure.md +7 -7
  343. package/skills/debug/SKILL.md +3 -3
  344. package/skills/debug/debug-feedback-loops.md +12 -12
  345. package/skills/design/SKILL.md +12 -12
  346. package/skills/design/design-procedure.md +23 -23
  347. package/skills/discover/SKILL.md +7 -7
  348. package/skills/discover/discover-procedure.md +18 -18
  349. package/skills/discuss/SKILL.md +12 -12
  350. package/skills/do/SKILL.md +1 -1
  351. package/skills/explore/SKILL.md +21 -21
  352. package/skills/explore/explore-procedure.md +48 -48
  353. package/skills/export/SKILL.md +9 -9
  354. package/skills/extract-learnings/SKILL.md +5 -5
  355. package/skills/fast/SKILL.md +7 -7
  356. package/skills/figma-extract/SKILL.md +11 -11
  357. package/skills/figma-write/SKILL.md +6 -6
  358. package/skills/graphify/SKILL.md +4 -4
  359. package/skills/health/SKILL.md +16 -16
  360. package/skills/health/health-mcp-detection.md +3 -3
  361. package/skills/health/health-skill-length-report.md +6 -6
  362. package/skills/help/SKILL.md +1 -1
  363. package/skills/list-assumptions/SKILL.md +4 -4
  364. package/skills/map/SKILL.md +12 -12
  365. package/skills/migrate/SKILL.md +5 -5
  366. package/skills/new-cycle/SKILL.md +2 -2
  367. package/skills/new-cycle/milestone-completeness-rubric.md +16 -16
  368. package/skills/new-project/SKILL.md +1 -1
  369. package/skills/next/SKILL.md +5 -5
  370. package/skills/note/SKILL.md +1 -1
  371. package/skills/openrouter-status/SKILL.md +4 -4
  372. package/skills/optimize/SKILL.md +15 -15
  373. package/skills/pause/SKILL.md +5 -5
  374. package/skills/peer-cli-add/SKILL.md +11 -11
  375. package/skills/peer-cli-add/peer-cli-protocol.md +39 -39
  376. package/skills/peer-cli-customize/SKILL.md +14 -14
  377. package/skills/peers/SKILL.md +4 -4
  378. package/skills/plan/SKILL.md +13 -13
  379. package/skills/plan/plan-procedure.md +24 -24
  380. package/skills/plant-seed/SKILL.md +4 -4
  381. package/skills/pr-branch/SKILL.md +2 -2
  382. package/skills/progress/SKILL.md +15 -15
  383. package/skills/quality-gate/SKILL.md +22 -22
  384. package/skills/quality-gate/threat-modeling.md +19 -19
  385. package/skills/quick/SKILL.md +5 -5
  386. package/skills/reapply-patches/SKILL.md +7 -7
  387. package/skills/reflect/SKILL.md +3 -3
  388. package/skills/reflect/procedures/capability-gap-scan.md +11 -11
  389. package/skills/report-issue/SKILL.md +5 -5
  390. package/skills/report-issue/report-issue-procedure.md +27 -27
  391. package/skills/resume/SKILL.md +9 -9
  392. package/skills/review-backlog/SKILL.md +3 -3
  393. package/skills/review-decisions/SKILL.md +3 -3
  394. package/skills/roi/SKILL.md +5 -5
  395. package/skills/rollout-status/SKILL.md +4 -4
  396. package/skills/router/SKILL.md +11 -11
  397. package/skills/router/capability-gap-emitter.md +6 -6
  398. package/skills/router/router-pick-emitter.md +9 -9
  399. package/skills/router/router-rules.md +7 -7
  400. package/skills/scan/SKILL.md +16 -16
  401. package/skills/scan/scan-procedure.md +42 -42
  402. package/skills/settings/SKILL.md +2 -2
  403. package/skills/ship/SKILL.md +7 -7
  404. package/skills/sketch/SKILL.md +10 -10
  405. package/skills/sketch-wrap-up/SKILL.md +12 -12
  406. package/skills/skill-manifest/SKILL.md +5 -5
  407. package/skills/spike/SKILL.md +7 -7
  408. package/skills/spike-wrap-up/SKILL.md +13 -13
  409. package/skills/start/SKILL.md +8 -8
  410. package/skills/start/start-procedure.md +9 -9
  411. package/skills/stats/SKILL.md +5 -5
  412. package/skills/style/SKILL.md +12 -12
  413. package/skills/style/style-doc-procedure.md +12 -12
  414. package/skills/synthesize/SKILL.md +10 -10
  415. package/skills/timeline/SKILL.md +4 -4
  416. package/skills/todo/SKILL.md +3 -3
  417. package/skills/turn-closeout/SKILL.md +10 -10
  418. package/skills/unlock-decision/SKILL.md +3 -3
  419. package/skills/update/SKILL.md +9 -9
  420. package/skills/using-gdd/SKILL.md +17 -17
  421. package/skills/verify/SKILL.md +13 -13
  422. package/skills/verify/verify-procedure.md +34 -34
  423. package/skills/warm-cache/SKILL.md +8 -8
  424. package/skills/watch-authorities/SKILL.md +9 -9
  425. package/skills/zoom-out/SKILL.md +4 -4
@@ -1,4 +1,4 @@
1
- # Card Benchmark Spec
1
+ # Card - Benchmark Spec
2
2
 
3
3
  **Harvested from**: Material 3, Polaris, Carbon, Atlassian, Mantine, shadcn/ui, Ant Design, Fluent 2
4
4
  **Wave**: 2 · **Category**: Containers
@@ -7,7 +7,7 @@
7
7
 
8
8
  ## Purpose
9
9
 
10
- A card is a contained surface that groups related information and actions. It is a visual container, not a navigation element by default only make the entire card clickable when the primary action is navigation and there is a single dominant action. Mixed-content cards with multiple actions should not be entirely clickable. *(Material 3, Polaris, Carbon all agree on this boundary)*
10
+ A card is a contained surface that groups related information and actions. It is a visual container, not a navigation element by default - only make the entire card clickable when the primary action is navigation and there is a single dominant action. Mixed-content cards with multiple actions should not be entirely clickable. *(Material 3, Polaris, Carbon all agree on this boundary)*
11
11
 
12
12
  ---
13
13
 
@@ -48,7 +48,7 @@ A card is a contained surface that groups related information and actions. It is
48
48
  | Compact | Dense layout; no media | Carbon, Fluent |
49
49
 
50
50
  **Norm** (≥5/18): outlined or elevated; ≤2 actions per card.
51
- **Diverge**: elevation vs. outline both are valid; use elevated for content that needs to float (dashboards), outlined for dense lists (tables of cards).
51
+ **Diverge**: elevation vs. outline - both are valid; use elevated for content that needs to float (dashboards), outlined for dense lists (tables of cards).
52
52
 
53
53
  ---
54
54
 
@@ -56,10 +56,10 @@ A card is a contained surface that groups related information and actions. It is
56
56
 
57
57
  | State | Trigger | Visual | ARIA/HTML |
58
58
  |-------|---------|--------|-----------|
59
- | default | | Resting surface | |
60
- | hover (clickable) | pointer | Shadow deepens or border darkens | |
61
- | focus (clickable) | keyboard | 2px focus ring on outer card | |
62
- | active (clickable) | mousedown | Scale 0.99 | |
59
+ | default | - | Resting surface | - |
60
+ | hover (clickable) | pointer | Shadow deepens or border darkens | - |
61
+ | focus (clickable) | keyboard | 2px focus ring on outer card | - |
62
+ | active (clickable) | mousedown | Scale 0.99 | - |
63
63
  | selected | programmatic | Border + background tint | `aria-selected="true"` |
64
64
  | loading | async content | Skeleton placeholder | `aria-busy="true"` |
65
65
  | disabled | programmatic | 38% opacity | `aria-disabled="true"` |
@@ -77,7 +77,7 @@ A card is a contained surface that groups related information and actions. It is
77
77
  | Max width | 480px (typical) | Grid controls actual width; max-width is a guideline |
78
78
  | Gap between cards | 16px (sm grid), 24px (md grid) | |
79
79
 
80
- Cross-link: `reference/surfaces.md` concentric radius, 3-layer shadow formula, elevation tokens
80
+ Cross-link: `reference/surfaces.md` - concentric radius, 3-layer shadow formula, elevation tokens
81
81
 
82
82
  ---
83
83
 
@@ -96,14 +96,14 @@ Cross-link: `reference/surfaces.md` — concentric radius, 3-layer shadow formul
96
96
 
97
97
  ### Clickable Card Rules
98
98
 
99
- *Per WAI-ARIA APG link + button patterns W3C 2024*
99
+ *Per WAI-ARIA APG link + button patterns - W3C - 2024*
100
100
 
101
101
  | Invocation | Element | Key |
102
102
  |------------|---------|-----|
103
103
  | Navigate to new page | `<a href>` wrapping or inside card | Enter |
104
104
  | Trigger action in context | `<button>` wrapping or inside card | Enter, Space |
105
105
 
106
- - **Do not wrap an entire card in `<a>` if it contains other interactive elements** (links, buttons inside) nested interactive elements are inaccessible by keyboard
106
+ - **Do not wrap an entire card in `<a>` if it contains other interactive elements** (links, buttons inside) - nested interactive elements are inaccessible by keyboard
107
107
  - Use the "card with primary action + secondary actions" pattern: one `<a>` stretched via `::after` pseudo-element to fill the card; secondary action buttons sit above in stacking context
108
108
 
109
109
  ### Accessibility Rules
@@ -123,7 +123,7 @@ Cross-link: `reference/surfaces.md` — concentric radius, 3-layer shadow formul
123
123
  | press scale | 80ms | ease | 1→0.99 (subtle; card is large) |
124
124
  | skeleton shimmer | 1.5s | linear loop | Respect `prefers-reduced-motion` |
125
125
 
126
- Cross-link: `reference/motion.md` Skeleton shimmer pattern, `prefers-reduced-motion`
126
+ Cross-link: `reference/motion.md` - Skeleton shimmer pattern, `prefers-reduced-motion`
127
127
 
128
128
  ---
129
129
 
@@ -139,7 +139,7 @@ Cross-link: `reference/motion.md` — Skeleton shimmer pattern, `prefers-reduced
139
139
  - Don't wrap the entire card in `<a>` if it contains other interactive elements *(WAI-ARIA APG)*
140
140
  - Don't use `<div>` as a clickable card without `role="button"` or `role="link"` + keyboard handler *(WAI-ARIA APG)*
141
141
  - Don't place the entire card title in a plain `<span>` when it could be `<h2>/<h3>` *(Atlassian, Carbon)*
142
- - Don't use more than 2 primary actions per card extract to a detail view *(Material 3, Polaris)*
142
+ - Don't use more than 2 primary actions per card - extract to a detail view *(Material 3, Polaris)*
143
143
 
144
144
  ---
145
145
 
@@ -197,4 +197,4 @@ grep -rn 'class.*card' src/ | xargs grep -L 'h[1-6]\|aria-label' 2>/dev/null
197
197
 
198
198
  **Why it fails**: Nested `<button>` inside `<a>` is invalid HTML. Keyboard users pressing Tab inside the link may reach the button, but Enter on the button may also trigger the link. Screen reader behavior is unpredictable.
199
199
  **Grep detection**: `grep -rn '<a.*href' src/ | xargs grep -l '<button' 2>/dev/null`
200
- **Fix**: Use the stretched-link pattern `<h3><a href="/product/42">Product Name</a></h3>` with `::after { position: absolute; inset: 0; }` on the `<a>`, and position the "Add to cart" button above via `position: relative; z-index: 1`.
200
+ **Fix**: Use the stretched-link pattern - `<h3><a href="/product/42">Product Name</a></h3>` with `::after { position: absolute; inset: 0; }` on the `<a>`, and position the "Add to cart" button above via `position: relative; z-index: 1`.
@@ -1,4 +1,4 @@
1
- # Checkbox Benchmark Spec
1
+ # Checkbox - Benchmark Spec
2
2
 
3
3
  **Harvested from**: Material 3, Carbon, Polaris, Ant Design, WAI-ARIA APG, Mantine, Chakra UI, Atlassian
4
4
  **Wave**: 1 · **Category**: Inputs
@@ -7,7 +7,7 @@
7
7
 
8
8
  ## Purpose
9
9
 
10
- A checkbox allows the user to select or deselect a binary option, or to represent an indeterminate state (partially selected group). Checkboxes are independent selecting one does not affect others. Use radio buttons for mutually exclusive choices within a group. Always group related checkboxes in a `<fieldset>` with a `<legend>`.
10
+ A checkbox allows the user to select or deselect a binary option, or to represent an indeterminate state (partially selected group). Checkboxes are independent - selecting one does not affect others. Use radio buttons for mutually exclusive choices within a group. Always group related checkboxes in a `<fieldset>` with a `<legend>`.
11
11
 
12
12
  ---
13
13
 
@@ -31,7 +31,7 @@ Group:
31
31
  | Part | Required | Notes |
32
32
  |------|----------|-------|
33
33
  | Input / control | Yes | Native `<input type="checkbox">` preferred |
34
- | Label | Yes | `<label for="id">` click zone includes label text |
34
+ | Label | Yes | `<label for="id">` - click zone includes label text |
35
35
  | Fieldset + legend | Yes (group) | Required when ≥2 related checkboxes |
36
36
  | Helper text | No | Below label; `aria-describedby` |
37
37
  | Error message | Conditional | Field-level or group-level |
@@ -49,8 +49,8 @@ Group:
49
49
  | Group | ≥2 checkboxes in `<fieldset>` | All |
50
50
  | With description | Label + helper text below | Material 3, Polaris, Carbon |
51
51
 
52
- **Norm** (≥6/18): indeterminate state is a visual-only UI state the underlying `checked` value is still boolean; set via DOM `.indeterminate` property, not HTML attribute.
53
- **Diverge**: size Material 3 uses 18px; Carbon 16px; Polaris 16px; Ant 14–16px. 16px is the de-facto norm.
52
+ **Norm** (≥6/18): indeterminate state is a visual-only UI state - the underlying `checked` value is still boolean; set via DOM `.indeterminate` property, not HTML attribute.
53
+ **Diverge**: size - Material 3 uses 18px; Carbon 16px; Polaris 16px; Ant 14–16px. 16px is the de-facto norm.
54
54
 
55
55
  ---
56
56
 
@@ -61,8 +61,8 @@ Group:
61
61
  | unchecked | default | Empty box | `aria-checked="false"` |
62
62
  | checked | user interaction | Checkmark | `aria-checked="true"` |
63
63
  | indeterminate | set via JS | Dash / minus | `aria-checked="mixed"` |
64
- | hover | pointer over | Box border darkens | |
65
- | focus | keyboard | 2px focus ring around box | |
64
+ | hover | pointer over | Box border darkens | - |
65
+ | focus | keyboard | 2px focus ring around box | - |
66
66
  | disabled unchecked | `disabled` | 38% opacity | `aria-disabled="true"` |
67
67
  | disabled checked | `disabled` | 38% opacity + check | `aria-disabled="true"` |
68
68
  | error | validation | Red box border | `aria-invalid="true"` |
@@ -79,14 +79,14 @@ Group:
79
79
  | Group item spacing | 8px vertical between items | *(Carbon, Material 3)* |
80
80
  | Indentation (nested) | 24px | When showing hierarchical groups |
81
81
 
82
- Cross-link: `reference/surfaces.md` hit-area pseudo-element pattern (44×44px minimum touch target)
82
+ Cross-link: `reference/surfaces.md` - hit-area pseudo-element pattern (44×44px minimum touch target)
83
83
 
84
84
  ---
85
85
 
86
86
  ## Typography
87
87
 
88
- - Label: 14px/400; same weight as body checkboxes are options, not headings
89
- - Legend: 14px/500 or 12px/600 uppercase distinguishes group from items
88
+ - Label: 14px/400; same weight as body - checkboxes are options, not headings
89
+ - Legend: 14px/500 or 12px/600 uppercase - distinguishes group from items
90
90
  - Helper/error: 12px/400
91
91
 
92
92
  ---
@@ -98,20 +98,20 @@ Cross-link: `reference/surfaces.md` — hit-area pseudo-element pattern (44×44p
98
98
 
99
99
  ### Keyboard Contract
100
100
 
101
- *Quoted verbatim from WAI-ARIA APG https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/ W3C 2024*
101
+ *Quoted verbatim from WAI-ARIA APG - https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/ - W3C - 2024*
102
102
 
103
103
  | Key | Action |
104
104
  |-----|--------|
105
105
  | Tab | Moves focus to the checkbox |
106
106
  | Space | Toggles the checkbox state (checked / unchecked / indeterminate) |
107
107
 
108
- Within a group: Tab moves between checkboxes (not arrow keys checkboxes are independent).
108
+ Within a group: Tab moves between checkboxes (not arrow keys - checkboxes are independent).
109
109
 
110
110
  ### Accessibility Rules
111
111
 
112
- - Label MUST be associated via `<label for="id">` clicking the label must toggle the checkbox
113
- - `<fieldset>` + `<legend>` MUST wrap every group of related checkboxes the legend provides group context to screen readers
114
- - Indeterminate state MUST be set via JS `.indeterminate = true` there is no HTML attribute; `aria-checked="mixed"` must be set simultaneously on `role="checkbox"` elements
112
+ - Label MUST be associated via `<label for="id">` - clicking the label must toggle the checkbox
113
+ - `<fieldset>` + `<legend>` MUST wrap every group of related checkboxes - the legend provides group context to screen readers
114
+ - Indeterminate state MUST be set via JS `.indeterminate = true` - there is no HTML attribute; `aria-checked="mixed"` must be set simultaneously on `role="checkbox"` elements
115
115
  - Disabled checkboxes: use native `disabled` attribute for form semantics; `aria-disabled="true"` if the element must remain in tab order (e.g. with explanatory tooltip)
116
116
  - Error state: `aria-invalid="true"` on the control; group-level error on the `<fieldset>` via `aria-describedby`
117
117
 
@@ -125,7 +125,7 @@ Within a group: Tab moves between checkboxes (not arrow keys — checkboxes are
125
125
  | indeterminate dash | 120ms | ease | Width animation of dash element |
126
126
  | hover border | 80ms | ease | Border colour only |
127
127
 
128
- Cross-link: `reference/motion.md` `prefers-reduced-motion`: skip path animation, show fill instantly
128
+ Cross-link: `reference/motion.md` - `prefers-reduced-motion`: skip path animation, show fill instantly
129
129
 
130
130
  ---
131
131
 
@@ -138,10 +138,10 @@ Cross-link: `reference/motion.md` — `prefers-reduced-motion`: skip path animat
138
138
  - Align label text to the top of the control in multiline label scenarios *(Carbon)*
139
139
 
140
140
  ### Don't
141
- - Don't use checkboxes for mutually exclusive options use radio buttons *(Material 3, Carbon, Polaris)*
141
+ - Don't use checkboxes for mutually exclusive options - use radio buttons *(Material 3, Carbon, Polaris)*
142
142
  - Don't use a custom `<div>` checkbox without `role="checkbox"` and keyboard handler *(WAI-ARIA APG)*
143
- - Don't set `aria-checked="mixed"` via HTML attribute it must be set dynamically *(WAI-ARIA APG)*
144
- - Don't rely on colour alone for checked state always include a visible checkmark *(WCAG 1.4.1)*
143
+ - Don't set `aria-checked="mixed"` via HTML attribute - it must be set dynamically *(WAI-ARIA APG)*
144
+ - Don't rely on colour alone for checked state - always include a visible checkmark *(WCAG 1.4.1)*
145
145
 
146
146
  ---
147
147
 
@@ -195,7 +195,7 @@ grep -rn 'indeterminate' src/ | grep 'setAttribute\|attr(' | grep '"true"'
195
195
  </div>
196
196
  ```
197
197
 
198
- **Why it fails**: Screen readers announce each option without the group context ("Email checkbox") users don't know what these options belong to without reading surrounding text.
198
+ **Why it fails**: Screen readers announce each option without the group context ("Email - checkbox") - users don't know what these options belong to without reading surrounding text.
199
199
  **Grep detection**: `grep -B5 'type="checkbox"' src/ | grep -v 'fieldset\|role="group"'`
200
200
  **Fix**:
201
201
  ```html
@@ -1,4 +1,4 @@
1
- # Chip / Tag Benchmark Spec
1
+ # Chip / Tag - Benchmark Spec
2
2
 
3
3
  **Harvested from**: Material 3, Carbon, Atlassian, Mantine
4
4
  **Wave**: 3 · **Category**: Feedback
@@ -7,7 +7,7 @@
7
7
 
8
8
  ## Purpose
9
9
 
10
- A chip (or tag) is a compact, interactive label that represents an attribute, filter, or selection. It is commonly used for multi-select filter interfaces, tag-input fields (user-generated labels), one-time suggestion prompts, and static display labels. Each variant has distinct interaction semantics filter chips toggle on/off, input chips are removable, suggestion chips trigger a one-time action, and display chips are static. *(Material 3, Carbon, Atlassian, Mantine agree on the four-variant taxonomy)*
10
+ A chip (or tag) is a compact, interactive label that represents an attribute, filter, or selection. It is commonly used for multi-select filter interfaces, tag-input fields (user-generated labels), one-time suggestion prompts, and static display labels. Each variant has distinct interaction semantics - filter chips toggle on/off, input chips are removable, suggestion chips trigger a one-time action, and display chips are static. *(Material 3, Carbon, Atlassian, Mantine agree on the four-variant taxonomy)*
11
11
 
12
12
  *UUPM app-interface: filter chips in search/filter UIs and tag input patterns (MIT attribution)*
13
13
 
@@ -51,13 +51,13 @@ A chip (or tag) is a compact, interactive label that represents an attribute, fi
51
51
 
52
52
  | State | Trigger | Visual | ARIA |
53
53
  |-------|---------|--------|------|
54
- | default | | Rest fill + label | |
55
- | hover | pointer over chip | Background tint (+8%) | |
56
- | focus | keyboard focus on chip | focus-visible ring (2px) | |
54
+ | default | - | Rest fill + label | - |
55
+ | hover | pointer over chip | Background tint (+8%) | - |
56
+ | focus | keyboard focus on chip | focus-visible ring (2px) | - |
57
57
  | selected (filter) | click / Enter / Space | Filled background; checkmark icon | `aria-pressed="true"` |
58
58
  | unselected (filter) | click / Enter / Space | Outline style | `aria-pressed="false"` |
59
59
  | disabled | `disabled` / `aria-disabled` | 38% opacity; cursor not-allowed | `aria-disabled="true"` |
60
- | remove focus | Tab to × button | Focus ring on × | |
60
+ | remove focus | Tab to × button | Focus ring on × | - |
61
61
 
62
62
  ---
63
63
 
@@ -79,11 +79,11 @@ A chip (or tag) is a compact, interactive label that represents an attribute, fi
79
79
 
80
80
  ## Typography
81
81
 
82
- - Label: body-sm (13–14px/400) same scale as form labels
83
- - No bold weight chip label is a tag, not a heading or CTA
82
+ - Label: body-sm (13–14px/400) - same scale as form labels
83
+ - No bold weight - chip label is a tag, not a heading or CTA
84
84
  - Truncate with ellipsis only when chip is in a fixed-width container; prefer wrapping chip set to natural width
85
85
 
86
- Cross-link: `reference/typography.md` body-sm definition
86
+ Cross-link: `reference/typography.md` - body-sm definition
87
87
 
88
88
  ---
89
89
 
@@ -94,7 +94,7 @@ Cross-link: `reference/typography.md` — body-sm definition
94
94
 
95
95
  ### Keyboard Contract
96
96
 
97
- *Quoted verbatim from WAI-ARIA APG https://www.w3.org/WAI/ARIA/apg/patterns/listbox/ W3C 2024*
97
+ *Quoted verbatim from WAI-ARIA APG - https://www.w3.org/WAI/ARIA/apg/patterns/listbox/ - W3C - 2024*
98
98
 
99
99
  | Key | Action |
100
100
  |-----|--------|
@@ -106,14 +106,14 @@ Cross-link: `reference/typography.md` — body-sm definition
106
106
 
107
107
  ### Accessibility Rules
108
108
 
109
- - Filter chip used as standalone toggle MUST have `aria-pressed="true|false"` absence means screen readers cannot report toggle state *(WAI-ARIA APG)*
109
+ - Filter chip used as standalone toggle MUST have `aria-pressed="true|false"` - absence means screen readers cannot report toggle state *(WAI-ARIA APG)*
110
110
  - Filter chips inside a multi-select group SHOULD use `role="option"` inside `role="listbox"` with `aria-multiselectable="true"` *(WAI-ARIA APG)*
111
- - Remove button MUST have an independent `aria-label` describing what it removes: `aria-label="Remove Python tag"` the × glyph alone is not an accessible name *(WAI-ARIA APG, Material 3)*
111
+ - Remove button MUST have an independent `aria-label` describing what it removes: `aria-label="Remove Python tag"` - the × glyph alone is not an accessible name *(WAI-ARIA APG, Material 3)*
112
112
  - Remove button MUST be a separate focusable element, NOT a click handler on the chip label *(Carbon, Atlassian)*
113
113
  - Touch target for remove button MUST be ≥ 32×32px via padding even if the visual × is 16–20px *(WCAG 2.5.5)*
114
- - Display chips have no role they are presentational; if they carry meaningful status, use `role="status"` or integrate into an Alert *(Atlassian Lozenge guidance)*
114
+ - Display chips have no role - they are presentational; if they carry meaningful status, use `role="status"` or integrate into an Alert *(Atlassian Lozenge guidance)*
115
115
 
116
- Cross-link: `reference/accessibility.md` `aria-pressed`, `listbox`, touch targets
116
+ Cross-link: `reference/accessibility.md` - `aria-pressed`, `listbox`, touch targets
117
117
 
118
118
  ---
119
119
 
@@ -126,9 +126,9 @@ Cross-link: `reference/accessibility.md` — `aria-pressed`, `listbox`, touch ta
126
126
  | Chip add (expand width) | 150ms | ease-out | Width expands from 0 |
127
127
  | Hover background | 80ms | ease-out | Subtle tint only |
128
128
 
129
- **BAN**: Full-page reflow animation when removing a chip collapse width inline; do not shift unrelated page sections. Do not use `transition: all` (catches unintended border/shadow changes).
129
+ **BAN**: Full-page reflow animation when removing a chip - collapse width inline; do not shift unrelated page sections. Do not use `transition: all` (catches unintended border/shadow changes).
130
130
 
131
- Cross-link: `reference/motion.md` `prefers-reduced-motion`: skip width animation, instant add/remove
131
+ Cross-link: `reference/motion.md` - `prefers-reduced-motion`: skip width animation, instant add/remove
132
132
 
133
133
  ---
134
134
 
@@ -141,10 +141,10 @@ Cross-link: `reference/motion.md` — `prefers-reduced-motion`: skip width anima
141
141
  - Ensure touch target ≥ 32px height; extend remove button via padding *(WCAG 2.5.5)*
142
142
 
143
143
  ### Don't
144
- - Don't put filter chips without `aria-pressed` screen readers cannot report selected state *(WAI-ARIA APG)*
145
- - Don't use the same click handler for chip label and remove remove must be independently focusable *(Carbon, Atlassian)*
146
- - Don't truncate chip label in narrow containers without a tooltip truncated tags lose meaning *(Polaris, Mantine)*
147
- - Don't use display chips for dynamic statuses that change use Alert or Badge instead *(Atlassian)*
144
+ - Don't put filter chips without `aria-pressed` - screen readers cannot report selected state *(WAI-ARIA APG)*
145
+ - Don't use the same click handler for chip label and remove - remove must be independently focusable *(Carbon, Atlassian)*
146
+ - Don't truncate chip label in narrow containers without a tooltip - truncated tags lose meaning *(Polaris, Mantine)*
147
+ - Don't use display chips for dynamic statuses that change - use Alert or Badge instead *(Atlassian)*
148
148
 
149
149
  ---
150
150
 
@@ -1,4 +1,4 @@
1
- # Command Palette Benchmark Spec
1
+ # Command Palette - Benchmark Spec
2
2
 
3
3
  **Harvested from**: Linear, Raycast, Radix CMDK, GitHub Primer, UUPM (app-interface, MIT)
4
4
  **Wave**: 4 · **Category**: Navigation & Data
@@ -64,7 +64,7 @@ A command palette is a keyboard-first global launcher that lets users search acr
64
64
 
65
65
  | State | Trigger | Visual | ARIA |
66
66
  |-------|---------|--------|------|
67
- | closed | | Dialog hidden | |
67
+ | closed | - | Dialog hidden | - |
68
68
  | open | Cmd/Ctrl+K | Dialog visible; input focused | `aria-expanded="true"` on combobox |
69
69
  | empty | no query | Placeholder or recent items | `aria-expanded="true"` |
70
70
  | searching | typing | Results update in real-time | `aria-live="polite"` on results region |
@@ -97,7 +97,7 @@ A command palette is a keyboard-first global launcher that lets users search acr
97
97
  - Section heading: label-xs (11px), uppercase, weight 600, `color: --text-subtle`, `aria-hidden="true"` if role="group" handles it
98
98
  - Keyboard shortcut hints: label-xs (11px), `color: --text-subtle`, right-aligned, `aria-hidden="true"`
99
99
 
100
- Cross-link: `reference/typography.md` body-md, label scale
100
+ Cross-link: `reference/typography.md` - body-md, label scale
101
101
 
102
102
  ---
103
103
 
@@ -108,7 +108,7 @@ Cross-link: `reference/typography.md` — body-md, label scale
108
108
 
109
109
  ### Keyboard Contract
110
110
 
111
- *Quoted verbatim from WAI-ARIA APG https://www.w3.org/WAI/ARIA/apg/patterns/combobox/ and https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/ W3C 2024*
111
+ *Quoted verbatim from WAI-ARIA APG - https://www.w3.org/WAI/ARIA/apg/patterns/combobox/ and https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/ - W3C - 2024*
112
112
 
113
113
  | Key | Action |
114
114
  |-----|--------|
@@ -123,14 +123,14 @@ Cross-link: `reference/typography.md` — body-md, label scale
123
123
 
124
124
  ### Accessibility Rules
125
125
 
126
- - Dialog MUST have `aria-modal="true"` prevents AT from reading content outside the palette
126
+ - Dialog MUST have `aria-modal="true"` - prevents AT from reading content outside the palette
127
127
  - `role="combobox"` input MUST have `aria-controls` pointing to the `role="listbox"` `id`
128
128
  - `aria-live="polite"` on the results region ensures AT announces result count changes and empty state
129
129
  - Focus MUST be trapped within the dialog while it is open (Tab/Shift+Tab cycle inside)
130
130
  - On close, focus MUST return to the element that triggered the palette (not body)
131
- - Keyboard shortcut hints (`⌘K`, `↵`) MUST be `aria-hidden="true"` the shortcut must be registered separately
131
+ - Keyboard shortcut hints (`⌘K`, `↵`) MUST be `aria-hidden="true"` - the shortcut must be registered separately
132
132
 
133
- Cross-link: `reference/accessibility.md` dialog focus trap, combobox pattern, live regions
133
+ Cross-link: `reference/accessibility.md` - dialog focus trap, combobox pattern, live regions
134
134
 
135
135
  ---
136
136
 
@@ -144,9 +144,9 @@ Cross-link: `reference/accessibility.md` — dialog focus trap, combobox pattern
144
144
  | Backdrop fade in | 150ms | ease-out | Opacity 0→0.5 |
145
145
  | Item selection flash | 80ms | ease-out | Brief fill before execute |
146
146
 
147
- **BAN**: Do not animate result item reordering as the user types causes visual instability and is disorienting for AT users with animations enabled.
147
+ **BAN**: Do not animate result item reordering as the user types - causes visual instability and is disorienting for AT users with animations enabled.
148
148
 
149
- Cross-link: `reference/motion.md` dialog entry, BAN-04
149
+ Cross-link: `reference/motion.md` - dialog entry, BAN-04
150
150
 
151
151
  ---
152
152
 
@@ -159,10 +159,10 @@ Cross-link: `reference/motion.md` — dialog entry, BAN-04
159
159
  - Use `role="group"` + `aria-label` for result sections *(WAI-ARIA APG, Linear, Raycast)*
160
160
 
161
161
  ### Don't
162
- - Don't build a custom overlay without `role="dialog"` + `aria-modal` screen readers will read background content *(WCAG 1.3.1)*
163
- - Don't omit `aria-controls` on the combobox AT cannot associate input with results *(WAI-ARIA APG combobox)*
164
- - Don't open on hover or auto-focus Cmd/Ctrl+K is the expected trigger *(Linear, Raycast convention)*
165
- - Don't dismiss on every Escape keypress inside nested command flows first Escape should exit sub-level, second closes palette *(Raycast, Linear)*
162
+ - Don't build a custom overlay without `role="dialog"` + `aria-modal` - screen readers will read background content *(WCAG 1.3.1)*
163
+ - Don't omit `aria-controls` on the combobox - AT cannot associate input with results *(WAI-ARIA APG combobox)*
164
+ - Don't open on hover or auto-focus - Cmd/Ctrl+K is the expected trigger *(Linear, Raycast convention)*
165
+ - Don't dismiss on every Escape keypress inside nested command flows - first Escape should exit sub-level, second closes palette *(Raycast, Linear)*
166
166
 
167
167
  ---
168
168
 
@@ -170,7 +170,7 @@ Cross-link: `reference/motion.md` — dialog entry, BAN-04
170
170
 
171
171
  | Anti-pattern | Entry |
172
172
  |--------------|-------|
173
- | BAN-04 | `transition: all` on results list `reference/anti-patterns.md#ban-04` |
173
+ | BAN-04 | `transition: all` on results list - `reference/anti-patterns.md#ban-04` |
174
174
 
175
175
  ---
176
176
 
@@ -223,6 +223,6 @@ grep -rn 'command.*palette\|cmd.*results\|cmdk' src/ | grep 'results\|listbox' |
223
223
  </div>
224
224
  ```
225
225
 
226
- **Why it fails**: No `role="dialog"` AT does not treat this as a modal, and screen readers continue reading background content; no focus trap; input lacks `role="combobox"` and `aria-controls`; results have no `role="listbox"`; items have no `role="option"` or `aria-selected`; no `aria-live` region for result updates.
226
+ **Why it fails**: No `role="dialog"` - AT does not treat this as a modal, and screen readers continue reading background content; no focus trap; input lacks `role="combobox"` and `aria-controls`; results have no `role="listbox"`; items have no `role="option"` or `aria-selected`; no `aria-live` region for result updates.
227
227
  **Grep detection**: `grep -rn 'command.*palette\|cmdk\|command-menu' src/ | grep '<div' | grep -v 'role='`
228
228
  **Fix**: Use `role="dialog"` + `aria-modal="true"` on the overlay; implement focus trap; add `role="combobox"` + `aria-controls` to input; add `role="listbox"` to results container; add `role="option"` + `aria-selected` to each item; add `aria-live="polite"` to results region.
@@ -1,4 +1,4 @@
1
- # Date Picker Benchmark Spec
1
+ # Date Picker - Benchmark Spec
2
2
 
3
3
  **Harvested from**: Material 3, Carbon Design System, Atlassian Design System, Mantine DatePicker
4
4
  **Wave**: 5 · **Category**: Advanced
@@ -31,7 +31,7 @@ Range variant adds a second input field for end date.
31
31
  | Part | Required | Notes |
32
32
  |------|----------|-------|
33
33
  | Text input | Yes | Shows selected date; accepts direct keyboard entry |
34
- | Format hint label | Yes | Visible "MM/DD/YYYY" supplement NOT placeholder only |
34
+ | Format hint label | Yes | Visible "MM/DD/YYYY" supplement - NOT placeholder only |
35
35
  | Calendar trigger button | Yes | Opens/closes popover; `aria-label="Open calendar"` |
36
36
  | Popover (dialog) | Yes | `role="dialog"` + `aria-modal="true"` + focus trap |
37
37
  | Month navigation | Yes | Previous/next month buttons; keyboard Page Up/Down |
@@ -59,13 +59,13 @@ Range variant adds a second input field for end date.
59
59
 
60
60
  | State | Trigger | Visual | ARIA |
61
61
  |-------|---------|--------|------|
62
- | default | | Resting input + trigger icon | |
62
+ | default | - | Resting input + trigger icon | - |
63
63
  | open | Trigger click or input focus + Enter | Popover visible, focus moves inside | `aria-expanded="true"` on trigger |
64
- | day hover | Pointer over day | Background highlight | |
65
- | day focus | Keyboard navigation | Focus-visible ring on day button | |
64
+ | day hover | Pointer over day | Background highlight | - |
65
+ | day focus | Keyboard navigation | Focus-visible ring on day button | - |
66
66
  | day selected | Enter/Space or click | Filled background (brand color) | `aria-pressed="true"` on day button |
67
- | range-in-progress | Start selected, end not yet | Partial fill from start | |
68
- | range-complete | Both start and end selected | Full highlight between dates | |
67
+ | range-in-progress | Start selected, end not yet | Partial fill from start | - |
68
+ | range-complete | Both start and end selected | Full highlight between dates | - |
69
69
  | disabled date | Date excluded by min/max/filter | Muted; `tabindex="-1"` | `aria-disabled="true"` on day button |
70
70
  | error | Invalid date typed | Red border + error message | `aria-invalid="true"` on input |
71
71
 
@@ -82,7 +82,7 @@ Range variant adds a second input field for end date.
82
82
  **Norm**: 288px popover width fits a standard 7-column month grid with comfortable padding *(Carbon, Mantine)*.
83
83
  Day cells must be ≥32px to meet minimum touch-target guidance; prefer 40px for mixed pointer/touch contexts.
84
84
 
85
- Cross-link: `reference/surfaces.md` minimum 44×44px accessible tap target via padding.
85
+ Cross-link: `reference/surfaces.md` - minimum 44×44px accessible tap target via padding.
86
86
 
87
87
  ---
88
88
 
@@ -91,9 +91,9 @@ Cross-link: `reference/surfaces.md` — minimum 44×44px accessible tap target v
91
91
  - Input text: body-md weight 400; monospace or tabular-nums variant for date digits aids alignment
92
92
  - Day numbers: body-sm, center-aligned within cell
93
93
  - Month/year header: body-md weight 600
94
- - Format hint ("MM/DD/YYYY"): caption-sm, secondary color attached as visible `<label>` supplement or `<span aria-hidden="true">` paired with `aria-describedby` on the input
94
+ - Format hint ("MM/DD/YYYY"): caption-sm, secondary color - attached as visible `<label>` supplement or `<span aria-hidden="true">` paired with `aria-describedby` on the input
95
95
 
96
- Cross-link: `reference/typography.md` tabular-nums for date/time fields.
96
+ Cross-link: `reference/typography.md` - tabular-nums for date/time fields.
97
97
 
98
98
  ---
99
99
 
@@ -104,7 +104,7 @@ Cross-link: `reference/typography.md` — tabular-nums for date/time fields.
104
104
 
105
105
  ### Keyboard Contract
106
106
 
107
- *Adapted from WAI-ARIA APG https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/ and grid pattern W3C 2024*
107
+ *Adapted from WAI-ARIA APG - https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/ and grid pattern - W3C - 2024*
108
108
 
109
109
  | Key | Action |
110
110
  |-----|--------|
@@ -122,7 +122,7 @@ Cross-link: `reference/typography.md` — tabular-nums for date/time fields.
122
122
 
123
123
  ### Accessibility Rules
124
124
 
125
- - Calendar popover MUST use `role="dialog"` + `aria-modal="true"` do not use a plain `<div>` overlay
125
+ - Calendar popover MUST use `role="dialog"` + `aria-modal="true"` - do not use a plain `<div>` overlay
126
126
  - Focus MUST be trapped inside the open calendar; Escape closes and returns focus to the trigger
127
127
  - Each selectable day MUST be a `<button>` (or element with `role="button"`) so keyboard and AT users can activate it
128
128
  - Date format hint MUST be visible text, not only a placeholder (placeholder disappears on input and is not consistently announced)
@@ -130,7 +130,7 @@ Cross-link: `reference/typography.md` — tabular-nums for date/time fields.
130
130
  - Range variant: announce selected range via `aria-label` on day buttons (e.g., `aria-label="April 15, 2025, start of range"`)
131
131
  - Mobile: provide native `<input type="date">` fallback when touch device detected or user preference set
132
132
 
133
- Cross-link: `reference/accessibility.md` focus-trap pattern, dialog role requirements.
133
+ Cross-link: `reference/accessibility.md` - focus-trap pattern, dialog role requirements.
134
134
 
135
135
  ---
136
136
 
@@ -144,9 +144,9 @@ Cross-link: `reference/accessibility.md` — focus-trap pattern, dialog role req
144
144
  | Day selection | 80ms | ease-out | Fill background color |
145
145
  | Range fill | 150ms | ease-out | Animate fill between dates |
146
146
 
147
- **BAN**: Do not animate the calendar grid with a full-page slide disorienting for keyboard users navigating by month.
147
+ **BAN**: Do not animate the calendar grid with a full-page slide - disorienting for keyboard users navigating by month.
148
148
 
149
- Cross-link: `reference/motion.md` reduced-motion: omit slide, keep instant day selection.
149
+ Cross-link: `reference/motion.md` - reduced-motion: omit slide, keep instant day selection.
150
150
 
151
151
  ---
152
152
 
@@ -155,14 +155,14 @@ Cross-link: `reference/motion.md` — reduced-motion: omit slide, keep instant d
155
155
  ### Do
156
156
  - Show the date format as visible text ("MM/DD/YYYY") near the input *(Carbon, Atlassian)*
157
157
  - Ensure keyboard users can navigate the entire calendar without a pointer *(WAI-ARIA APG)*
158
- - Allow direct text entry in the input field some users know the date and do not need the calendar *(Mantine, Carbon)*
158
+ - Allow direct text entry in the input field - some users know the date and do not need the calendar *(Mantine, Carbon)*
159
159
  - Support locale-aware first day of week (Sunday vs. Monday) and locale month/day names *(Material 3, Mantine)*
160
160
 
161
161
  ### Don't
162
- - Don't use `<table>` with click-only cells add `role="grid"` and full keyboard navigation *(WCAG 2.1 §2.1.1)*
163
- - Don't use placeholder text alone to convey the date format placeholder vanishes on input *(Carbon, Atlassian)*
164
- - Don't trap focus permanently Escape must always close the popover and restore focus *(WAI-ARIA APG)*
165
- - Don't omit the native `<input type="date">` for mobile custom calendars are unusable on small touch screens *(Material 3)*
162
+ - Don't use `<table>` with click-only cells - add `role="grid"` and full keyboard navigation *(WCAG 2.1 §2.1.1)*
163
+ - Don't use placeholder text alone to convey the date format - placeholder vanishes on input *(Carbon, Atlassian)*
164
+ - Don't trap focus permanently - Escape must always close the popover and restore focus *(WAI-ARIA APG)*
165
+ - Don't omit the native `<input type="date">` for mobile - custom calendars are unusable on small touch screens *(Material 3)*
166
166
 
167
167
  ---
168
168
 
@@ -170,8 +170,8 @@ Cross-link: `reference/motion.md` — reduced-motion: omit slide, keep instant d
170
170
 
171
171
  | Anti-pattern | Entry |
172
172
  |--------------|-------|
173
- | BAN-07 | Placeholder as only label/hint `reference/anti-patterns.md#ban-07` |
174
- | BAN-12 | Custom overlay without focus trap `reference/anti-patterns.md#ban-12` |
173
+ | BAN-07 | Placeholder as only label/hint - `reference/anti-patterns.md#ban-07` |
174
+ | BAN-12 | Custom overlay without focus trap - `reference/anti-patterns.md#ban-12` |
175
175
 
176
176
  ---
177
177
 
@@ -1,4 +1,4 @@
1
- # Drawer / Sheet Benchmark Spec
1
+ # Drawer / Sheet - Benchmark Spec
2
2
 
3
3
  **Harvested from**: Material 3, Polaris (Sheet), Carbon, Atlassian, Mantine, shadcn/ui, Headless UI, Apple HIG
4
4
  **Wave**: 2 · **Category**: Containers
@@ -7,7 +7,7 @@
7
7
 
8
8
  ## Purpose
9
9
 
10
- A drawer (or sheet) is a panel that slides in from an edge of the viewport. It is less disruptive than a modal for workflows that benefit from co-existing with the background detail panels, navigation menus, filter sidebars, multi-step flows. Like a modal, it traps focus and requires Escape to close. Unlike a modal, the backdrop is optional and can be semi-transparent. *(Material 3, Carbon, Polaris all position drawer as less disruptive than modal)*
10
+ A drawer (or sheet) is a panel that slides in from an edge of the viewport. It is less disruptive than a modal for workflows that benefit from co-existing with the background - detail panels, navigation menus, filter sidebars, multi-step flows. Like a modal, it traps focus and requires Escape to close. Unlike a modal, the backdrop is optional and can be semi-transparent. *(Material 3, Carbon, Polaris all position drawer as less disruptive than modal)*
11
11
 
12
12
  ---
13
13
 
@@ -55,13 +55,13 @@ Bottom sheet (mobile):
55
55
  | Partial height | 60–80vh, overlays | Mobile bottom sheet | Apple HIG, Material 3 |
56
56
 
57
57
  **Norm** (≥5/18): right-side is default; bottom sheet for mobile.
58
- **Diverge**: backdrop-click-to-close same debate as modal; for navigation drawers, backdrop click should close; for form/detail drawers, configurable.
58
+ **Diverge**: backdrop-click-to-close - same debate as modal; for navigation drawers, backdrop click should close; for form/detail drawers, configurable.
59
59
 
60
60
  ---
61
61
 
62
62
  ## States
63
63
 
64
- Same as Modal/Dialog see `modal-dialog.md`. Key differences:
64
+ Same as Modal/Dialog - see `modal-dialog.md`. Key differences:
65
65
 
66
66
  | State | Drawer-specific |
67
67
  |-------|-----------------|
@@ -80,7 +80,7 @@ Same as Modal/Dialog — see `modal-dialog.md`. Key differences:
80
80
  | Bottom sheet | 60–100vh | Drag handle at 12px × 36px |
81
81
  | Padding | 20–24px | Match modal padding |
82
82
 
83
- Cross-link: `reference/surfaces.md` shadow on drawer edge (unilateral shadow)
83
+ Cross-link: `reference/surfaces.md` - shadow on drawer edge (unilateral shadow)
84
84
 
85
85
  ---
86
86
 
@@ -94,21 +94,21 @@ Cross-link: `reference/surfaces.md` — shadow on drawer edge (unilateral shadow
94
94
 
95
95
  ## Keyboard & Accessibility
96
96
 
97
- > **WAI-ARIA role**: `dialog` (same as modal drawer is a type of dialog)
97
+ > **WAI-ARIA role**: `dialog` (same as modal - drawer is a type of dialog)
98
98
  > **Required attributes**: `aria-modal="true"`, `aria-labelledby` (title id)
99
99
 
100
100
  ### Keyboard Contract
101
101
 
102
- *Quoted verbatim from WAI-ARIA APG https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/ W3C 2024*
102
+ *Quoted verbatim from WAI-ARIA APG - https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/ - W3C - 2024*
103
103
 
104
104
  Same Tab/Shift+Tab/Escape contract as modal (see `modal-dialog.md`).
105
105
 
106
106
  ### Drawer-specific Accessibility Rules
107
107
 
108
- - Focus trap: MUST trap focus inside the drawer while open same as modal
108
+ - Focus trap: MUST trap focus inside the drawer while open - same as modal
109
109
  - On open: focus moves to first focusable element (or close button if no primary action)
110
110
  - On close: focus MUST return to the element that triggered the drawer open
111
- - Navigation drawer (`role="navigation"`): if the drawer IS the main nav, use `role="navigation"` + `aria-label="Main"` instead of `role="dialog"`; different keyboard contract (no focus trap it IS a landmark)
111
+ - Navigation drawer (`role="navigation"`): if the drawer IS the main nav, use `role="navigation"` + `aria-label="Main"` instead of `role="dialog"`; different keyboard contract (no focus trap - it IS a landmark)
112
112
  - Background `inert`: set `inert` attribute (or equivalent) on background content when drawer is open
113
113
 
114
114
  ---
@@ -123,23 +123,23 @@ Same Tab/Shift+Tab/Escape contract as modal (see `modal-dialog.md`).
123
123
  | Backdrop fade | 200ms | ease | opacity 0→0.4 |
124
124
 
125
125
  Swipe-to-close (bottom sheet): detect `pointerup` with velocity + displacement threshold.
126
- Cross-link: `reference/motion.md` spring bounce=0, `prefers-reduced-motion` (disable slide, instant toggle)
126
+ Cross-link: `reference/motion.md` - spring bounce=0, `prefers-reduced-motion` (disable slide, instant toggle)
127
127
 
128
128
  ---
129
129
 
130
130
  ## Do / Don't
131
131
 
132
132
  ### Do
133
- - Trap focus inside the drawer when open same rule as modal *(WAI-ARIA APG)*
133
+ - Trap focus inside the drawer when open - same rule as modal *(WAI-ARIA APG)*
134
134
  - Return focus to the trigger element on close *(WAI-ARIA APG, Radix, Mantine)*
135
135
  - Use right-side drawer for content-detail panels; left-side for navigation *(Material 3, Carbon)*
136
136
  - Support swipe-to-close on bottom sheets for mobile *(Apple HIG, Material 3)*
137
137
 
138
138
  ### Don't
139
- - Don't use `role="navigation"` for content drawers only for navigation-purpose drawers *(WAI-ARIA APG)*
139
+ - Don't use `role="navigation"` for content drawers - only for navigation-purpose drawers *(WAI-ARIA APG)*
140
140
  - Don't let Tab escape the drawer while it's open *(WAI-ARIA APG)*
141
141
  - Don't disable background scroll without setting `overflow:hidden` on body *(all systems)*
142
- - Don't slide from top for content top drawers conflict with browser UI and notifications *(Material 3)*
142
+ - Don't slide from top for content - top drawers conflict with browser UI and notifications *(Material 3)*
143
143
 
144
144
  ---
145
145