@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
@@ -11,23 +11,23 @@ gate but still requires consent (D-11).
11
11
 
12
12
  Each entry is a single fenced ```yaml block with this flat key:value shape.
13
13
 
14
- ### Schema v1 (Phase 30, matcher-consumed) original 6 fields
14
+ ### Schema v1 (Phase 30, matcher-consumed) - original 6 fields
15
15
 
16
16
  These six fields are consumed by `scripts/lib/issue-reporter/triage-matcher.cjs`
17
17
  (`matchKnownFailure(errorContext)`). The matcher reads ONLY these fields and
18
18
  ignores everything else gracefully (D-04 backward-compat).
19
19
 
20
- - `id` stable identifier (kebab-case or `KFM-NNN` numeric). Required.
21
- - `pattern` JavaScript regex string. Matched against
20
+ - `id` - stable identifier (kebab-case or `KFM-NNN` numeric). Required.
21
+ - `pattern` - JavaScript regex string. Matched against
22
22
  `[error.message, error.stack].filter(Boolean).join("\n")`. Required.
23
- - `diagnosis` one-sentence plain-English root cause. Required.
24
- - `remedy` one-sentence user-runnable action. Required.
25
- - `severity` advisory only, one of `low` / `medium` / `high`. Required.
26
- - `propose_report` boolean. If `true`, this mode is on the D-11
23
+ - `diagnosis` - one-sentence plain-English root cause. Required.
24
+ - `remedy` - one-sentence user-runnable action. Required.
25
+ - `severity` - advisory only, one of `low` / `medium` / `high`. Required.
26
+ - `propose_report` - boolean. If `true`, this mode is on the D-11
27
27
  whitelist: 30-04 may *propose* `--report` at error time for this
28
28
  class. Defaults to `false`. Advisory; the matcher does not act on it.
29
29
 
30
- ### Schema v2 (Phase 30.5 D-02) additive fields
30
+ ### Schema v2 (Phase 30.5 D-02) - additive fields
31
31
 
32
32
  These five fields are required on every entry from Phase 30.5 onward.
33
33
  They are NOT consumed by the Phase 30 matcher (D-04 backward-compat
@@ -36,22 +36,22 @@ future tooling (e.g. the Phase 30.5-02 fuzzy matcher, the Phase 30.5-03
36
36
  reflector incubator). Adding them does not change the matcher's
37
37
  behaviour for the original 6 fields.
38
38
 
39
- - `symptom` string, 1–3 sentences. Plain-English description of what
39
+ - `symptom` - string, 1–3 sentences. Plain-English description of what
40
40
  the user sees when this failure mode hits. Required.
41
41
  *Example:* `'Build fails with EUSAGE about a missing or stale lockfile after a package.json edit.'`
42
- - `root_cause` string, 1–2 sentences. Technical explanation of why
42
+ - `root_cause` - string, 1–2 sentences. Technical explanation of why
43
43
  the failure happens. Required.
44
44
  *Example:* `'npm ci enforces lockfile parity with package.json; manually editing one without the other breaks parity.'`
45
- - `fix` string (single line; multi-step encoded as `1) … 2) … 3) …`).
45
+ - `fix` - string (single line; multi-step encoded as `1) … 2) … 3) …`).
46
46
  Step-by-step user-runnable remedy. The original `remedy` field stays
47
47
  as the short matcher-consumed one-liner; `fix` is the fuller version
48
48
  with prerequisites and verification steps. The two MAY differ. Required.
49
49
  *Example:* `1) Run npm install once locally. 2) Stage the updated package-lock.json. 3) Commit and re-run npm ci.`
50
- - `related_phases` number[] (YAML flow style: `[12, 24]`). Phase numbers
50
+ - `related_phases` - number[] (YAML flow style: `[12, 24]`). Phase numbers
51
51
  this mode touches. Empty array `[]` is allowed when the mode is
52
52
  cross-cutting and not tied to a specific phase. Required.
53
53
  *Example:* `[12, 14.6, 24]`
54
- - `first_observed_cycle` string. Cycle slug like `cycle-2026-05`, or
54
+ - `first_observed_cycle` - string. Cycle slug like `cycle-2026-05`, or
55
55
  `pre-30.5` for entries harvested from before this catalogue formalised
56
56
  the schema. Required.
57
57
  *Example:* `'cycle-2026-05'`
@@ -77,7 +77,7 @@ Consumed by `scripts/lib/issue-reporter/triage-matcher.cjs`
77
77
 
78
78
  ## Entries
79
79
 
80
- ### KFM-001 EACCES on `.design/` write
80
+ ### KFM-001 - EACCES on `.design/` write
81
81
 
82
82
  Permission failure when the plugin writes into `.design/`. Common after
83
83
  `sudo`-cloning a repo or running CI as a user without write access to
@@ -97,7 +97,7 @@ related_phases: [11, 22, 29]
97
97
  first_observed_cycle: 'pre-30.5'
98
98
  ```
99
99
 
100
- ### KFM-002 `gh` CLI not on PATH
100
+ ### KFM-002 - `gh` CLI not on PATH
101
101
 
102
102
  The Phase 30 outbound submission path requires the user's `gh` CLI
103
103
  (D-05). If it's missing, Plan 30-06 falls back to clipboard + URL.
@@ -117,7 +117,7 @@ related_phases: [30]
117
117
  first_observed_cycle: 'pre-30.5'
118
118
  ```
119
119
 
120
- ### KFM-003 Node.js version mismatch
120
+ ### KFM-003 - Node.js version mismatch
121
121
 
122
122
  `package.json` declares `engines.node: ">=22"`. Older Node versions
123
123
  crash on the `--experimental-strip-types` test runner, or fail subtle
@@ -137,7 +137,7 @@ related_phases: [12, 14.6, 24]
137
137
  first_observed_cycle: 'pre-30.5'
138
138
  ```
139
139
 
140
- ### KFM-004 Figma token missing
140
+ ### KFM-004 - Figma token missing
141
141
 
142
142
  Figma-aware flows expect `FIGMA_TOKEN` (or the documented env-var alias)
143
143
  to be present. The 401/missing-env error class is recognisable.
@@ -156,7 +156,7 @@ related_phases: [13.2, 18, 19.6]
156
156
  first_observed_cycle: 'pre-30.5'
157
157
  ```
158
158
 
159
- ### KFM-005 Git working tree dirty
159
+ ### KFM-005 - Git working tree dirty
160
160
 
161
161
  Several phase-tooling commands assume a clean working tree (clean
162
162
  checkpoints between cycles). A dirty tree surfaces as a stderr line
@@ -176,7 +176,7 @@ related_phases: [22, 23.5, 25]
176
176
  first_observed_cycle: 'pre-30.5'
177
177
  ```
178
178
 
179
- ### KFM-006 `.planning/` directory missing
179
+ ### KFM-006 - `.planning/` directory missing
180
180
 
181
181
  GSD/GDD project commands assume `.planning/` has been initialised by
182
182
  `/gsd:new-project`. A bare ENOENT on that path is a clear self-fix.
@@ -195,7 +195,7 @@ related_phases: [22, 23.5]
195
195
  first_observed_cycle: 'pre-30.5'
