@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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +1080 -1038
- package/README.md +157 -155
- package/SKILL.md +42 -42
- package/agents/README.md +53 -53
- package/agents/a11y-mapper.md +3 -3
- package/agents/component-benchmark-harvester.md +8 -8
- package/agents/component-benchmark-synthesizer.md +11 -11
- package/agents/component-taxonomy-mapper.md +5 -5
- package/agents/compose-executor.md +25 -25
- package/agents/conflict-resolver.md +8 -8
- package/agents/cost-forecaster.md +12 -12
- package/agents/decision-journal-exporter.md +5 -5
- package/agents/design-advisor.md +19 -19
- package/agents/design-assumptions-analyzer.md +16 -16
- package/agents/design-auditor.md +39 -39
- package/agents/design-authority-watcher.md +28 -28
- package/agents/design-component-generator.md +27 -27
- package/agents/design-context-builder.md +66 -66
- package/agents/design-context-checker-gate.md +5 -5
- package/agents/design-context-checker.md +20 -20
- package/agents/design-discussant.md +23 -23
- package/agents/design-doc-writer.md +12 -12
- package/agents/design-executor.md +38 -38
- package/agents/design-figma-writer.md +31 -31
- package/agents/design-fixer.md +27 -27
- package/agents/design-integration-checker-gate.md +5 -5
- package/agents/design-integration-checker.md +29 -29
- package/agents/design-paper-writer.md +14 -14
- package/agents/design-pattern-mapper.md +9 -9
- package/agents/design-pencil-writer.md +12 -12
- package/agents/design-phase-researcher.md +14 -14
- package/agents/design-plan-checker.md +13 -13
- package/agents/design-planner.md +24 -24
- package/agents/design-reflector.md +48 -48
- package/agents/design-research-synthesizer.md +21 -21
- package/agents/design-start-writer.md +7 -7
- package/agents/design-update-checker.md +8 -8
- package/agents/design-verifier-gate.md +5 -5
- package/agents/design-verifier.md +80 -80
- package/agents/ds-generator.md +14 -14
- package/agents/ds-migration-planner.md +12 -12
- package/agents/email-executor.md +26 -26
- package/agents/experiment-result-ingester.md +10 -10
- package/agents/flutter-executor.md +28 -28
- package/agents/gdd-graph-refresh.md +10 -10
- package/agents/gdd-intel-updater.md +11 -11
- package/agents/gdd-learnings-extractor.md +2 -2
- package/agents/motion-mapper.md +8 -8
- package/agents/motion-verifier.md +16 -16
- package/agents/pdf-executor.md +27 -27
- package/agents/perf-analyzer.md +20 -20
- package/agents/pr-commenter.md +24 -24
- package/agents/prototype-gate.md +29 -29
- package/agents/quality-gate-runner.md +21 -21
- package/agents/rollout-coordinator.md +8 -8
- package/agents/swift-executor.md +41 -41
- package/agents/ticket-sync-agent.md +19 -19
- package/agents/token-mapper.md +6 -6
- package/agents/user-research-synthesizer.md +13 -13
- package/agents/visual-hierarchy-mapper.md +2 -2
- package/dist/claude-code/.claude/skills/add-backlog/SKILL.md +3 -3
- package/dist/claude-code/.claude/skills/analyze-dependencies/SKILL.md +10 -10
- package/dist/claude-code/.claude/skills/apply-reflections/SKILL.md +13 -13
- package/dist/claude-code/.claude/skills/apply-reflections/apply-reflections-procedure.md +20 -20
- package/dist/claude-code/.claude/skills/audit/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/bandit-status/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/benchmark/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/bootstrap-ds/SKILL.md +10 -10
- package/dist/claude-code/.claude/skills/brief/SKILL.md +20 -20
- package/dist/claude-code/.claude/skills/budget/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/cache-manager/SKILL.md +6 -6
- package/dist/claude-code/.claude/skills/cache-manager/cache-policy.md +5 -5
- package/dist/claude-code/.claude/skills/check-update/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/compare/SKILL.md +15 -15
- package/dist/claude-code/.claude/skills/compare/compare-rubric.md +17 -17
- package/dist/claude-code/.claude/skills/complete-cycle/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/connections/SKILL.md +11 -11
- package/dist/claude-code/.claude/skills/connections/connections-onboarding.md +76 -76
- package/dist/claude-code/.claude/skills/continue/SKILL.md +2 -2
- package/dist/claude-code/.claude/skills/darkmode/SKILL.md +17 -17
- package/dist/claude-code/.claude/skills/darkmode/darkmode-audit-procedure.md +7 -7
- package/dist/claude-code/.claude/skills/debug/SKILL.md +3 -3
- package/dist/claude-code/.claude/skills/debug/debug-feedback-loops.md +12 -12
- package/dist/claude-code/.claude/skills/design/SKILL.md +12 -12
- package/dist/claude-code/.claude/skills/design/design-procedure.md +23 -23
- package/dist/claude-code/.claude/skills/discover/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/discover/discover-procedure.md +18 -18
- package/dist/claude-code/.claude/skills/discuss/SKILL.md +12 -12
- package/dist/claude-code/.claude/skills/do/SKILL.md +1 -1
- package/dist/claude-code/.claude/skills/explore/SKILL.md +21 -21
- package/dist/claude-code/.claude/skills/explore/explore-procedure.md +48 -48
- package/dist/claude-code/.claude/skills/export/SKILL.md +9 -9
- package/dist/claude-code/.claude/skills/extract-learnings/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/fast/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/figma-extract/SKILL.md +11 -11
- package/dist/claude-code/.claude/skills/figma-write/SKILL.md +6 -6
- package/dist/claude-code/.claude/skills/graphify/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/health/SKILL.md +16 -16
- package/dist/claude-code/.claude/skills/health/health-mcp-detection.md +3 -3
- package/dist/claude-code/.claude/skills/health/health-skill-length-report.md +6 -6
- package/dist/claude-code/.claude/skills/help/SKILL.md +1 -1
- package/dist/claude-code/.claude/skills/list-assumptions/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/map/SKILL.md +12 -12
- package/dist/claude-code/.claude/skills/migrate/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/new-cycle/SKILL.md +2 -2
- package/dist/claude-code/.claude/skills/new-cycle/milestone-completeness-rubric.md +16 -16
- package/dist/claude-code/.claude/skills/new-project/SKILL.md +1 -1
- package/dist/claude-code/.claude/skills/next/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/note/SKILL.md +1 -1
- package/dist/claude-code/.claude/skills/openrouter-status/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/optimize/SKILL.md +15 -15
- package/dist/claude-code/.claude/skills/pause/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/peer-cli-add/SKILL.md +11 -11
- package/dist/claude-code/.claude/skills/peer-cli-add/peer-cli-protocol.md +39 -39
- package/dist/claude-code/.claude/skills/peer-cli-customize/SKILL.md +14 -14
- package/dist/claude-code/.claude/skills/peers/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/plan/SKILL.md +13 -13
- package/dist/claude-code/.claude/skills/plan/plan-procedure.md +24 -24
- package/dist/claude-code/.claude/skills/plant-seed/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/pr-branch/SKILL.md +2 -2
- package/dist/claude-code/.claude/skills/progress/SKILL.md +15 -15
- package/dist/claude-code/.claude/skills/quality-gate/SKILL.md +22 -22
- package/dist/claude-code/.claude/skills/quality-gate/threat-modeling.md +19 -19
- package/dist/claude-code/.claude/skills/quick/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/reapply-patches/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/reflect/SKILL.md +3 -3
- package/dist/claude-code/.claude/skills/reflect/procedures/capability-gap-scan.md +11 -11
- package/dist/claude-code/.claude/skills/report-issue/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/report-issue/report-issue-procedure.md +27 -27
- package/dist/claude-code/.claude/skills/resume/SKILL.md +9 -9
- package/dist/claude-code/.claude/skills/review-backlog/SKILL.md +3 -3
- package/dist/claude-code/.claude/skills/review-decisions/SKILL.md +3 -3
- package/dist/claude-code/.claude/skills/roi/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/rollout-status/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/router/SKILL.md +11 -11
- package/dist/claude-code/.claude/skills/router/capability-gap-emitter.md +6 -6
- package/dist/claude-code/.claude/skills/router/router-pick-emitter.md +9 -9
- package/dist/claude-code/.claude/skills/router/router-rules.md +7 -7
- package/dist/claude-code/.claude/skills/scan/SKILL.md +16 -16
- package/dist/claude-code/.claude/skills/scan/scan-procedure.md +42 -42
- package/dist/claude-code/.claude/skills/settings/SKILL.md +2 -2
- package/dist/claude-code/.claude/skills/ship/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/sketch/SKILL.md +10 -10
- package/dist/claude-code/.claude/skills/sketch-wrap-up/SKILL.md +12 -12
- package/dist/claude-code/.claude/skills/skill-manifest/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/spike/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/spike-wrap-up/SKILL.md +13 -13
- package/dist/claude-code/.claude/skills/start/SKILL.md +8 -8
- package/dist/claude-code/.claude/skills/start/start-procedure.md +9 -9
- package/dist/claude-code/.claude/skills/stats/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/style/SKILL.md +12 -12
- package/dist/claude-code/.claude/skills/style/style-doc-procedure.md +12 -12
- package/dist/claude-code/.claude/skills/synthesize/SKILL.md +10 -10
- package/dist/claude-code/.claude/skills/timeline/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/todo/SKILL.md +3 -3
- package/dist/claude-code/.claude/skills/turn-closeout/SKILL.md +10 -10
- package/dist/claude-code/.claude/skills/unlock-decision/SKILL.md +3 -3
- package/dist/claude-code/.claude/skills/update/SKILL.md +9 -9
- package/dist/claude-code/.claude/skills/using-gdd/SKILL.md +17 -17
- package/dist/claude-code/.claude/skills/verify/SKILL.md +13 -13
- package/dist/claude-code/.claude/skills/verify/verify-procedure.md +34 -34
- package/dist/claude-code/.claude/skills/warm-cache/SKILL.md +8 -8
- package/dist/claude-code/.claude/skills/watch-authorities/SKILL.md +9 -9
- package/dist/claude-code/.claude/skills/zoom-out/SKILL.md +4 -4
- package/package.json +5 -2
- package/reference/DEPRECATIONS.md +10 -10
- package/reference/STATE-TEMPLATE.md +26 -26
- package/reference/accessibility.md +13 -13
- package/reference/adr-format.md +13 -13
- package/reference/ai-native-tool-interface.md +5 -5
- package/reference/anti-patterns.md +9 -9
- package/reference/architecture-vocabulary.md +31 -31
- package/reference/audit-scoring.md +13 -13
- package/reference/authority-feeds.md +36 -36
- package/reference/bandit-integration.md +25 -25
- package/reference/brand-voice.md +36 -36
- package/reference/capability-gap-stage-gate.md +20 -20
- package/reference/checklists.md +26 -26
- package/reference/cli-localization.md +13 -13
- package/reference/codex-tools.md +2 -2
- package/reference/color-theory.md +28 -28
- package/reference/component-authoring.md +4 -4
- package/reference/components/README.md +13 -13
- package/reference/components/TEMPLATE.md +13 -13
- package/reference/components/accordion.md +15 -15
- package/reference/components/alert.md +25 -25
- package/reference/components/badge.md +18 -18
- package/reference/components/breadcrumbs.md +24 -24
- package/reference/components/button.md +21 -21
- package/reference/components/card.md +13 -13
- package/reference/components/checkbox.md +20 -20
- package/reference/components/chip.md +20 -20
- package/reference/components/command-palette.md +15 -15
- package/reference/components/date-picker.md +22 -22
- package/reference/components/drawer.md +13 -13
- package/reference/components/file-upload.md +22 -22
- package/reference/components/input.md +18 -18
- package/reference/components/label.md +25 -25
- package/reference/components/link.md +19 -19
- package/reference/components/list.md +17 -17
- package/reference/components/menu.md +19 -19
- package/reference/components/modal-dialog.md +16 -16
- package/reference/components/navbar.md +19 -19
- package/reference/components/pagination.md +18 -18
- package/reference/components/popover.md +12 -12
- package/reference/components/progress.md +18 -18
- package/reference/components/radio.md +17 -17
- package/reference/components/rich-text-editor.md +24 -24
- package/reference/components/select-combobox.md +16 -16
- package/reference/components/sidebar.md +15 -15
- package/reference/components/skeleton.md +20 -20
- package/reference/components/slider.md +20 -20
- package/reference/components/stepper.md +24 -24
- package/reference/components/switch.md +19 -19
- package/reference/components/table.md +21 -21
- package/reference/components/tabs.md +11 -11
- package/reference/components/toast.md +19 -19
- package/reference/components/tooltip.md +19 -19
- package/reference/components/tree.md +17 -17
- package/reference/composition.md +38 -38
- package/reference/config-schema.md +37 -37
- package/reference/context-md-format.md +9 -9
- package/reference/contrast-advanced.md +29 -29
- package/reference/conversational-ui.md +17 -17
- package/reference/cost-governance.md +14 -14
- package/reference/css-grid-layout.md +8 -8
- package/reference/cycle-handoff-preamble.md +3 -3
- package/reference/data-visualization.md +67 -67
- package/reference/debugger-philosophy.md +5 -5
- package/reference/design-system-guidance.md +21 -21
- package/reference/design-systems-catalog.md +20 -20
- package/reference/design-variants.md +11 -11
- package/reference/domains/civic-patterns.md +10 -10
- package/reference/domains/finance-patterns.md +9 -9
- package/reference/domains/gaming-patterns.md +9 -9
- package/reference/domains/healthcare-patterns.md +11 -11
- package/reference/ds-bootstrap-rubric.md +13 -13
- package/reference/email-design.md +22 -22
- package/reference/emotional-design.md +10 -10
- package/reference/error-recovery.md +11 -11
- package/reference/export-formats.md +7 -7
- package/reference/figma-sandbox.md +6 -6
- package/reference/first-principles.md +10 -10
- package/reference/form-patterns.md +26 -26
- package/reference/framer-motion-patterns.md +49 -49
- package/reference/gdd-runtime-audit.md +17 -17
- package/reference/gdd-threat-model.md +44 -44
- package/reference/gemini-tools.md +3 -3
- package/reference/gestalt.md +24 -24
- package/reference/heuristics.md +32 -32
- package/reference/i18n.md +44 -44
- package/reference/iconography.md +24 -24
- package/reference/image-optimization.md +14 -14
- package/reference/information-architecture.md +47 -47
- package/reference/intel-schema.md +1 -1
- package/reference/known-failure-modes.md +37 -37
- package/reference/meta-rules.md +5 -5
- package/reference/migrations/material-3-to-4.md +17 -17
- package/reference/migrations/mui-v6.md +16 -16
- package/reference/migrations/shadcn-v2.md +25 -25
- package/reference/migrations/tailwind-v4.md +21 -21
- package/reference/model-prices.md +3 -3
- package/reference/model-tiers.md +40 -40
- package/reference/motion-advanced.md +21 -21
- package/reference/motion-easings.md +29 -29
- package/reference/motion-interpolate.md +1 -1
- package/reference/motion-spring.md +13 -13
- package/reference/motion-transition-taxonomy.md +34 -34
- package/reference/motion.md +31 -31
- package/reference/multi-author-model.md +13 -13
- package/reference/native-platforms.md +28 -28
- package/reference/notification-routing.md +6 -6
- package/reference/onboarding-progressive-disclosure.md +32 -32
- package/reference/openrouter-tier-mapping.md +8 -8
- package/reference/palette-catalog.md +37 -37
- package/reference/parallelism-rules.md +20 -20
- package/reference/peer-cli-capabilities.md +14 -14
- package/reference/peer-protocols.md +21 -21
- package/reference/perf-budget.md +21 -21
- package/reference/performance.md +22 -22
- package/reference/platforms.md +51 -51
- package/reference/pr-review-integration.md +7 -7
- package/reference/prices/antigravity.md +3 -3
- package/reference/prices/augment.md +3 -3
- package/reference/prices/claude.md +2 -2
- package/reference/prices/cline.md +4 -4
- package/reference/prices/codebuddy.md +3 -3
- package/reference/prices/codex.md +2 -2
- package/reference/prices/copilot.md +3 -3
- package/reference/prices/cursor.md +3 -3
- package/reference/prices/gemini.md +2 -2
- package/reference/prices/kilo.md +3 -3
- package/reference/prices/opencode.md +4 -4
- package/reference/prices/qwen.md +2 -2
- package/reference/prices/trae.md +3 -3
- package/reference/prices/windsurf.md +3 -3
- package/reference/prices.openrouter.md +5 -5
- package/reference/print-design.md +36 -36
- package/reference/priority-matrix.md +2 -2
- package/reference/project-skills-guide.md +3 -3
- package/reference/proportion-systems.md +23 -23
- package/reference/pseudonymization-rules.md +30 -30
- package/reference/retrieval-contract.md +14 -14
- package/reference/review-format.md +7 -7
- package/reference/rollout-coordination.md +10 -10
- package/reference/rtl-cjk-cultural.md +39 -39
- package/reference/runtime-models.md +28 -28
- package/reference/shared-preamble.md +26 -26
- package/reference/skill-authoring-contract.md +16 -16
- package/reference/skill-placeholders.md +3 -3
- package/reference/start-interview.md +10 -10
- package/reference/style-vocabulary.md +25 -25
- package/reference/surfaces.md +4 -4
- package/reference/ticket-sync.md +9 -9
- package/reference/typography.md +64 -64
- package/reference/user-research.md +54 -54
- package/reference/variable-fonts-loading.md +15 -15
- package/reference/visual-hierarchy-layout.md +41 -41
- package/scripts/lib/manifest/prose-denylist.json +1 -1
- package/skills/add-backlog/SKILL.md +3 -3
- package/skills/analyze-dependencies/SKILL.md +10 -10
- package/skills/apply-reflections/SKILL.md +13 -13
- package/skills/apply-reflections/apply-reflections-procedure.md +20 -20
- package/skills/audit/SKILL.md +7 -7
- package/skills/bandit-status/SKILL.md +7 -7
- package/skills/benchmark/SKILL.md +7 -7
- package/skills/bootstrap-ds/SKILL.md +10 -10
- package/skills/brief/SKILL.md +20 -20
- package/skills/budget/SKILL.md +4 -4
- package/skills/cache-manager/SKILL.md +6 -6
- package/skills/cache-manager/cache-policy.md +5 -5
- package/skills/check-update/SKILL.md +5 -5
- package/skills/compare/SKILL.md +15 -15
- package/skills/compare/compare-rubric.md +17 -17
- package/skills/complete-cycle/SKILL.md +5 -5
- package/skills/connections/SKILL.md +11 -11
- package/skills/connections/connections-onboarding.md +76 -76
- package/skills/continue/SKILL.md +2 -2
- package/skills/darkmode/SKILL.md +17 -17
- package/skills/darkmode/darkmode-audit-procedure.md +7 -7
- package/skills/debug/SKILL.md +3 -3
- package/skills/debug/debug-feedback-loops.md +12 -12
- package/skills/design/SKILL.md +12 -12
- package/skills/design/design-procedure.md +23 -23
- package/skills/discover/SKILL.md +7 -7
- package/skills/discover/discover-procedure.md +18 -18
- package/skills/discuss/SKILL.md +12 -12
- package/skills/do/SKILL.md +1 -1
- package/skills/explore/SKILL.md +21 -21
- package/skills/explore/explore-procedure.md +48 -48
- package/skills/export/SKILL.md +9 -9
- package/skills/extract-learnings/SKILL.md +5 -5
- package/skills/fast/SKILL.md +7 -7
- package/skills/figma-extract/SKILL.md +11 -11
- package/skills/figma-write/SKILL.md +6 -6
- package/skills/graphify/SKILL.md +4 -4
- package/skills/health/SKILL.md +16 -16
- package/skills/health/health-mcp-detection.md +3 -3
- package/skills/health/health-skill-length-report.md +6 -6
- package/skills/help/SKILL.md +1 -1
- package/skills/list-assumptions/SKILL.md +4 -4
- package/skills/map/SKILL.md +12 -12
- package/skills/migrate/SKILL.md +5 -5
- package/skills/new-cycle/SKILL.md +2 -2
- package/skills/new-cycle/milestone-completeness-rubric.md +16 -16
- package/skills/new-project/SKILL.md +1 -1
- package/skills/next/SKILL.md +5 -5
- package/skills/note/SKILL.md +1 -1
- package/skills/openrouter-status/SKILL.md +4 -4
- package/skills/optimize/SKILL.md +15 -15
- package/skills/pause/SKILL.md +5 -5
- package/skills/peer-cli-add/SKILL.md +11 -11
- package/skills/peer-cli-add/peer-cli-protocol.md +39 -39
- package/skills/peer-cli-customize/SKILL.md +14 -14
- package/skills/peers/SKILL.md +4 -4
- package/skills/plan/SKILL.md +13 -13
- package/skills/plan/plan-procedure.md +24 -24
- package/skills/plant-seed/SKILL.md +4 -4
- package/skills/pr-branch/SKILL.md +2 -2
- package/skills/progress/SKILL.md +15 -15
- package/skills/quality-gate/SKILL.md +22 -22
- package/skills/quality-gate/threat-modeling.md +19 -19
- package/skills/quick/SKILL.md +5 -5
- package/skills/reapply-patches/SKILL.md +7 -7
- package/skills/reflect/SKILL.md +3 -3
- package/skills/reflect/procedures/capability-gap-scan.md +11 -11
- package/skills/report-issue/SKILL.md +5 -5
- package/skills/report-issue/report-issue-procedure.md +27 -27
- package/skills/resume/SKILL.md +9 -9
- package/skills/review-backlog/SKILL.md +3 -3
- package/skills/review-decisions/SKILL.md +3 -3
- package/skills/roi/SKILL.md +5 -5
- package/skills/rollout-status/SKILL.md +4 -4
- package/skills/router/SKILL.md +11 -11
- package/skills/router/capability-gap-emitter.md +6 -6
- package/skills/router/router-pick-emitter.md +9 -9
- package/skills/router/router-rules.md +7 -7
- package/skills/scan/SKILL.md +16 -16
- package/skills/scan/scan-procedure.md +42 -42
- package/skills/settings/SKILL.md +2 -2
- package/skills/ship/SKILL.md +7 -7
- package/skills/sketch/SKILL.md +10 -10
- package/skills/sketch-wrap-up/SKILL.md +12 -12
- package/skills/skill-manifest/SKILL.md +5 -5
- package/skills/spike/SKILL.md +7 -7
- package/skills/spike-wrap-up/SKILL.md +13 -13
- package/skills/start/SKILL.md +8 -8
- package/skills/start/start-procedure.md +9 -9
- package/skills/stats/SKILL.md +5 -5
- package/skills/style/SKILL.md +12 -12
- package/skills/style/style-doc-procedure.md +12 -12
- package/skills/synthesize/SKILL.md +10 -10
- package/skills/timeline/SKILL.md +4 -4
- package/skills/todo/SKILL.md +3 -3
- package/skills/turn-closeout/SKILL.md +10 -10
- package/skills/unlock-decision/SKILL.md +3 -3
- package/skills/update/SKILL.md +9 -9
- package/skills/using-gdd/SKILL.md +17 -17
- package/skills/verify/SKILL.md +13 -13
- package/skills/verify/verify-procedure.md +34 -34
- package/skills/warm-cache/SKILL.md +8 -8
- package/skills/watch-authorities/SKILL.md +9 -9
- 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)
|
|
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`
|
|
21
|
-
- `pattern`
|
|
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`
|
|
24
|
-
- `remedy`
|
|
25
|
-
- `severity`
|
|
26
|
-
- `propose_report`
|
|
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)
|
|
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`
|
|
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`
|
|
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`
|
|
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`
|
|
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`
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
507
|
+
"not vulnerable - not in resolved tree".
|
|
508
508
|
|
|
509
509
|
```yaml
|
|
510
510
|
id: KFM-022
|
package/reference/meta-rules.md
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
1
|
+
# Material Design Token Migration (M3 → next) - Rule Library
|
|
2
2
|
|
|
3
|
-
Honest framing: Google has **not** released a "Material Design 4" spec
|
|
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`
|
|
11
|
-
- `@material/*` MDC packages
|
|
12
|
-
- `material-components-web`
|
|
13
|
-
- `@angular/material`
|
|
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
|
|
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
|
|
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
|
|
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)*
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
51
|
-
- **Removed components (MD-17)** and **prop→variant collapse (MD-16)**: require reconstructing behavior (selected/toggle state, layout)
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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**
|
|
15
|
-
- **`react` / `react-dom` major**
|
|
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**
|
|
20
|
-
- **Animation dep**
|
|
21
|
-
- **`tailwind-merge` major**
|
|
22
|
-
- **Neutral deps**
|
|
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**
|
|
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
|
|
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
|
|
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
|
|
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
|
|
53
|
+
**High visual-delta - review with screenshots / visual diff:**
|
|
54
54
|
|
|
55
|
-
- SHADCN-02 + SHADCN-03
|
|
56
|
-
- SHADCN-10
|
|
57
|
-
- SHADCN-14
|
|
58
|
-
- SHADCN-15
|
|
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
|
|
60
|
+
**High behavioral / API delta - manual review required:**
|
|
61
61
|
|
|
62
|
-
- SHADCN-07 + SHADCN-08
|
|
63
|
-
- SHADCN-12
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|