196
196
  ```
197
197
 
198
- ### KFM-007 `reference/registry.json` invalid JSON
198
+ ### KFM-007 - `reference/registry.json` invalid JSON
199
199
 
200
200
  The Phase 14.5 registry is hand-edited; a stray trailing comma or
201
201
  unquoted key surfaces here. Self-fixable, not a maintainer issue.
@@ -214,7 +214,7 @@ related_phases: [14.5, 25]
214
214
  first_observed_cycle: 'pre-30.5'
215
215
  ```
216
216
 
217
- ### KFM-008 MCP server unreachable
217
+ ### KFM-008 - MCP server unreachable
218
218
 
219
219
  When the Figma / GDD MCP servers are not running, commands depending
220
220
  on them fail with a clear connection-refused class of error.
@@ -233,10 +233,10 @@ related_phases: [27.7, 33.6]
233
233
  first_observed_cycle: 'pre-30.5'
234
234
  ```
235
235
 
236
- ### KFM-009 Plugin file accidentally deleted
236
+ ### KFM-009 - Plugin file accidentally deleted
237
237
 
238
238
  A user-side `git clean -fdx` or aggressive editor refactor can remove
239
- plugin files. This is a re-install path, not a bug report path but
239
+ plugin files. This is a re-install path, not a bug report path - but
240
240
  it's on the whitelist because users typically can't tell it apart from
241
241
  an upstream regression.
242
242
 
@@ -254,7 +254,7 @@ related_phases: [24, 25]
254
254
  first_observed_cycle: 'pre-30.5'
255
255
  ```
256
256
 
257
- ### KFM-010 Disk full / ENOSPC
257
+ ### KFM-010 - Disk full / ENOSPC
258
258
 
259
259
  Out-of-space failures masquerade as obscure write errors. Self-fixable
260
260
  by freeing space; not a maintainer report path.
@@ -273,7 +273,7 @@ related_phases: [22, 24, 29]
273
273
  first_observed_cycle: 'pre-30.5'
274
274
  ```
275
275
 
276
- ### KFM-011 `validate-skill-length` pre-commit hook fails
276
+ ### KFM-011 - `validate-skill-length` pre-commit hook fails
277
277
 
278
278
  The local pre-commit hook `scripts/validate-skill-length.cjs` rejects
279
279
  SKILL.md files exceeding the agentskills.io length budget. A commit is
@@ -294,7 +294,7 @@ related_phases: [28.5, 28.6]
294
294
  first_observed_cycle: 'cycle-2026-05'
295
295
  ```
296
296
 
297
- ### KFM-012 `npm ci` lockfile drift
297
+ ### KFM-012 - `npm ci` lockfile drift
298
298
 
299
299
  `npm ci` enforces strict parity between `package.json` and
300
300
  `package-lock.json`. A manual edit to one without the other surfaces as
@@ -314,7 +314,7 @@ related_phases: [25]
314
314
  first_observed_cycle: 'cycle-2026-05'
315
315
  ```
316
316
 
317
- ### KFM-013 lychee transient SSL failure on whitelisted hosts
317
+ ### KFM-013 - lychee transient SSL failure on whitelisted hosts
318
318
 
319
319
  The link-check job (lychee) reports intermittent TLS errors on a small
320
320
  set of well-known authority hosts (`heydonworks.com`,
@@ -335,7 +335,7 @@ related_phases: [13.2, 18]
335
335
  first_observed_cycle: 'cycle-2026-05'
336
336
  ```
337
337
 
338
- ### KFM-014 `gh pr merge` fast-forward warning (cosmetic)
338
+ ### KFM-014 - `gh pr merge` fast-forward warning (cosmetic)
339
339
 
340
340
  GitHub's CLI surfaces a "Not possible to fast-forward" warning after a
341
341
  successful server-side merge in some workflow combinations. The merge
@@ -355,7 +355,7 @@ related_phases: [25]
355
355
  first_observed_cycle: 'cycle-2026-05'
356
356
  ```
357
357
 
358
- ### KFM-015 CodeQL `js/incomplete-sanitization` false positive
358
+ ### KFM-015 - CodeQL `js/incomplete-sanitization` false positive
359
359
 
360
360
  CodeQL flags `js/incomplete-sanitization` on regex-based input that
361
361
  operates on an enum-constrained value. The alert is a false positive in
@@ -375,7 +375,7 @@ related_phases: [25, 27.5]
375
375
  first_observed_cycle: 'cycle-2026-05'
376
376
  ```
377
377
 
378
- ### KFM-016 `gitleaks` false positive on documentation examples
378
+ ### KFM-016 - `gitleaks` false positive on documentation examples
379
379
 
380
380
  `gitleaks` flags literal example tokens (`ghp_…`, `sk-ant-…`) in
381
381
  `reference/*.md` documentation. These are educational examples, not real
@@ -395,7 +395,7 @@ related_phases: [25]
395
395
  first_observed_cycle: 'cycle-2026-05'
396
396
  ```
397
397
 
398
- ### KFM-017 `release.yml` version mismatch with `plugin.json`
398
+ ### KFM-017 - `release.yml` version mismatch with `plugin.json`
399
399
 
400
400
  The Phase 25 release safeguard rejects a `workflow_dispatch` invocation
401
401
  whose input version doesn't match the version declared in `plugin.json`.
@@ -415,7 +415,7 @@ related_phases: [25]
415
415
  first_observed_cycle: 'cycle-2026-05'
416
416
  ```
417
417
 
418
- ### KFM-018 `npm publish` 404 after `NPM_TOKEN` rotation
418
+ ### KFM-018 - `npm publish` 404 after `NPM_TOKEN` rotation
419
419
 
420
420
  `npm publish` returns `404 Not Found` from the registry when the
421
421
  `NPM_TOKEN` secret has been rotated upstream but the GitHub repo secret
@@ -436,7 +436,7 @@ related_phases: [25]
436
436
  first_observed_cycle: 'cycle-2026-05'
437
437
  ```
438
438
 
439
- ### KFM-019 macOS symlinked tmpdir comparison failure
439
+ ### KFM-019 - macOS symlinked tmpdir comparison failure
440
440
 
441
441
  Tests that compare a tmpdir-derived path against an expected absolute
442
442
  path fail on macOS because `/var/folders/...` is a symlink to
@@ -457,7 +457,7 @@ related_phases: [12, 14.6]
457
457
  first_observed_cycle: 'cycle-2026-05'
458
458
  ```
459
459
 
460
- ### KFM-020 Windows CRLF vs LF byte-comparison mismatch
460
+ ### KFM-020 - Windows CRLF vs LF byte-comparison mismatch
461
461
 
462
462
  Tests that byte-compare file contents fail on Windows because
463
463
  `git show HEAD:<file>` returns LF line endings while
@@ -478,7 +478,7 @@ related_phases: [12, 14.6, 24]
478
478
  first_observed_cycle: 'cycle-2026-05'
479
479
  ```
480
480
 
481
- ### KFM-021 Skill name contains colon (agentskills.io slug regex)
481
+ ### KFM-021 - Skill name contains colon (agentskills.io slug regex)
482
482
 
483
483
  Skills named with a colon (e.g. `get-design-done:foo`) fail the
484
484
  agentskills.io spec validator. The spec reserves colons for namespace
@@ -499,12 +499,12 @@ related_phases: [28.5, 28.6]
499
499
  first_observed_cycle: 'cycle-2026-05'
500
500
  ```
501
501
 
502
- ### KFM-022 Dependabot alert on transitive optional peer not in resolved tree
502
+ ### KFM-022 - Dependabot alert on transitive optional peer not in resolved tree
503
503
 
504
504
  Dependabot opens an alert for a vulnerable transitive dependency that is
505
505
  declared as an optional or peer dep upstream and is NOT actually
506
506
  installed (`npm ls <dep>` shows nothing). The alert is dismissible with
507
- "not vulnerable not in resolved tree".
507
+ "not vulnerable - not in resolved tree".
508
508
 
509
509
  ```yaml
510
510
  id: KFM-022
@@ -2,13 +2,13 @@
2
2
 
3
3
  These rules are framework-invariant across the GDD pipeline. They do not change between cycles, phases, or tasks. Every agent imports `reference/shared-preamble.md`, which aggregates `reference/meta-rules.md` first.
4
4
 
5
- **Tier: L0** (frozen prefix; stabilizes the Anthropic 5-min prompt-cache prefix across agent spawns the churning L2 body below does NOT invalidate this).
5
+ **Tier: L0** (frozen prefix; stabilizes the Anthropic 5-min prompt-cache prefix across agent spawns - the churning L2 body below does NOT invalidate this).
6
6
 
7
7
  ---
8
8
 
9
9
  ## Required Reading Discipline
10
10
 
11
- When the orchestrator's prompt contains a `<required_reading>` block, you MUST read every file it lists with the `Read` tool before taking any other action. Paths prefixed with `@` are file paths pass them directly to `Read`. Skipping required reading is a hard violation: you will produce stale output that the downstream verifier catches, wasting a full spawn cycle.
11
+ When the orchestrator's prompt contains a `<required_reading>` block, you MUST read every file it lists with the `Read` tool before taking any other action. Paths prefixed with `@` are file paths - pass them directly to `Read`. Skipping required reading is a hard violation: you will produce stale output that the downstream verifier catches, wasting a full spawn cycle.
12
12
 
13
13
  ## Writes Protocol
14
14
 
@@ -52,14 +52,14 @@ resume-hint: <one-sentence instruction for a resumption spawn>
52
52
  </context-exhaustion>
53
53
  ```
54
54
 
55
- …before your completion marker. The hook captures this into STATE.md so the orchestrator can re-spawn you with a narrower scope. Do not guess when you're near exhaustion only emit when a concrete obstacle (file too large to read, required diff too wide) forced the call.
55
+ …before your completion marker. The hook captures this into STATE.md so the orchestrator can re-spawn you with a narrower scope. Do not guess when you're near exhaustion - only emit when a concrete obstacle (file too large to read, required diff too wide) forced the call.
56
56
 
57
57
  A PreToolUse hook at `hooks/budget-enforcer.js` intercepts every `Task` spawn (including the one that invoked you). The hook may:
58
- - **Short-circuit** your spawn with a cached result from `.design/cache-manifest.json` (transparent you never run).
58
+ - **Short-circuit** your spawn with a cached result from `.design/cache-manifest.json` (transparent - you never run).
59
59
  - **Downgrade** your tier to Haiku at the 80% per-task cap soft-threshold, silently (`auto_downgrade_on_cap: true` in `.design/budget.json`, D-03).
60
60
  - **Hard-block** your spawn at the 100% per-task or per-phase cap with an actionable error (D-02).
61
61
 
62
- Implication for you as the agent: **do not assume a specific model tier is live.** Your output must be correct whether you run on Haiku, Sonnet, or Opus. If a task genuinely requires reasoning density beyond Haiku, the `size_budget` + `default-tier` combination should have been set at authoring time so the router routes it correctly the remedy is a frontmatter update (a Phase 11 reflector proposal), not a mid-run assumption.
62
+ Implication for you as the agent: **do not assume a specific model tier is live.** Your output must be correct whether you run on Haiku, Sonnet, or Opus. If a task genuinely requires reasoning density beyond Haiku, the `size_budget` + `default-tier` combination should have been set at authoring time so the router routes it correctly - the remedy is a frontmatter update (a Phase 11 reflector proposal), not a mid-run assumption.
63
63
 
64
64
  ---
65
65
 
@@ -1,17 +1,17 @@
1
- # Material Design Token Migration (M3 → next) Rule Library
1
+ # Material Design Token Migration (M3 → next) - Rule Library
2
2
 
3
- Honest framing: Google has **not** released a "Material Design 4" spec Material publicly evolved M2 → M3 (Material You), and there is no public M4. This library is therefore a **forward-looking rule set for migrating a Material-token-based design system to the next Material major**, grounded entirely in the **real, well-documented M2 → M3 token migration** (the `--mdc-*` → `--md-sys-*` reshape, color-role expansion, reference-vs-system token split, typescale rename, and `mwc-*` → `md-*` component rename). Those concrete patterns are the migration *shape* the next major will most plausibly follow; nothing below invents tokens from a fictional spec. GDD never auto-applies these rules feed `ds-migration-planner` and template `codemod-gen.cjs` output that the USER reviews and runs.
3
+ Honest framing: Google has **not** released a "Material Design 4" spec - Material publicly evolved M2 → M3 (Material You), and there is no public M4. This library is therefore a **forward-looking rule set for migrating a Material-token-based design system to the next Material major**, grounded entirely in the **real, well-documented M2 → M3 token migration** (the `--mdc-*` → `--md-sys-*` reshape, color-role expansion, reference-vs-system token split, typescale rename, and `mwc-*` → `md-*` component rename). Those concrete patterns are the migration *shape* the next major will most plausibly follow; nothing below invents tokens from a fictional spec. GDD never auto-applies - these rules feed `ds-migration-planner` and template `codemod-gen.cjs` output that the USER reviews and runs.
4
4
 
5
5
  ## Detection
6
6
 
7
7
  Detect a Material-token design system from `package.json` **only** (no lockfile, no source scan at this stage):
8
8
 
9
9
  - **Dependencies** (`dependencies` / `devDependencies` / `peerDependencies`):
10
- - `@material/web` Material Web Components (M3-era; the forward-migration target surface).
11
- - `@material/*` MDC packages `@material/button`, `@material/textfield`, `@material/theme`, `@material/typography`, etc. (M2-era MDC Web). Presence of many `@material/<component>` entries strongly signals an M2 MDC system.
12
- - `material-components-web` the MDC Web umbrella package (M2-era).
13
- - `@angular/material` read the **major** version: `<= 14` ≈ M2 theming API, `>= 15` ≈ M3 / MDC-backed components, `>= 17` ≈ M3 tokens default. Pair with `@angular/cdk` major as a cross-check.
14
- - **Signal strength**: treat as a migration candidate when (a) at least one package above is present **and** (b) the manifest shows Material token usage intent e.g. a `@material/theme` / `@material/tokens` dep, a `"material"` config block, or MDC/M3 packages pinned to a pre-target major. Manifest-only detection defer actual token-occurrence scanning to the planner's codemod-gen pass.
10
+ - `@material/web` - Material Web Components (M3-era; the forward-migration target surface).
11
+ - `@material/*` MDC packages - `@material/button`, `@material/textfield`, `@material/theme`, `@material/typography`, etc. (M2-era MDC Web). Presence of many `@material/<component>` entries strongly signals an M2 MDC system.
12
+ - `material-components-web` - the MDC Web umbrella package (M2-era).
13
+ - `@angular/material` - read the **major** version: `<= 14` ≈ M2 theming API, `>= 15` ≈ M3 / MDC-backed components, `>= 17` ≈ M3 tokens default. Pair with `@angular/cdk` major as a cross-check.
14
+ - **Signal strength**: treat as a migration candidate when (a) at least one package above is present **and** (b) the manifest shows Material token usage intent - e.g. a `@material/theme` / `@material/tokens` dep, a `"material"` config block, or MDC/M3 packages pinned to a pre-target major. Manifest-only detection - defer actual token-occurrence scanning to the planner's codemod-gen pass.
15
15
 
16
16
  ## Migration rules
17
17
 
@@ -30,24 +30,24 @@ Detect a Material-token design system from `package.json` **only** (no lockfile,
30
30
  | MD-11 | token-rename | `--mdc-elevation-*` / elevation z-values → `--md-sys-elevation-level0..level5` | Numeric dp elevations become a 6-step token scale; pair with surface-container roles. |
31
31
  | MD-12 | token-rename | `--mdc-shape-medium` / corner radii → `--md-sys-shape-corner-medium` (`-small` / `-large` / `-extra-large` / `-full`) | Shape scale renamed and bucketed into corner roles. |
32
32
  | MD-13 | new-default | *(opt-in)* → dynamic color enabled (`md.sys.color.*` derived from a seed/source color) | M3 default theming model; replaces a static brand palette. Highest visual delta. |
33
- | MD-14 | remove-component | `mwc-button` → `md-filled-button` (and `md-outlined-button` / `md-text-button` / `md-tonal-button`) | `@material/web` element rename; one MWC element fans out to explicit M3 variants no clean 1:1 transform, pick a variant by hand (manual TODO). |
34
- | MD-15 | remove-component | `mwc-textfield` → `md-filled-text-field` / `md-outlined-text-field` | `mwc-*` → `md-*` rename; one element fans out to 2 variants appearance now encoded in the element name, choose by hand (manual TODO). |
33
+ | MD-14 | remove-component | `mwc-button` → `md-filled-button` (and `md-outlined-button` / `md-text-button` / `md-tonal-button`) | `@material/web` element rename; one MWC element fans out to explicit M3 variants - no clean 1:1 transform, pick a variant by hand (manual TODO). |
34
+ | MD-15 | remove-component | `mwc-textfield` → `md-filled-text-field` / `md-outlined-text-field` | `mwc-*` → `md-*` rename; one element fans out to 2 variants - appearance now encoded in the element name, choose by hand (manual TODO). |
35
35
  | MD-16 | rename-prop | `?outlined` / `?raised` boolean attrs → variant element (per MD-14/MD-15) | Style-toggle props removed; pick the right `md-*` element instead of toggling a flag. |
36
- | MD-17 | remove-component | `mwc-icon-button-toggle` → *(removed)* compose `md-icon-button` + `toggle` selected state | Dedicated toggle element dropped; rebuild with base icon-button + selected state. |
36
+ | MD-17 | remove-component | `mwc-icon-button-toggle` → *(removed)* - compose `md-icon-button` + `toggle` selected state | Dedicated toggle element dropped; rebuild with base icon-button + selected state. |
37
37
  | MD-18 | rename-class | `.mdc-button` / `.mdc-card` (BEM CSS classes) → web-component element + part styling | M3 Web moves from BEM-class theming to custom-element `::part()` / token styling. |
38
38
 
39
39
  ## Impact notes
40
40
 
41
- **High visual delta design + QA review required, do not ship blind:**
41
+ **High visual delta - design + QA review required, do not ship blind:**
42
42
  - **Dynamic color (MD-13)**: switching from a fixed brand palette to seed-derived `md.sys.color.*` changes nearly every on-screen color. Confirm seed source, contrast pairs (`on-*` roles), and light/dark tonal output before adopting.
43
43
  - **Surface-container roles (MD-05, MD-07)**: replacing elevation-overlay surfaces with tonal containers visibly alters card/sheet/menu backgrounds and divider weight. Audit layering after migration.
44
- - **Typescale (MD-09, MD-10)**: M2 named styles do not map 1:1 to M3 role sizes size, weight, line-height, and tracking all move. Expect reflow; review dense text and truncation.
44
+ - **Typescale (MD-09, MD-10)**: M2 named styles do not map 1:1 to M3 role sizes - size, weight, line-height, and tracking all move. Expect reflow; review dense text and truncation.
45
45
 
46
- **Mechanical codemod-templatable, low judgment per occurrence:**
46
+ **Mechanical - codemod-templatable, low judgment per occurrence:**
47
47
  - Pure custom-property renames (MD-01–MD-04, MD-06, MD-08, MD-11, MD-12) are string-substitution-shaped. `codemod-gen.cjs` can template these as find/replace with a token map; still diff-review for false positives in comments, strings, and unrelated `--mdc-*` namespaces.
48
48
 
49
- **Manual-review items never auto-apply:**
50
- - **Component renames + fan-out (MD-14, MD-15)**: one source element maps to several target variants; the correct target depends on the original prop set a human (or planner) must choose. Generated templates should emit a *candidate* mapping plus a TODO, not a committed rename.
51
- - **Removed components (MD-17)** and **prop→variant collapse (MD-16)**: require reconstructing behavior (selected/toggle state, layout) flag for hand-editing.
49
+ **Manual-review items - never auto-apply:**
50
+ - **Component renames + fan-out (MD-14, MD-15)**: one source element maps to several target variants; the correct target depends on the original prop set - a human (or planner) must choose. Generated templates should emit a *candidate* mapping plus a TODO, not a committed rename.
51
+ - **Removed components (MD-17)** and **prop→variant collapse (MD-16)**: require reconstructing behavior (selected/toggle state, layout) - flag for hand-editing.
52
52
  - **Class→element migration (MD-18)**: BEM-class theming → custom-element `::part()` is a structural rewrite, not a rename; scope as its own task.
53
- - **Angular major bumps**: when detection keys off `@angular/material`, the framework upgrade (DI, theming mixins, component API) dwarfs the token rename sequence the framework migration first, tokens second.
53
+ - **Angular major bumps**: when detection keys off `@angular/material`, the framework upgrade (DI, theming mixins, component API) dwarfs the token rename - sequence the framework migration first, tokens second.
@@ -1,16 +1,16 @@
1
- # MUI (Material UI) v5 → v6 Migration Rule Library
1
+ # MUI (Material UI) v5 → v6 - Migration Rule Library
2
2
 
3
- A proposal-only rule library that `agents/ds-migration-planner.md` reads to draft a v5→v6 migration plan, and that the pure `scripts/lib/migration/codemod-gen.cjs` uses to template codemods the USER reviews and runs. GDD never auto-applies any rule here every entry is a *proposal* with a human in the loop. v6 is mostly mechanical (import + prefix renames) with two high-visual-delta areas: the `Grid` overhaul and the CSS-theme-variables adoption.
3
+ A proposal-only rule library that `agents/ds-migration-planner.md` reads to draft a v5→v6 migration plan, and that the pure `scripts/lib/migration/codemod-gen.cjs` uses to template codemods the USER reviews and runs. GDD never auto-applies any rule here - every entry is a *proposal* with a human in the loop. v6 is mostly mechanical (import + prefix renames) with two high-visual-delta areas: the `Grid` overhaul and the CSS-theme-variables adoption.
4
4
 
5
5
  ## Detection
6
6
 
7
- Detect MUI and the v5→v6 boundary from `package.json` only no lockfile read, no source scan. The planner classifies the project from the dependency graph alone:
7
+ Detect MUI and the v5→v6 boundary from `package.json` only - no lockfile read, no source scan. The planner classifies the project from the dependency graph alone:
8
8
 
9
9
  - **Is MUI?** `dependencies` / `devDependencies` contains `@mui/material`. Treat the presence of any of these companion packages as corroborating evidence: `@mui/system`, `@mui/icons-material`, `@mui/lab`, `@mui/styled-engine` (or the styled-components variant `@mui/styled-engine-sc`), `@mui/base`.
10
- - **On v5 (migration applies)?** The `@mui/material` semver range resolves to a `^5` / `5.x` major. Treat `~5`, `>=5 <6`, and a pinned `5.x.y` the same way. A `^6` / `6.x` range means the project is already on v6 emit no rules. A `^7` range means it has moved past the scope of this library (defer to a v6→v7 library).
11
- - **Companion-major skew (flag, do not migrate):** if `@mui/material` is `^5` but `@mui/system` or `@mui/styled-engine` resolves to `^6` (or vice-versa), the install is half-upgraded. Surface this as a blocker for the planner every rule below assumes a coherent v5 baseline, and a mixed graph produces unreliable codemod output.
10
+ - **On v5 (migration applies)?** The `@mui/material` semver range resolves to a `^5` / `5.x` major. Treat `~5`, `>=5 <6`, and a pinned `5.x.y` the same way. A `^6` / `6.x` range means the project is already on v6 - emit no rules. A `^7` range means it has moved past the scope of this library (defer to a v6→v7 library).
11
+ - **Companion-major skew (flag, do not migrate):** if `@mui/material` is `^5` but `@mui/system` or `@mui/styled-engine` resolves to `^6` (or vice-versa), the install is half-upgraded. Surface this as a blocker for the planner - every rule below assumes a coherent v5 baseline, and a mixed graph produces unreliable codemod output.
12
12
  - **Peer majors to record** (planner notes, not rules in this library): `@mui/x-data-grid`, `@mui/x-date-pickers`, `@mui/x-charts`, `@mui/x-tree-view`. MUI X tracks its own v5→v6/v7 line on a separate cadence, but a Core v6 bump usually forces an X major bump too. Flag the Core/X pair so the planner sequences both migrations together rather than leaving the graph inconsistent.
13
- - **Styled engine:** record whether `@mui/styled-engine-sc` (styled-components) is present it changes how MUI6-19 (`styled`/`deepmerge`) is reviewed versus the default Emotion engine.
13
+ - **Styled engine:** record whether `@mui/styled-engine-sc` (styled-components) is present - it changes how MUI6-19 (`styled`/`deepmerge`) is reviewed versus the default Emotion engine.
14
14
  - **Runtime gates:** read `engines.node` and the `typescript` devDependency. v6 requires Node 14+ and TypeScript 4.7+ and drops IE 11 (see MUI6-17); a lower floor in `package.json` is itself a migration task.
15
15
 
16
16
  ## Migration rules
@@ -21,13 +21,13 @@ Kinds are constrained to: `rename-class`, `rename-prop`, `remove-component`, `to
21
21
  |---|---|---|---|
22
22
  | MUI6-01 | rename-class | `import { Unstable_Grid2 as Grid2 } from '@mui/material'` → `import { Grid2 } from '@mui/material'` | The `Unstable_` prefix is dropped; `Grid2` is now stable and is slated to become the default `Grid` in the next major. |
23
23
  | MUI6-02 | rename-prop | `<Grid item xs={12} sm={6}>` → `<Grid size={{ xs: 12, sm: 6 }}>` | Grid2's per-breakpoint props collapse into one object `size` prop; the standalone `item` prop is gone (every non-container is implicitly an item). |
24
- | MUI6-03 | rename-prop | `<Grid xs={6}>` → `<Grid size={6}>` | When the value is identical across breakpoints, `size` takes a single number instead of an object shorthand for the MUI6-02 object form. |
24
+ | MUI6-03 | rename-prop | `<Grid xs={6}>` → `<Grid size={6}>` | When the value is identical across breakpoints, `size` takes a single number instead of an object - shorthand for the MUI6-02 object form. |
25
25
  | MUI6-04 | rename-prop | `xsOffset={2} smOffset={3}` → `offset={{ xs: 2, sm: 3 }}` | Per-breakpoint `*Offset` props collapse into one object `offset` prop (single-value form `offset={2}` also allowed). |
26
26
  | MUI6-05 | new-default | `<Grid xs>` (boolean auto-grow) → `<Grid size="grow">` | The boolean `true` size value is renamed to the string `"grow"`; a bare boolean breakpoint prop no longer compiles. |
27
27
  | MUI6-06 | new-default | `<Grid2 disableEqualOverflow>` → (prop removed) | `disableEqualOverflow` is deleted; v6 Grid2 lays out spacing with CSS `gap`, so the old negative-margin overflow workaround is unnecessary. |
28
28
  | MUI6-07 | rename-class | `experimental_extendTheme` → `extendTheme` (from `@mui/material/styles`) | The CSS-vars theme factory leaves experimental status; import the stable name. The `experimental_` alias is removed, not deprecated-with-shim. |
29
29
  | MUI6-08 | rename-class | `Experimental_CssVarsProvider as CssVarsProvider` → `CssVarsProvider` | Drop the `Experimental_` prefix. Preferred end-state: v6 `ThemeProvider` now subsumes every CssVarsProvider feature, so consolidating onto a single `ThemeProvider` is the recommended target. |
30
- | MUI6-09 | new-default | `createTheme({ ... })` → `createTheme({ cssVariables: true, ... })` | Opt-in flag that emits CSS custom properties for the theme; required to read `theme.vars.*` and to get SSR-safe, flash-free dark mode. Off by default adding it is a proposal, never automatic. |
30
+ | MUI6-09 | new-default | `createTheme({ ... })` → `createTheme({ cssVariables: true, ... })` | Opt-in flag that emits CSS custom properties for the theme; required to read `theme.vars.*` and to get SSR-safe, flash-free dark mode. Off by default - adding it is a proposal, never automatic. |
31
31
  | MUI6-10 | token-rename | `theme.palette.primary.main` (in `styled`/`sx`) → `theme.vars.palette.primary.main` | Under `cssVariables: true`, read palette tokens through `theme.vars.*` (CSS-var references) so values resolve per color scheme at runtime instead of being baked in at build time. Plain `theme.palette.*` still returns a value but won't switch schemes via CSS. |
32
32
  | MUI6-11 | token-rename | `theme.palette.mode === 'dark' ? a : b` → `theme.applyStyles('dark', { ... })` | Replace color-mode ternaries in `styled`/`sx` with `applyStyles`; ternaries break under CSS-vars dark mode because both schemes are emitted into one stylesheet and the JS branch resolves only once. |
33
33
  | MUI6-12 | remove-component | `import { LoadingButton } from '@mui/lab'` → `import { Button } from '@mui/material'` + `loading` / `loadingPosition` props | `LoadingButton` is merged into the core `Button`; the `@mui/lab` export is deprecated. Move `loading`, `loadingPosition`, and `loadingIndicator` onto `Button`. |
@@ -35,24 +35,24 @@ Kinds are constrained to: `rename-class`, `rename-prop`, `remove-component`, `to
35
35
  | MUI6-14 | rename-class | `listItemClasses` (e.g. `.Mui-selected`, `.Mui-focusVisible` keys) → `listItemButtonClasses` | Companion to MUI6-13: the interactive state class keys move from the `ListItem` class object to `ListItemButton`, so any `styleOverrides` or CSS targeting those keys must be re-pointed. |
36
36
  | MUI6-15 | new-default | `<Divider orientation="vertical" />` renders an `hr` element → renders a `div` | A vertical `Divider` now emits a `div` carrying a separator ARIA role (an `hr` cannot be vertical/inline). Update any CSS or test selector that assumed an `hr` element. |
37
37
  | MUI6-16 | new-default | `AccordionSummary` content is bare → wrapped in an `h3` heading element | The summary is wrapped in a heading by default; override the level via `slotProps={{ heading: { component: 'h4' } }}`. Affects heading-order audits and heading-based selectors/queries. |
38
- | MUI6-17 | new-default | Node 12 / TS 3.5 / IE 11 baseline → Node 14+, TS 4.7+, IE 11 dropped | Raise `engines.node`, bump the `typescript` devDependency, and remove IE-11 polyfills / transpile targets. Pure compatibility surface no component code shape change. |
38
+ | MUI6-17 | new-default | Node 12 / TS 3.5 / IE 11 baseline → Node 14+, TS 4.7+, IE 11 dropped | Raise `engines.node`, bump the `typescript` devDependency, and remove IE-11 polyfills / transpile targets. Pure compatibility surface - no component code shape change. |
39
39
  | MUI6-18 | remove-component | UMD bundle (`@mui/material/umd`, CDN `<script>` usage) → (removed) | The pre-bundled UMD build is dropped (~2.5 MB saved). Move CDN/`<script>` consumers to a bundler or native ESM; pure-ESM package `exports` are enforced, so deep internal `lib/` import paths also stop resolving. |
40
- | MUI6-19 | token-rename | `import { deepmerge } from '@mui/utils'`; deep-spread of `theme.palette` in `styleOverrides` → re-verify against `@mui/utils` v6 | `styled` and `deepmerge` internals were reworked for the CSS-vars theme. Custom `styleOverrides` that mutated or deep-merged `theme.palette` should be re-tested (especially alongside MUI6-10). Flag for manual review; do not auto-rewrite behavior, not just the import path, may differ. |
40
+ | MUI6-19 | token-rename | `import { deepmerge } from '@mui/utils'`; deep-spread of `theme.palette` in `styleOverrides` → re-verify against `@mui/utils` v6 | `styled` and `deepmerge` internals were reworked for the CSS-vars theme. Custom `styleOverrides` that mutated or deep-merged `theme.palette` should be re-tested (especially alongside MUI6-10). Flag for manual review; do not auto-rewrite - behavior, not just the import path, may differ. |
41
41
  | MUI6-20 | rename-prop | `components={{ ... }}` / `componentsProps={{ ... }}` (on slotted components) → `slots={{ ... }}` / `slotProps={{ ... }}` | v6 finalizes the slot-API standardization: the legacy `components`/`componentsProps` pair is deprecated in favor of `slots`/`slotProps` across Modal, Popper, Autocomplete, Badge, Tooltip, and friends. Note that slot *names* are lowercased (e.g. `Backdrop` → `backdrop`). |
42
- | MUI6-21 | remove-component | `import { Hidden } from '@mui/material'` → `sx` display utilities or `useMediaQuery` | The `Hidden` helper is removed; replace `<Hidden smDown>` with responsive `sx={{ display: { xs: 'none', sm: 'block' } }}` or a `useMediaQuery` guard. There is no drop-in component this is a manual rewrite. |
42
+ | MUI6-21 | remove-component | `import { Hidden } from '@mui/material'` → `sx` display utilities or `useMediaQuery` | The `Hidden` helper is removed; replace `<Hidden smDown>` with responsive `sx={{ display: { xs: 'none', sm: 'block' } }}` or a `useMediaQuery` guard. There is no drop-in component - this is a manual rewrite. |
43
43
  | MUI6-22 | rename-class | `createMuiTheme` / `adaptV4Theme` (lingering v4 aliases) → `createTheme` | Any remaining v4-era `createMuiTheme` alias and the `adaptV4Theme` shim are removed in v6; collapse onto `createTheme`. Surfaces mainly in codebases that did a partial v4→v5 pass and left the aliases in place. |
44
44
 
45
45
  ## Impact notes
46
46
 
47
- High visual delta these require human review of the rendered result, not just a green diff:
47
+ High visual delta - these require human review of the rendered result, not just a green diff:
48
48
 
49
49
  - **Grid overhaul (MUI6-01…06):** moving off the `item xs={}` layout model to `size={{}}` *plus* the switch to CSS `gap` spacing can shift column widths, gutters, and wrap behavior. Generate the codemod proposal, then require a side-by-side visual diff before accepting. The official `v6.0.0/grid-v2-props` codemod covers the prop rename but not bespoke spacing/negative-margin math.
50
- - **CSS theme variables (MUI6-09…11):** enabling `cssVariables: true` together with the `theme.vars.*` and `applyStyles` migration changes how *every* themed color resolves and how dark mode flips. This touches the whole surface at once stage it behind a feature flag and review color and contrast holistically, not file-by-file.
50
+ - **CSS theme variables (MUI6-09…11):** enabling `cssVariables: true` together with the `theme.vars.*` and `applyStyles` migration changes how *every* themed color resolves and how dark mode flips. This touches the whole surface at once - stage it behind a feature flag and review color and contrast holistically, not file-by-file.
51
51
  - **Structural DOM rules (MUI6-13…16):** `ListItemButton` nesting, the vertical `Divider` → `div`, and the Accordion `h3` wrap all change the rendered DOM and heading order. Re-run accessibility and heading-order audits and fix brittle element/heading selectors in tests.
52
52
 
53
- Mechanical low risk, but still proposal-only (the USER reviews every generated patch):
53
+ Mechanical - low risk, but still proposal-only (the USER reviews every generated patch):
54
54
 
55
55
  - **Import / prefix / class renames** (MUI6-01, MUI6-07, MUI6-08, MUI6-12, MUI6-14) and the **engine bumps** (MUI6-17) are find-and-replace–class changes that `codemod-gen.cjs` can template safely. MUI6-18 is mechanical to detect but its *fix* (re-tooling a CDN consumer onto a bundler) is a build-system change, so route it to manual.
56
- - **MUI6-19** looks mechanical (one import) but hides a behavior change always tag it manual-review, never auto-apply.
56
+ - **MUI6-19** looks mechanical (one import) but hides a behavior change - always tag it manual-review, never auto-apply.
57
57
 
58
- Sequencing: do the prefix/import/class renames first (smallest blast radius), then the Grid pass, then the CSS-vars pass last (largest blast radius, and it interacts with MUI6-19). Resolve any companion-major skew and the peer MUI X majors surfaced in Detection *before* starting a Core v6 bump typically drags an `@mui/x-*` major along with it.
58
+ Sequencing: do the prefix/import/class renames first (smallest blast radius), then the Grid pass, then the CSS-vars pass last (largest blast radius, and it interacts with MUI6-19). Resolve any companion-major skew and the peer MUI X majors surfaced in Detection *before* starting - a Core v6 bump typically drags an `@mui/x-*` major along with it.
@@ -1,31 +1,31 @@
1
- # shadcn/ui v1 → v2 Migration Rule Library
1
+ # shadcn/ui v1 → v2 - Migration Rule Library
2
2
 
3
3
  This library encodes the concrete, mechanical changes a project must make when moving a shadcn/ui codebase from the v1 era (Tailwind v3, HSL CSS variables, Radix `forwardRef`) to the v2 era (Tailwind v4 CSS-first theming, OKLCH variables, React 19 ref-as-prop). It is consumed by `agents/ds-migration-planner.md` to scope a migration and by `scripts/lib/migration/codemod-gen.cjs` to emit jscodeshift / ast-grep templates.
4
4
 
5
- Every rule below is **proposal-only**. GDD never auto-applies a migration: the codemod generator emits reviewable templates, and the user inspects and runs each one before it touches the working tree. Treat the rules as a checklist the planner reasons over, not an executable patch the planner's job is to scope, order, and impact-score, not to mutate code.
5
+ Every rule below is **proposal-only**. GDD never auto-applies a migration: the codemod generator emits reviewable templates, and the user inspects and runs each one before it touches the working tree. Treat the rules as a checklist the planner reasons over, not an executable patch - the planner's job is to scope, order, and impact-score, not to mutate code.
6
6
 
7
7
  ## Detection
8
8
 
9
- shadcn/ui is **CLI-managed copy-in source**, not a versioned runtime dependency the component code lives in the repo (`components/ui/*`), so there is no `shadcn` line in `dependencies` to read a version from. The planner therefore infers the era from `package.json` plus the project's `components.json`.
9
+ shadcn/ui is **CLI-managed copy-in source**, not a versioned runtime dependency - the component code lives in the repo (`components/ui/*`), so there is no `shadcn` line in `dependencies` to read a version from. The planner therefore infers the era from `package.json` plus the project's `components.json`.
10
10
 
11
11
  Primary boundary signals, strongest first:
12
12
 
13
13
  - **`tailwindcss` major in `package.json`** is the single strongest signal: `^3.x` → v1 era; `^4.x` → v2 era. Almost everything else follows from this.
14
- - **`components.json` shape** its presence confirms a shadcn project. A non-empty `tailwind.config` key (a path to a JS/TS config) signals v1; an empty `tailwind.config` string plus a `tailwind.css` pointing at a file that opens with `@import "tailwindcss"` signals v2.
15
- - **`react` / `react-dom` major** `^19` indicates the project can use ref-as-prop and is on the v2 track; `^18` means `forwardRef` shims in the component source are still load-bearing.
14
+ - **`components.json` shape** - its presence confirms a shadcn project. A non-empty `tailwind.config` key (a path to a JS/TS config) signals v1; an empty `tailwind.config` string plus a `tailwind.css` pointing at a file that opens with `@import "tailwindcss"` signals v2.
15
+ - **`react` / `react-dom` major** - `^19` indicates the project can use ref-as-prop and is on the v2 track; `^18` means `forwardRef` shims in the component source are still essential.
16
16
 
17
17
  Supporting (corroborating, not decisive) signals:
18
18
 
19
- - **`@radix-ui/*` versions** v1 pins per-primitive packages (e.g. `@radix-ui/react-dialog`); late-v2 projects often consolidate onto the unified `radix-ui` package. Either pattern is acceptable; the version floor matters more than the package name.
20
- - **Animation dep** `tailwindcss-animate` present → v1; `tw-animate-css` → v2.
21
- - **`tailwind-merge` major** `^2` → v1; `^3` → v2.
22
- - **Neutral deps** `next-themes`, `lucide-react`, `class-variance-authority`, `clsx` appear in both eras and are **not** boundary signals.
19
+ - **`@radix-ui/*` versions** - v1 pins per-primitive packages (e.g. `@radix-ui/react-dialog`); late-v2 projects often consolidate onto the unified `radix-ui` package. Either pattern is acceptable; the version floor matters more than the package name.
20
+ - **Animation dep** - `tailwindcss-animate` present → v1; `tw-animate-css` → v2.
21
+ - **`tailwind-merge` major** - `^2` → v1; `^3` → v2.
22
+ - **Neutral deps** - `next-themes`, `lucide-react`, `class-variance-authority`, `clsx` appear in both eras and are **not** boundary signals.
23
23
 
24
- Version detection is **from `package.json` only** never execute the shadcn CLI, hit a network registry, or shell out to resolve versions. If `tailwindcss` is absent or unparseable, the planner reports "era undetermined" rather than guessing.
24
+ Version detection is **from `package.json` only** - never execute the shadcn CLI, hit a network registry, or shell out to resolve versions. If `tailwindcss` is absent or unparseable, the planner reports "era undetermined" rather than guessing.
25
25
 
26
26
  ## Migration rules
27
27
 
28
- Each row is one codemod target. `Kind` is drawn from the `codemod-gen.cjs` enum: `rename-class` | `rename-prop` | `remove-component` | `token-rename` | `new-default`. Rule IDs are stable the planner references them in its impact report and the generator names emitted templates after them.
28
+ Each row is one codemod target. `Kind` is drawn from the `codemod-gen.cjs` enum: `rename-class` | `rename-prop` | `remove-component` | `token-rename` | `new-default`. Rule IDs are stable - the planner references them in its impact report and the generator names emitted templates after them.
29
29
 
30
30
  | Rule ID | Kind | From → To | Note |
31
31
  |---|---|---|---|
@@ -38,11 +38,11 @@ Each row is one codemod target. `Kind` is drawn from the `codemod-gen.cjs` enum:
38
38
  | SHADCN-07 | remove-component | `components/ui/toast.tsx` + `hooks/use-toast.ts` + Radix `<Toaster/>` → `sonner` `<Toaster/>` + `toast` import | The Radix-based toast and the `useToast` hook are removed in favor of Sonner. Imports of `useToast` / `@/components/ui/use-toast` must be rewritten to `import { toast } from "sonner"`. Behavioral + public-API change. |
39
39
  | SHADCN-08 | rename-prop | `useToast()` call sites `toast({ title, description, variant })` → sonner `toast(title, { description })` / `toast.error(…)` | Sonner's signature differs from the v1 hook object form; `variant: "destructive"` maps to `toast.error`. Every call site needs reshaping. Pairs with SHADCN-07. |
40
40
  | SHADCN-09 | token-rename | `tailwindcss-animate` plugin + dep → `tw-animate-css` via `@import "tw-animate-css"` in the CSS entry | The animation-utilities package is renamed. Remove the old devDependency and its plugin entry, add the new CSS import. Utility class names (`animate-in`, `fade-in-0`, `zoom-in-95`) are preserved. |
41
- | SHADCN-10 | new-default | `components.json` `"style": "default"` → `"style": "new-york"` | The `default` style is removed in v2; `new-york` is the only remaining style, so any re-added component pulls new-york source. Some spacing, border, and icon-size defaults shift moderate visual delta. |
41
+ | SHADCN-10 | new-default | `components.json` `"style": "default"` → `"style": "new-york"` | The `default` style is removed in v2; `new-york` is the only remaining style, so any re-added component pulls new-york source. Some spacing, border, and icon-size defaults shift - moderate visual delta. |
42
42
  | SHADCN-11 | rename-class | paired `h-4 w-4`, `h-6 w-6` icon sizing → `size-4`, `size-6` | v2 source adopts the `size-*` shorthand (Tailwind ≥3.4). Safe equivalent of matched `h-*`/`w-*`; mechanical, no visual delta. Only collapse pairs where the two values are equal. |
43
43
  | SHADCN-12 | rename-prop | `cn()` relying on `tailwind-merge@^2` → `^3` | `tailwind-merge` v3 changes some merge-conflict resolution internals. Bump the dependency and re-verify `cn()` output where custom classes overlap component defaults. The `lib/utils.ts` `cn` body itself is unchanged. |
44
44
  | SHADCN-13 | remove-component | per-primitive `@radix-ui/react-*` imports → unified `radix-ui` namespace imports | Optional in v2: `import * as DialogPrimitive from "@radix-ui/react-dialog"` → `import { Dialog as DialogPrimitive } from "radix-ui"`. Removes many small deps; not required for correctness, so flag as opt-in only. |
45
- | SHADCN-14 | rename-class | `focus:ring-2 ring-offset-2` focus styles → `focus-visible:ring-[3px] focus-visible:ring-ring/50` | v2 components standardize on `focus-visible` plus a softened ring (`ring/50`, 3px). Visible focus-state change moderate visual delta, and accessibility-relevant, so it cannot be silently dropped. |
45
+ | SHADCN-14 | rename-class | `focus:ring-2 ring-offset-2` focus styles → `focus-visible:ring-[3px] focus-visible:ring-ring/50` | v2 components standardize on `focus-visible` plus a softened ring (`ring/50`, 3px). Visible focus-state change - moderate visual delta, and accessibility-relevant, so it cannot be silently dropped. |
46
46
  | SHADCN-15 | token-rename | add v2 chart + sidebar tokens (`--chart-1..5`, `--sidebar`, `--sidebar-foreground`, …) absent in v1 themes | v2 ships extra semantic variables. If the project uses the Chart or Sidebar components, the `@theme` / `:root` block must gain these tokens or those components render unstyled. No-op for projects that use neither. |
47
47
  | SHADCN-16 | new-default | `tailwind.config` `darkMode: ["class"]` → CSS `@custom-variant dark (&:is(.dark *))` | v4 expresses the dark variant in CSS rather than JS config; the `darkMode` array key is dropped and replaced by a `@custom-variant` declaration in the stylesheet entry. |
48
48
 
@@ -50,27 +50,27 @@ Each row is one codemod target. `Kind` is drawn from the `codemod-gen.cjs` enum:
50
50
 
51
51
  The planner scores each rule as **visual-delta × usage × tests** to order the migration and decide what needs human eyes before the user runs the codemod.
52
52
 
53
- **High visual-delta review with screenshots / visual diff:**
53
+ **High visual-delta - review with screenshots / visual diff:**
54
54
 
55
- - SHADCN-02 + SHADCN-03 the whole HSL→OKLCH color move. Intended to be visually neutral, but it rewrites every color value, so it must be *proven* neutral against a baseline, not assumed.
56
- - SHADCN-10 `default`→`new-york` shifts spacing, radius, and icon defaults across the component set.
57
- - SHADCN-14 the focus-ring restyle changes a visible interaction state.
58
- - SHADCN-15 missing chart/sidebar tokens make those components render wrong (unstyled), which reads as a large visual delta where they're used.
55
+ - SHADCN-02 + SHADCN-03 - the whole HSL→OKLCH color move. Intended to be visually neutral, but it rewrites every color value, so it must be *proven* neutral against a baseline, not assumed.
56
+ - SHADCN-10 - `default`→`new-york` shifts spacing, radius, and icon defaults across the component set.
57
+ - SHADCN-14 - the focus-ring restyle changes a visible interaction state.
58
+ - SHADCN-15 - missing chart/sidebar tokens make those components render wrong (unstyled), which reads as a large visual delta where they're used.
59
59
 
60
- **High behavioral / API delta manual review required:**
60
+ **High behavioral / API delta - manual review required:**
61
61
 
62
- - SHADCN-07 + SHADCN-08 toast → Sonner changes a public API and runtime behavior. Call-site reshaping cannot be fully mechanical (variant mapping, return values), so every notification flow should be re-tested by hand.
63
- - SHADCN-12 `tailwind-merge` v3 can silently change which class wins in a merge. Review anywhere custom classes are layered over component defaults.
62
+ - SHADCN-07 + SHADCN-08 - toast → Sonner changes a public API and runtime behavior. Call-site reshaping cannot be fully mechanical (variant mapping, return values), so every notification flow should be re-tested by hand.
63
+ - SHADCN-12 - `tailwind-merge` v3 can silently change which class wins in a merge. Review anywhere custom classes are layered over component defaults.
64
64
 
65
- **Structural, low visual-delta codemod-friendly, light review:**
65
+ **Structural, low visual-delta - codemod-friendly, light review:**
66
66
 
67
- - SHADCN-01, SHADCN-04, SHADCN-16 relocate theming from JS config into CSS. Mechanical once the target `@theme` shape is fixed, but they touch the build entry a single broken import fails the whole stylesheet, so verify the app boots rather than diffing pixels.
67
+ - SHADCN-01, SHADCN-04, SHADCN-16 relocate theming from JS config into CSS. Mechanical once the target `@theme` shape is fixed, but they touch the build entry - a single broken import fails the whole stylesheet, so verify the app boots rather than diffing pixels.
68
68
 
69
- **Purely mechanical auto-generatable templates, spot-check only:**
69
+ **Purely mechanical - auto-generatable templates, spot-check only:**
70
70
 
71
71
  - SHADCN-05 (`forwardRef`→ref-as-prop), SHADCN-06 (`data-slot`), SHADCN-09 (`tailwindcss-animate`→`tw-animate-css`), SHADCN-11 (`h-*/w-*`→`size-*`). Deterministic AST rewrites with no intended visual change. Weight **usage** (file count) heavily here, since these fan out across every component file and dominate the diff size.
72
72
 
73
- **Opt-in never blocking:**
73
+ **Opt-in - never blocking:**
74
74
 
75
75
  - SHADCN-13 (Radix package consolidation) is dependency hygiene only. Gate it behind explicit user opt-in; never hold up a migration on it.
76
76