@hegemonart/get-design-done 1.42.0 → 1.44.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 +1126 -1038
- package/README.md +159 -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 +9 -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/harness-freshness.cjs +59 -0
- package/scripts/lib/health-mirror/index.cjs +27 -0
- package/scripts/lib/manifest/harnesses.json +280 -14
- package/scripts/lib/manifest/prose-denylist.json +1 -1
- package/scripts/lib/manifest/schemas/harnesses.schema.json +32 -0
- package/sdk/mcp/gdd-mcp/server.js +125 -0
- 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
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
# Tailwind CSS v3 → v4
|
|
1
|
+
# Tailwind CSS v3 → v4 - Migration Rule Library
|
|
2
2
|
|
|
3
|
-
This is a **proposal-only** rule library consumed by `agents/ds-migration-planner.md` and the pure `scripts/lib/migration/codemod-gen.cjs`. It encodes the concrete, mechanical changes between Tailwind CSS v3 and v4 so the planner can template codemods. GDD never auto-applies any rule below
|
|
3
|
+
This is a **proposal-only** rule library consumed by `agents/ds-migration-planner.md` and the pure `scripts/lib/migration/codemod-gen.cjs`. It encodes the concrete, mechanical changes between Tailwind CSS v3 and v4 so the planner can template codemods. GDD never auto-applies any rule below - every codemod is surfaced as a reviewable diff the USER inspects and runs.
|
|
4
4
|
|
|
5
|
-
A note the planner should carry into any plan it writes: v4 raised its browser baseline (it targets modern Safari / Chrome / Firefox and leans on native CSS cascade layers, `@property`, and `color-mix()`). A project that must support older browsers is **not** a clean migration target
|
|
5
|
+
A note the planner should carry into any plan it writes: v4 raised its browser baseline (it targets modern Safari / Chrome / Firefox and leans on native CSS cascade layers, `@property`, and `color-mix()`). A project that must support older browsers is **not** a clean migration target - the planner should surface that as a blocker rather than emitting codemods, since no class rename below can recover the dropped baseline.
|
|
6
6
|
|
|
7
7
|
## Detection
|
|
8
8
|
|
|
9
|
-
Detect Tailwind and the v3→v4 boundary from `package.json` **alone**
|
|
9
|
+
Detect Tailwind and the v3→v4 boundary from `package.json` **alone** - no file-content scanning is required for the gate. The planner reads `dependencies` + `devDependencies` and classifies:
|
|
10
10
|
|
|
11
|
-
- **Tailwind present**
|
|
11
|
+
- **Tailwind present** - a `tailwindcss` key appears under `dependencies` or `devDependencies`. If absent, the project is out of scope and no rules apply.
|
|
12
12
|
|
|
13
|
-
- **On v3**
|
|
13
|
+
- **On v3** - the `tailwindcss` semver range resolves to `^3` / `~3` / `3.x`. Corroborating signals:
|
|
14
14
|
- a `tailwind.config.js` (or `.cjs` / `.mjs` / `.ts`) referenced by the build config, and
|
|
15
15
|
- a PostCSS pipeline that lists the bare `tailwindcss` plugin (in v3 the PostCSS plugin ships *inside* the core package).
|
|
16
16
|
|
|
17
|
-
- **On v4**
|
|
18
|
-
- `@tailwindcss/postcss`
|
|
19
|
-
- `@tailwindcss/vite`
|
|
17
|
+
- **On v4** - the `tailwindcss` range resolves to `^4` / `4.x`, **and/or** one of the dedicated build packages is present:
|
|
18
|
+
- `@tailwindcss/postcss` - the PostCSS plugin, which **moved out of core** into its own package in v4 (a high-confidence v4 marker), or
|
|
19
|
+
- `@tailwindcss/vite` - the first-party Vite plugin (used instead of PostCSS in Vite projects).
|
|
20
20
|
|
|
21
|
-
- **Migration candidate**
|
|
21
|
+
- **Migration candidate** - `tailwindcss@^3` with **no** `@tailwindcss/postcss` and **no** `@tailwindcss/vite`. A `tailwind.config.js` that survives the version bump is the signal that the JS-config → CSS-first migration (TW4-02) has not yet run.
|
|
22
22
|
|
|
23
|
-
- **Build-tool target**
|
|
23
|
+
- **Build-tool target** - a `vite` dependency steers the planner toward the `@tailwindcss/vite` install target; otherwise assume the `@tailwindcss/postcss` PostCSS target. Do **not** infer Tailwind from a lockfile alone - require the manifest entry so the gate stays deterministic.
|
|
24
24
|
|
|
25
|
-
Reading the semver range: treat a leading `^3` / `~3` / `3` / `3.x` as v3, and `^4` / `4` / `4.x` as v4. A wildcard (`*`) or git/`file:` specifier is **ambiguous**
|
|
25
|
+
Reading the semver range: treat a leading `^3` / `~3` / `3` / `3.x` as v3, and `^4` / `4` / `4.x` as v4. A wildcard (`*`) or git/`file:` specifier is **ambiguous** - the planner should fall back to the corroborating signals above (presence of `@tailwindcss/postcss`, a surviving `tailwind.config.js`) and, if still unresolved, mark detection as inconclusive rather than guessing. Detection is package.json-only by design; the per-class renames in the table are confirmed later against source by the codemod step, not by this gate.
|
|
26
26
|
|
|
27
27
|
## Migration rules
|
|
28
28
|
|
|
@@ -33,7 +33,7 @@ Rule IDs are stable. `Kind ∈ rename-class | rename-prop | remove-component | t
|
|
|
33
33
|
| TW4-01 | rename-prop | `@tailwind base; @tailwind components; @tailwind utilities;` → `@import "tailwindcss";` | The three v3 directives collapse into a single CSS import. Fully mechanical; affects the one entry CSS file. |
|
|
34
34
|
| TW4-02 | token-rename | `tailwind.config.js` (JS `theme`) → `@theme { … }` (CSS-first) | Theme moves into CSS custom properties under `@theme`. The JS config is still loadable via an `@config "./tailwind.config.js";` bridge, but the native v4 target is CSS. Highest-effort rule in the set. |
|
|
35
35
|
| TW4-03 | token-rename | `theme(colors.red.500)` in CSS → `var(--color-red-500)` | `@theme` tokens are emitted as real CSS variables, so `theme()` lookups and arbitrary values resolve to `var(--…)` references instead. |
|
|
36
|
-
| TW4-04 | rename-class | `shadow-sm` → `shadow-xs` | Box-shadow scale shifted one step down. **High visual delta**
|
|
36
|
+
| TW4-04 | rename-class | `shadow-sm` → `shadow-xs` | Box-shadow scale shifted one step down. **High visual delta** - every `shadow-sm` renders visibly smaller after the bump. |
|
|
37
37
|
| TW4-05 | rename-class | `shadow` → `shadow-sm` | The bare `shadow` alias is removed; the old default maps to the new explicit `shadow-sm`. |
|
|
38
38
|
| TW4-06 | rename-class | `drop-shadow` → `drop-shadow-sm` | Same bare-alias removal as TW4-05, applied across the `drop-shadow-*` filter scale. |
|
|
39
39
|
| TW4-07 | rename-class | `blur-sm` → `blur-xs` | Blur scale shifted one step down, mirroring the shadow scale. |
|
|
@@ -47,27 +47,27 @@ Rule IDs are stable. `Kind ∈ rename-class | rename-prop | remove-component | t
|
|
|
47
47
|
| TW4-15 | rename-class | `flex-shrink-0` / `flex-grow` → `shrink-0` / `grow` | The `flex-` prefix on shrink/grow was already deprecated in v3 and is removed in v4. Pure prefix strip, no value change. |
|
|
48
48
|
| TW4-16 | new-default | default border / divide color `gray-200` → `currentColor` | v4 borders and dividers default to `currentColor`, not `gray-200`. To preserve the v3 look, set `@theme { --color-border: …; }` or add explicit `border-gray-200`. **High visual delta.** |
|
|
49
49
|
| TW4-17 | rename-prop | `@layer utilities { … }` (custom utility) → `@utility name { … }` | Registering custom utilities now uses the `@utility` API; plain `@layer utilities` blocks no longer register sortable utilities. `@layer base` for resets still works. |
|
|
50
|
-
| TW4-18 | rename-prop | `corePlugins` / `safelist` (JS config) → `@source inline(…)` + CSS theme | v4 has no `corePlugins` toggle and content detection is automatic; explicit safelisting moves to `@source inline(...)`. Flag for manual handling
|
|
50
|
+
| TW4-18 | rename-prop | `corePlugins` / `safelist` (JS config) → `@source inline(…)` + CSS theme | v4 has no `corePlugins` toggle and content detection is automatic; explicit safelisting moves to `@source inline(...)`. Flag for manual handling - not a 1:1 token swap. |
|
|
51
51
|
|
|
52
52
|
## Impact notes
|
|
53
53
|
|
|
54
|
-
**High visual delta
|
|
54
|
+
**High visual delta - require manual review and a screenshot diff before accepting:**
|
|
55
55
|
|
|
56
56
|
- **Scale shifts (TW4-04 through TW4-10).** Shadow, blur, and radius scales all shifted one step down. A blanket find/replace is correct *only if* the project used the default scale. Any project that overrode these in `tailwind.config.js` must reconcile against TW4-02 first, or the rename compounds with a custom scale and yields wrong sizes. Treat these seven rules as one coordinated set, not independent edits.
|
|
57
57
|
- **Ring width + color (TW4-11, TW4-12).** The default ring went from 3px/blue to 1px/currentColor. Focus rings are an accessibility surface, so both the width (`ring-3`) and color (`ring-blue-500`) rewrites should be reviewed against focus-visible states rather than applied silently.
|
|
58
58
|
- **Default border / divide color (TW4-16) and outline (TW4-13).** The `currentColor` border default and the `outline-none` → `outline-hidden` rename change visible chrome and focus behavior across the whole app. These are the two rules most likely to look "broken" immediately post-migration; verify against a representative page set.
|
|
59
59
|
|
|
60
|
-
**Mechanical
|
|
60
|
+
**Mechanical - low risk, still proposal-only:**
|
|
61
61
|
|
|
62
|
-
- **Import directive (TW4-01)** and **flex-prefix strip (TW4-15)** are deterministic textual swaps with no visual consequence
|
|
63
|
-
- **Opacity slash syntax (TW4-14)** is mechanical per-utility, but the codemod must pair the correct color literal with the opacity value
|
|
62
|
+
- **Import directive (TW4-01)** and **flex-prefix strip (TW4-15)** are deterministic textual swaps with no visual consequence - safe to batch, but still emitted as a reviewable diff.
|
|
63
|
+
- **Opacity slash syntax (TW4-14)** is mechanical per-utility, but the codemod must pair the correct color literal with the opacity value - confirm it preserves the original color when expanding `bg-opacity-50` into `bg-<color>/50`.
|
|
64
64
|
|
|
65
|
-
**Needs a human design decision
|
|
65
|
+
**Needs a human design decision - not auto-templatable:**
|
|
66
66
|
|
|
67
67
|
- **CSS-first theme (TW4-02), `theme()` rewrites (TW4-03), custom-utility migration (TW4-17), and config-feature removal (TW4-18)** depend on the project's actual theme shape and custom utilities. The planner should emit a scaffold (an `@theme` block skeleton plus an `@config` bridge note) and hand the remainder to the USER rather than attempting a full automatic translation. The `@config` directive is the recommended interim bridge so a project can adopt the v4 build packages *before* fully porting its JS theme.
|
|
68
68
|
|
|
69
69
|
**Application order and idempotency (for `codemod-gen.cjs`):**
|
|
70
70
|
|
|
71
|
-
- The shadow, blur, and radius scales each contain a **shift hazard**: renaming the bare alias up one step (e.g. TW4-05 `shadow` → `shadow-sm`) and shifting the named step down (TW4-04 `shadow-sm` → `shadow-xs`) target overlapping tokens. A naive two-pass run can double-apply
|
|
71
|
+
- The shadow, blur, and radius scales each contain a **shift hazard**: renaming the bare alias up one step (e.g. TW4-05 `shadow` → `shadow-sm`) and shifting the named step down (TW4-04 `shadow-sm` → `shadow-xs`) target overlapping tokens. A naive two-pass run can double-apply - `shadow` becomes `shadow-sm` becomes `shadow-xs`. Templates must rename in a **single atomic pass** (match the original token, map to its final value) so each utility is rewritten exactly once. The same hazard applies to the `blur-*` (TW4-07/08) and `rounded-*` (TW4-09/10) pairs.
|
|
72
72
|
- Run the entry-CSS rules (**TW4-01**, then the **TW4-02 / TW4-03 / TW4-17** theme scaffold) before the class renames, so the build is parseable under v4 before utility classes change. Class renames (TW4-04 through TW4-16) operate on template/markup files and are independent of each other once the single-pass rule above is respected.
|
|
73
|
-
- Every generated codemod should be **idempotent**
|
|
73
|
+
- Every generated codemod should be **idempotent** - re-running it on already-migrated source must be a no-op. The planner surfaces the full set as one reviewable changeset; the USER applies it, not GDD.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Model Prices
|
|
1
|
+
# Model Prices - Router
|
|
2
2
|
|
|
3
|
-
**Phase 26 D-08 router.** This file used to carry a single Anthropic-only price table. As of v1.26.0 it links to per-runtime sub-tables
|
|
3
|
+
**Phase 26 D-08 router.** This file used to carry a single Anthropic-only price table. As of v1.26.0 it links to per-runtime sub-tables - one file per runtime under `reference/prices/`. Budget-enforcer + cost-aggregator load the sub-table for the active runtime (resolved via `scripts/lib/runtime-detect.cjs`) and tag every `events.jsonl` cost row with the runtime ID.
|
|
4
4
|
|
|
5
5
|
For the model→tier mapping (which model name corresponds to opus/sonnet/haiku per runtime), see `reference/runtime-models.md`.
|
|
6
6
|
|
|
@@ -45,7 +45,7 @@ When `cache_hit: true`, the formula re-runs with `cached_input_per_1m` in place
|
|
|
45
45
|
|
|
46
46
|
When a cost lookup misses (model not present in the runtime's sub-table, or runtime sub-table is a stub), `scripts/lib/budget-enforcer.cjs` falls back to `reference/prices/claude.md` and emits a `cost_lookup_fallback` event. This keeps the pipeline running on stub runtimes while authority-watcher (Phase 13.2) flags drift for follow-up.
|
|
47
47
|
|
|
48
|
-
If `claude.md` ALSO misses the model, the spawn proceeds with `cost_usd: null` and a `cost_lookup_failed` event
|
|
48
|
+
If `claude.md` ALSO misses the model, the spawn proceeds with `cost_usd: null` and a `cost_lookup_failed` event - the existing fail-open contract from Phase 20-13.
|
|
49
49
|
|
|
50
50
|
## Transitional fallback (v1.25 and earlier)
|
|
51
51
|
|
package/reference/model-tiers.md
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
# Model Tiers
|
|
1
|
+
# Model Tiers - Selection Guide + Per-Agent Map
|
|
2
2
|
|
|
3
|
-
**Purpose:** Source of truth for the `default-tier: haiku|sonnet|opus` frontmatter field carried by every agent at `agents/*.md`. Tiers are one of three Anthropic model classes
|
|
3
|
+
**Purpose:** Source of truth for the `default-tier: haiku|sonnet|opus` frontmatter field carried by every agent at `agents/*.md`. Tiers are one of three Anthropic model classes - priced in `reference/model-prices.md`.
|
|
4
4
|
|
|
5
|
-
Phase 10.1 (OPT-06) locked the initial per-agent tier assignment. Phase 11's `design-reflector` (`agents/design-reflector.md`) proposes refinements from measured `.design/agent-metrics.json` data; no auto-apply
|
|
5
|
+
Phase 10.1 (OPT-06) locked the initial per-agent tier assignment. Phase 11's `design-reflector` (`agents/design-reflector.md`) proposes refinements from measured `.design/agent-metrics.json` data; no auto-apply - proposals flow through `/gdd:apply-reflections` and `/gdd:optimize`.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## Tier Assignment Rules
|
|
10
10
|
|
|
11
|
-
### haiku
|
|
11
|
+
### haiku - Verifiers and checkers with deterministic rubrics
|
|
12
12
|
|
|
13
13
|
Pick `haiku` when the agent is:
|
|
14
14
|
- Applying a fixed scoring rubric (`design-verifier` runs five deterministic passes with numeric category scores).
|
|
15
15
|
- Producing a boolean + rationale answer (`design-plan-checker`, `design-context-checker`, `design-integration-checker` all return "gaps found" + structured list).
|
|
16
|
-
- Performing a read-only state sync (`gdd-graph-refresh` mirrors graph state
|
|
17
|
-
- Running at high frequency where cost compounds (checkers run on every `/gdd:verify` pass
|
|
16
|
+
- Performing a read-only state sync (`gdd-graph-refresh` mirrors graph state - no reasoning density beyond schema matching).
|
|
17
|
+
- Running at high frequency where cost compounds (checkers run on every `/gdd:verify` pass - cost multiplies with iterations).
|
|
18
18
|
|
|
19
19
|
Haiku's ~20x price advantage over Opus per 1M tokens (see `reference/model-prices.md`) makes it correct for deterministic-rubric work where the marginal quality gain of larger models is negligible.
|
|
20
20
|
|
|
21
|
-
### sonnet
|
|
21
|
+
### sonnet - Researchers, mappers, doc-writers, executors, fixers
|
|
22
22
|
|
|
23
23
|
Pick `sonnet` when the agent is:
|
|
24
24
|
- Doing open-ended pattern recognition on codebase data (`a11y-mapper`, `component-taxonomy-mapper`, `design-pattern-mapper`, `motion-mapper`, `token-mapper`, `visual-hierarchy-mapper`).
|
|
25
25
|
- Synthesizing prose from structured input (`design-doc-writer`, `design-research-synthesizer`, `design-context-builder`).
|
|
26
26
|
- Executing a concrete plan under supervision (`design-executor`, `design-fixer`, `design-figma-writer`).
|
|
27
|
-
- Conducting targeted research under a time budget (`design-phase-researcher`
|
|
27
|
+
- Conducting targeted research under a time budget (`design-phase-researcher` - 2-minute web-search budget).
|
|
28
28
|
- Updating / extracting / maintaining project state (`gdd-intel-updater`, `gdd-learnings-extractor`, `design-auditor`).
|
|
29
29
|
|
|
30
|
-
Sonnet balances reasoning density against cost. This is the default
|
|
30
|
+
Sonnet balances reasoning density against cost. This is the default - if you're uncertain about an agent's role, it's probably sonnet.
|
|
31
31
|
|
|
32
|
-
### opus
|
|
32
|
+
### opus - Planners, critics, advisors, strategic reflectors
|
|
33
33
|
|
|
34
34
|
Pick `opus` when the agent is:
|
|
35
|
-
- Proposing a plan that downstream executors will follow (`design-planner`
|
|
36
|
-
- Critiquing or advising on ambiguity (`design-advisor`, `design-assumptions-analyzer`
|
|
35
|
+
- Proposing a plan that downstream executors will follow (`design-planner` - the plan becomes the contract for the whole design stage).
|
|
36
|
+
- Critiquing or advising on ambiguity (`design-advisor`, `design-assumptions-analyzer` - these agents question the prompt itself).
|
|
37
37
|
- Facilitating interactive decision-gathering (`design-discussant`).
|
|
38
|
-
- Cross-phase strategic reasoning (`design-reflector`
|
|
38
|
+
- Cross-phase strategic reasoning (`design-reflector` - Phase 11 - proposes changes to the plugin itself from measured data).
|
|
39
39
|
|
|
40
40
|
Opus cost (~5x Sonnet, ~25x Haiku) is justified only when a single wrong decision cascades into many downstream agent spawns. Planners fit. Mappers don't.
|
|
41
41
|
|
|
@@ -46,16 +46,16 @@ Opus cost (~5x Sonnet, ~25x Haiku) is justified only when a single wrong decisio
|
|
|
46
46
|
| Agent | Role class | default-tier | Rationale |
|
|
47
47
|
|-------|------------|--------------|-----------|
|
|
48
48
|
| design-verifier | Verifier | haiku | Runs a deterministic 5-pass scoring rubric; Haiku handles structured grading without quality loss. |
|
|
49
|
-
| design-plan-checker | Checker | haiku | Checks the plan against a fixed schema
|
|
50
|
-
| design-context-checker | Checker | haiku | Checks context completeness against a schema
|
|
51
|
-
| design-integration-checker | Checker | haiku | Checks cross-artifact references
|
|
52
|
-
| gdd-graph-refresh | Refresh agent | haiku | Rebuilds graph at .design/graph/graph.json from intel slices
|
|
49
|
+
| design-plan-checker | Checker | haiku | Checks the plan against a fixed schema - boolean + gap-list output. |
|
|
50
|
+
| design-context-checker | Checker | haiku | Checks context completeness against a schema - boolean + gap-list output. |
|
|
51
|
+
| design-integration-checker | Checker | haiku | Checks cross-artifact references - deterministic link-integrity work. |
|
|
52
|
+
| gdd-graph-refresh | Refresh agent | haiku | Rebuilds graph at .design/graph/graph.json from intel slices - no reasoning density required. |
|
|
53
53
|
| a11y-mapper | Mapper | sonnet | Open-ended a11y pattern recognition across many files; Sonnet's breadth matters. |
|
|
54
|
-
| component-taxonomy-mapper | Mapper | sonnet | Classifies components by role
|
|
54
|
+
| component-taxonomy-mapper | Mapper | sonnet | Classifies components by role - requires nuance Haiku lacks, not enough to warrant Opus. |
|
|
55
55
|
| design-auditor | Worker | sonnet | Emits structured findings from code inspection; Sonnet balances depth with cost. |
|
|
56
|
-
| design-context-builder | Builder | sonnet | Assembles DESIGN-CONTEXT.md from discover outputs
|
|
56
|
+
| design-context-builder | Builder | sonnet | Assembles DESIGN-CONTEXT.md from discover outputs - prose synthesis. |
|
|
57
57
|
| design-doc-writer | Writer | sonnet | Produces polished prose documentation; Sonnet's style quality is sufficient. |
|
|
58
|
-
| design-executor | Executor | sonnet | Follows an Opus-authored plan
|
|
58
|
+
| design-executor | Executor | sonnet | Follows an Opus-authored plan - executes rather than plans. |
|
|
59
59
|
| design-figma-writer | Writer | sonnet | Emits Figma-formatted output from existing spec. |
|
|
60
60
|
| design-fixer | Fixer | sonnet | Applies targeted fixes to a localized artifact; structured input, structured diff output. |
|
|
61
61
|
| design-pattern-mapper | Mapper | sonnet | Catalogs design patterns present in codebase. |
|
|
@@ -63,16 +63,16 @@ Opus cost (~5x Sonnet, ~25x Haiku) is justified only when a single wrong decisio
|
|
|
63
63
|
| design-research-synthesizer | Synthesizer | sonnet | Collapses multiple research outputs into one; synthesis is Sonnet territory. |
|
|
64
64
|
| gdd-intel-updater | Updater | sonnet | Refreshes .planning/intel/ files from current codebase. |
|
|
65
65
|
| gdd-learnings-extractor | Extractor | sonnet | Pulls decisions + lessons + patterns from phase artifacts. |
|
|
66
|
-
| motion-mapper | Mapper | sonnet | Inventories motion patterns
|
|
67
|
-
| token-mapper | Mapper | sonnet | Extracts design tokens from source
|
|
68
|
-
| visual-hierarchy-mapper | Mapper | sonnet | Maps visual hierarchy signals
|
|
69
|
-
| design-advisor | Advisor | opus | Questions prompts to surface ambiguity
|
|
70
|
-
| design-assumptions-analyzer | Critic | opus | Surfaces
|
|
71
|
-
| design-discussant | Facilitator | opus | Interactive decision gathering
|
|
72
|
-
| design-planner | Planner | opus | Authors DESIGN-PLAN.md
|
|
73
|
-
| design-reflector | Strategic reflector | opus | Phase 11
|
|
66
|
+
| motion-mapper | Mapper | sonnet | Inventories motion patterns - open-ended visual reasoning. |
|
|
67
|
+
| token-mapper | Mapper | sonnet | Extracts design tokens from source - pattern recognition across files. |
|
|
68
|
+
| visual-hierarchy-mapper | Mapper | sonnet | Maps visual hierarchy signals - breadth across many files. |
|
|
69
|
+
| design-advisor | Advisor | opus | Questions prompts to surface ambiguity - wrong advice cascades. |
|
|
70
|
+
| design-assumptions-analyzer | Critic | opus | Surfaces essential assumptions before planning - one wrong assumption derails the phase. |
|
|
71
|
+
| design-discussant | Facilitator | opus | Interactive decision gathering - user-facing, quality-critical. |
|
|
72
|
+
| design-planner | Planner | opus | Authors DESIGN-PLAN.md - the contract every downstream agent follows. |
|
|
73
|
+
| design-reflector | Strategic reflector | opus | Phase 11 - reads telemetry + proposes changes to the plugin itself. |
|
|
74
74
|
|
|
75
|
-
**Row count:** 26
|
|
75
|
+
**Row count:** 26 - matches the agent suite ls. Every row has a rationale; no blank rationales.
|
|
76
76
|
|
|
77
77
|
---
|
|
78
78
|
|
|
@@ -80,14 +80,14 @@ Opus cost (~5x Sonnet, ~25x Haiku) is justified only when a single wrong decisio
|
|
|
80
80
|
|
|
81
81
|
When the budget-enforcer hook resolves which tier to spawn an agent at, it walks this precedence (D-04):
|
|
82
82
|
|
|
83
|
-
1. **`.design/budget.json.tier_overrides[{agent_name}]`**
|
|
84
|
-
2. **Agent frontmatter `default-tier`** (this file's per-agent map)
|
|
85
|
-
3. **Hardcoded fallback `"sonnet"`**
|
|
83
|
+
1. **`.design/budget.json.tier_overrides[{agent_name}]`** - per-project configuration. Wins over frontmatter. Use this knob when the project has budget constraints that differ from the plugin defaults.
|
|
84
|
+
2. **Agent frontmatter `default-tier`** (this file's per-agent map) - plugin default. Set at authoring time.
|
|
85
|
+
3. **Hardcoded fallback `"sonnet"`** - belt-and-suspenders in `hooks/budget-enforcer.js` for agents that somehow lack the frontmatter field. Should never fire in practice after Phase 10.1.
|
|
86
86
|
|
|
87
87
|
Plus two modifiers that can override the above at spawn time:
|
|
88
88
|
|
|
89
89
|
- **`auto_downgrade_on_cap: true`** (D-03): at 80% of `per_task_cap_usd`, the hook force-downgrades the tier to `haiku` for the remainder of the task, regardless of the precedence chain. Logged as `tier_downgraded: true` in `.design/telemetry/costs.jsonl`.
|
|
90
|
-
- **Hard-cap block** (D-02): at 100% of `per_task_cap_usd` or `per_phase_cap_usd`, the hook blocks the spawn outright. Tier is irrelevant
|
|
90
|
+
- **Hard-cap block** (D-02): at 100% of `per_task_cap_usd` or `per_phase_cap_usd`, the hook blocks the spawn outright. Tier is irrelevant - nothing runs.
|
|
91
91
|
|
|
92
92
|
---
|
|
93
93
|
|
|
@@ -95,8 +95,8 @@ Plus two modifiers that can override the above at spawn time:
|
|
|
95
95
|
|
|
96
96
|
The plugin ships with the Per-Agent Tier Map above as a well-reasoned baseline. **Do not hand-edit agent frontmatter `default-tier` fields without evidence.** Two legitimate paths to change a tier assignment:
|
|
97
97
|
|
|
98
|
-
1. **Phase 11 reflector proposal.** `agents/design-reflector.md` reads `.design/agent-metrics.json` and surfaces cases where measured `gap_rate` or `deviation_rate` suggests a tier is too low (verifier missed gaps a Sonnet would catch) or too high (planner over-reasoned simple plans a Sonnet would handle). Proposals flow through `/gdd:apply-reflections`
|
|
99
|
-
2. **Budget constraint.** Project-level override via `.design/budget.json.tier_overrides`
|
|
98
|
+
1. **Phase 11 reflector proposal.** `agents/design-reflector.md` reads `.design/agent-metrics.json` and surfaces cases where measured `gap_rate` or `deviation_rate` suggests a tier is too low (verifier missed gaps a Sonnet would catch) or too high (planner over-reasoned simple plans a Sonnet would handle). Proposals flow through `/gdd:apply-reflections` - user-reviewed, never auto-applied.
|
|
99
|
+
2. **Budget constraint.** Project-level override via `.design/budget.json.tier_overrides` - does not require touching the frontmatter.
|
|
100
100
|
|
|
101
101
|
Signals that a tier move might be warranted (Phase 11 reflector's heuristics):
|
|
102
102
|
- **Downgrade signal** (Sonnet → Haiku, or Opus → Sonnet): agent's `gap_rate < 10%` over ≥ 10 runs AND measured output length < 25% of `size_budget` ceiling → agent is over-provisioned.
|
|
@@ -108,11 +108,11 @@ Phase 11's reflector encodes these heuristics. This section documents the philos
|
|
|
108
108
|
|
|
109
109
|
## Integration Points
|
|
110
110
|
|
|
111
|
-
- **`hooks/budget-enforcer.js`** (Plan 10.1-01 Task 04)
|
|
112
|
-
- **`skills/router/SKILL.md`** (Plan 10.1-01 Task 03)
|
|
113
|
-
- **`skills/optimize/SKILL.md`** (Plan 10.1-04)
|
|
114
|
-
- **`agents/design-reflector.md`** (Phase 11, already merged)
|
|
111
|
+
- **`hooks/budget-enforcer.js`** (Plan 10.1-01 Task 04) - implements the precedence chain above. `resolveTier(agent, agentDefaultTier, overrides)` is the concrete function.
|
|
112
|
+
- **`skills/router/SKILL.md`** (Plan 10.1-01 Task 03) - consults this file's tier map + `reference/model-prices.md` to produce `estimated_cost_usd` pre-spawn.
|
|
113
|
+
- **`skills/optimize/SKILL.md`** (Plan 10.1-04) - advisory command; may suggest tier moves based on telemetry + this doc's heuristics.
|
|
114
|
+
- **`agents/design-reflector.md`** (Phase 11, already merged) - may propose edits to this file + paired frontmatter updates. Proposals land in `.design/reflections/` for user review.
|
|
115
115
|
|
|
116
116
|
---
|
|
117
117
|
|
|
118
|
-
*Maintained as part of Phase 10.1 (OPT-06). Edits to the Per-Agent Tier Map MUST be paired with matching frontmatter edits in `agents/*.md`
|
|
118
|
+
*Maintained as part of Phase 10.1 (OPT-06). Edits to the Per-Agent Tier Map MUST be paired with matching frontmatter edits in `agents/*.md` - the two are the same fact stored twice (router cross-checks). A mismatch indicates drift; Phase 11 reflector detects and reports it.*
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
|
|
11
11
|
Spring animations are governed by three parameters that model a physical spring:
|
|
12
12
|
|
|
13
|
-
- **stiffness**
|
|
14
|
-
- **damping**
|
|
15
|
-
- **mass**
|
|
13
|
+
- **stiffness** - how tightly wound the spring is; higher = faster, snappier response
|
|
14
|
+
- **damping** - friction applied to the oscillation; higher = settles faster with less bounce
|
|
15
|
+
- **mass** - inertia of the object; higher = slower start and more overshoot
|
|
16
16
|
|
|
17
17
|
The damping ratio `ζ = damping / (2 * Math.sqrt(stiffness * mass))` determines behavior:
|
|
18
18
|
|
|
@@ -222,10 +222,10 @@ el.animate(
|
|
|
222
222
|
|
|
223
223
|
### The Four Steps
|
|
224
224
|
|
|
225
|
-
1. **First**
|
|
226
|
-
2. **Last**
|
|
227
|
-
3. **Invert**
|
|
228
|
-
4. **Play**
|
|
225
|
+
1. **First** - record the element's current bounding rect (`getBoundingClientRect()`)
|
|
226
|
+
2. **Last** - apply the DOM change, then record the new rect
|
|
227
|
+
3. **Invert** - set a CSS transform that moves the element back to its "First" position
|
|
228
|
+
4. **Play** - animate the transform to identity (`0, 0, scale(1)`)
|
|
229
229
|
|
|
230
230
|
```ts
|
|
231
231
|
function flip(el: HTMLElement, applyChange: () => void) {
|
|
@@ -577,7 +577,7 @@ function CompareSlider({ before, after }: { before: string; after: string }) {
|
|
|
577
577
|
|
|
578
578
|
## Blur-to-Mask Crossfades
|
|
579
579
|
|
|
580
|
-
Use a short `filter: blur()` during state transitions to bridge the visual gap between two overlapping states
|
|
580
|
+
Use a short `filter: blur()` during state transitions to bridge the visual gap between two overlapping states - it softens the hard edge that appears when opacity alone creates a ghost.
|
|
581
581
|
|
|
582
582
|
```tsx
|
|
583
583
|
<motion.div
|
|
@@ -591,10 +591,10 @@ Use a short `filter: blur()` during state transitions to bridge the visual gap b
|
|
|
591
591
|
```
|
|
592
592
|
|
|
593
593
|
**Rules:**
|
|
594
|
-
- Cap blur under 20px on non-animated elements
|
|
594
|
+
- Cap blur under 20px on non-animated elements - Safari allocates GPU memory per blurred layer, causing stutter at high values
|
|
595
595
|
- Pair with `scale(0.97)` for press feedback; the scale signals physical depth while blur softens content churn
|
|
596
596
|
- Use for: skeleton → content, loading → loaded image, optimistic update → confirmed state
|
|
597
|
-
- Do NOT use for layout shifts
|
|
597
|
+
- Do NOT use for layout shifts - blur does not mask reflow artifacts
|
|
598
598
|
|
|
599
599
|
---
|
|
600
600
|
|
|
@@ -710,7 +710,7 @@ Motion values are a **design decision**, not a technical default. They communica
|
|
|
710
710
|
| Interruptible UI (toggles, toasts) | `bounce: 0`, transitions not keyframes | Must retarget without pop |
|
|
711
711
|
| Height + opacity combos | Trial and error per library | `height: auto` is not animatable in CSS; each library handles it differently |
|
|
712
712
|
|
|
713
|
-
**Do not mix** snappy dashboard animations with bouncy spring animations in the same product
|
|
713
|
+
**Do not mix** snappy dashboard animations with bouncy spring animations in the same product - the conflicting personalities create a sense that the UI was assembled from parts.
|
|
714
714
|
|
|
715
715
|
---
|
|
716
716
|
|
|
@@ -744,7 +744,7 @@ Fresh eyes catch what in-the-moment iteration misses. Animations feel correct wh
|
|
|
744
744
|
|
|
745
745
|
---
|
|
746
746
|
|
|
747
|
-
## Disney's 12 Principles
|
|
747
|
+
## Disney's 12 Principles - UX Mapping
|
|
748
748
|
|
|
749
749
|
Original source: Frank Thomas & Ollie Johnston, *The Illusion of Life: Disney Animation* (1981). The 12 principles were developed for hand-drawn character animation; the UX mappings below translate each to interface motion.
|
|
750
750
|
|
|
@@ -752,7 +752,7 @@ Original source: Frank Thomas & Ollie Johnston, *The Illusion of Life: Disney An
|
|
|
752
752
|
|
|
753
753
|
### 1. Squash and Stretch
|
|
754
754
|
|
|
755
|
-
**Animation:** Objects deform under force
|
|
755
|
+
**Animation:** Objects deform under force - squash on impact, stretch during fast movement.
|
|
756
756
|
|
|
757
757
|
**UX mapping:** Scale feedback communicates physical weight and responsiveness.
|
|
758
758
|
```tsx
|
|
@@ -763,7 +763,7 @@ Original source: Frank Thomas & Ollie Johnston, *The Illusion of Life: Disney An
|
|
|
763
763
|
transition={{ type: "spring", stiffness: 500, damping: 30 }}
|
|
764
764
|
/>
|
|
765
765
|
```
|
|
766
|
-
**Rule:** Constrain squash/stretch to ≤5% deviation
|
|
766
|
+
**Rule:** Constrain squash/stretch to ≤5% deviation - more reads as glitchy, not physical.
|
|
767
767
|
|
|
768
768
|
---
|
|
769
769
|
|
|
@@ -799,7 +799,7 @@ Original source: Frank Thomas & Ollie Johnston, *The Illusion of Life: Disney An
|
|
|
799
799
|
|
|
800
800
|
**Animation:** Straight-ahead: draw each frame in sequence. Pose-to-pose: define key positions and interpolate.
|
|
801
801
|
|
|
802
|
-
**UX mapping:** All CSS transitions and spring animations are pose-to-pose by definition
|
|
802
|
+
**UX mapping:** All CSS transitions and spring animations are pose-to-pose by definition - you define start and end states. This means:
|
|
803
803
|
- Transitions retarget smoothly when interrupted (see CSS Transitions vs Keyframes section above)
|
|
804
804
|
- The in-between frames are computed by the engine, not designed
|
|
805
805
|
- Design the **poses** (states) carefully; the interpolation handles itself
|
|
@@ -872,7 +872,7 @@ transition: transform 0.2s cubic-bezier(0.4, 0, 1, 1);
|
|
|
872
872
|
- Success state: checkmark draws itself after the confirmation color appears
|
|
873
873
|
- Delete: item fades + the list count badge decrements with a small number-flip animation
|
|
874
874
|
|
|
875
|
-
**Rule:** Secondary actions must complete before or simultaneously with the primary
|
|
875
|
+
**Rule:** Secondary actions must complete before or simultaneously with the primary - never after. They reinforce, not extend.
|
|
876
876
|
|
|
877
877
|
---
|
|
878
878
|
|
|
@@ -915,17 +915,17 @@ transition: transform 0.2s cubic-bezier(0.4, 0, 1, 1);
|
|
|
915
915
|
|
|
916
916
|
**Animation:** Characters have weight, depth, and obey perspective; they feel three-dimensional.
|
|
917
917
|
|
|
918
|
-
**UX mapping:** UI elements should feel visually grounded
|
|
919
|
-
- Drawers and sheets slide from an edge
|
|
920
|
-
- Modals emerge from center or from the triggering element
|
|
921
|
-
- Tooltips appear near the cursor
|
|
918
|
+
**UX mapping:** UI elements should feel visually grounded - not floating. Shadows, depth layering, and transform-origin choices communicate which layer an element lives on.
|
|
919
|
+
- Drawers and sheets slide from an edge - they feel physically attached
|
|
920
|
+
- Modals emerge from center or from the triggering element - they float above the page
|
|
921
|
+
- Tooltips appear near the cursor - they are attached to the pointer
|
|
922
922
|
- `transform-origin` must match where the element conceptually emerges from
|
|
923
923
|
|
|
924
924
|
---
|
|
925
925
|
|
|
926
926
|
### 12. Appeal
|
|
927
927
|
|
|
928
|
-
**Animation:** Characters have a quality that makes the audience want to watch them
|
|
928
|
+
**Animation:** Characters have a quality that makes the audience want to watch them - not necessarily cute, but interesting.
|
|
929
929
|
|
|
930
930
|
**UX mapping:** Animation has personality that is consistent with the product's brand.
|
|
931
931
|
|
|
@@ -9,23 +9,23 @@ Canonical easing curve presets derived from React Native's `Easing` module, adap
|
|
|
9
9
|
|
|
10
10
|
| Token | CSS `cubic-bezier` | Character | Settle (spring/bounce) |
|
|
11
11
|
|---|---|---|---|
|
|
12
|
-
| `--ease-linear` | `cubic-bezier(0,0,1,1)` | Constant rate |
|
|
13
|
-
| `--ease-quad-in` | `cubic-bezier(0.55,0,1,1)` | Slow start |
|
|
14
|
-
| `--ease-quad-out` | `cubic-bezier(0,0,0.45,1)` | Slow end |
|
|
15
|
-
| `--ease-quad-in-out` | `cubic-bezier(0.455,0.03,0.515,0.955)` | Slow both |
|
|
16
|
-
| `--ease-cubic-in` | `cubic-bezier(0.55,0.055,0.675,0.19)` | Aggressive start |
|
|
17
|
-
| `--ease-cubic-out` | `cubic-bezier(0.215,0.61,0.355,1)` | Aggressive end |
|
|
18
|
-
| `--ease-cubic-in-out` | `cubic-bezier(0.645,0.045,0.355,1)` | Strong S-curve |
|
|
19
|
-
| `--ease-sin-in` | `cubic-bezier(0.47,0,0.745,0.715)` | Gentle start |
|
|
20
|
-
| `--ease-sin-out` | `cubic-bezier(0.39,0.575,0.565,1)` | Gentle end |
|
|
21
|
-
| `--ease-sin-in-out` | `cubic-bezier(0.445,0.05,0.55,0.95)` | Smooth S-curve |
|
|
22
|
-
| `--ease-circle-in` | `cubic-bezier(0.6,0.04,0.98,0.335)` | Circular arc start |
|
|
23
|
-
| `--ease-circle-out` | `cubic-bezier(0.075,0.82,0.165,1)` | Circular arc end |
|
|
24
|
-
| `--ease-exp-in` | `cubic-bezier(0.95,0.05,0.795,0.035)` | Explosive start |
|
|
25
|
-
| `--ease-exp-out` | `cubic-bezier(0.19,1,0.22,1)` | Explosive end |
|
|
12
|
+
| `--ease-linear` | `cubic-bezier(0,0,1,1)` | Constant rate | - |
|
|
13
|
+
| `--ease-quad-in` | `cubic-bezier(0.55,0,1,1)` | Slow start | - |
|
|
14
|
+
| `--ease-quad-out` | `cubic-bezier(0,0,0.45,1)` | Slow end | - |
|
|
15
|
+
| `--ease-quad-in-out` | `cubic-bezier(0.455,0.03,0.515,0.955)` | Slow both | - |
|
|
16
|
+
| `--ease-cubic-in` | `cubic-bezier(0.55,0.055,0.675,0.19)` | Aggressive start | - |
|
|
17
|
+
| `--ease-cubic-out` | `cubic-bezier(0.215,0.61,0.355,1)` | Aggressive end | - |
|
|
18
|
+
| `--ease-cubic-in-out` | `cubic-bezier(0.645,0.045,0.355,1)` | Strong S-curve | - |
|
|
19
|
+
| `--ease-sin-in` | `cubic-bezier(0.47,0,0.745,0.715)` | Gentle start | - |
|
|
20
|
+
| `--ease-sin-out` | `cubic-bezier(0.39,0.575,0.565,1)` | Gentle end | - |
|
|
21
|
+
| `--ease-sin-in-out` | `cubic-bezier(0.445,0.05,0.55,0.95)` | Smooth S-curve | - |
|
|
22
|
+
| `--ease-circle-in` | `cubic-bezier(0.6,0.04,0.98,0.335)` | Circular arc start | - |
|
|
23
|
+
| `--ease-circle-out` | `cubic-bezier(0.075,0.82,0.165,1)` | Circular arc end | - |
|
|
24
|
+
| `--ease-exp-in` | `cubic-bezier(0.95,0.05,0.795,0.035)` | Explosive start | - |
|
|
25
|
+
| `--ease-exp-out` | `cubic-bezier(0.19,1,0.22,1)` | Explosive end | - |
|
|
26
26
|
| `--ease-elastic` | `linear(...)` baked | Overshoot + settle | ~500ms |
|
|
27
|
-
| `--ease-back-in` | `cubic-bezier(0.6,-0.28,0.735,0.045)` | Anticipation |
|
|
28
|
-
| `--ease-back-out` | `cubic-bezier(0.175,0.885,0.32,1.275)` | Overshoot |
|
|
27
|
+
| `--ease-back-in` | `cubic-bezier(0.6,-0.28,0.735,0.045)` | Anticipation | - |
|
|
28
|
+
| `--ease-back-out` | `cubic-bezier(0.175,0.885,0.32,1.275)` | Overshoot | - |
|
|
29
29
|
| `--ease-bounce-out` | `linear(...)` baked | Bounces at end | ~420ms |
|
|
30
30
|
|
|
31
31
|
---
|
|
@@ -60,7 +60,7 @@ Easing.linear
|
|
|
60
60
|
|
|
61
61
|
### `quad`
|
|
62
62
|
|
|
63
|
-
Quadratic
|
|
63
|
+
Quadratic - acceleration proportional to `t²`.
|
|
64
64
|
|
|
65
65
|
- **Human name:** Quad (ease-in-out)
|
|
66
66
|
- **Character:** Subtle, polished. Most common choice for UI transitions.
|
|
@@ -85,7 +85,7 @@ Easing.inOut(Easing.quad)
|
|
|
85
85
|
|
|
86
86
|
### `cubic`
|
|
87
87
|
|
|
88
|
-
Cubic
|
|
88
|
+
Cubic - acceleration proportional to `t³`. More pronounced than quad.
|
|
89
89
|
|
|
90
90
|
- **Human name:** Cubic (ease-in-out)
|
|
91
91
|
- **Character:** Snappy, decisive. Good for panels, drawers, menus.
|
|
@@ -109,7 +109,7 @@ Easing.inOut(Easing.cubic)
|
|
|
109
109
|
|
|
110
110
|
### `poly(n)`
|
|
111
111
|
|
|
112
|
-
Generalised polynomial
|
|
112
|
+
Generalised polynomial - `t^n`. Quad is `poly(2)`, cubic is `poly(3)`.
|
|
113
113
|
|
|
114
114
|
- **Human name:** Poly-n
|
|
115
115
|
- **Character:** Tunable. Higher `n` = harder snap.
|
|
@@ -121,13 +121,13 @@ Easing.poly(5) // quintic
|
|
|
121
121
|
Easing.in(Easing.poly(4))
|
|
122
122
|
```
|
|
123
123
|
|
|
124
|
-
No direct CSS equivalent
|
|
124
|
+
No direct CSS equivalent - approximate with a `cubic-bezier` or bake to `linear()`.
|
|
125
125
|
|
|
126
126
|
---
|
|
127
127
|
|
|
128
128
|
### `sin`
|
|
129
129
|
|
|
130
|
-
Sinusoidal
|
|
130
|
+
Sinusoidal - easing shaped by the sine function. Smooth and natural.
|
|
131
131
|
|
|
132
132
|
- **Human name:** Sine
|
|
133
133
|
- **Character:** Organic, gentle. Works well for ambient or breathing animations.
|
|
@@ -150,7 +150,7 @@ Easing.sin
|
|
|
150
150
|
|
|
151
151
|
### `circle`
|
|
152
152
|
|
|
153
|
-
Circular arc
|
|
153
|
+
Circular arc - based on `sqrt(1 - t²)`. Sharp acceleration at the end of its range.
|
|
154
154
|
|
|
155
155
|
- **Human name:** Circ
|
|
156
156
|
- **Character:** Abrupt, dramatic. Use sparingly for emphasis.
|
|
@@ -172,7 +172,7 @@ Easing.circle
|
|
|
172
172
|
|
|
173
173
|
### `exp`
|
|
174
174
|
|
|
175
|
-
Exponential
|
|
175
|
+
Exponential - `2^(10 * (t - 1))`. Starts near-zero, ends explosively.
|
|
176
176
|
|
|
177
177
|
- **Human name:** Expo
|
|
178
178
|
- **Character:** High-impact. Good for reveal animations, hero entrances.
|
|
@@ -226,7 +226,7 @@ Easing.out(Easing.elastic(1, 1))
|
|
|
226
226
|
|
|
227
227
|
### `back(s)`
|
|
228
228
|
|
|
229
|
-
Anticipation curve
|
|
229
|
+
Anticipation curve - slightly retracts before moving forward (or overshoots then settles).
|
|
230
230
|
|
|
231
231
|
- **Human name:** Back
|
|
232
232
|
- **Character:** Mechanical delight. Communicates intentionality.
|
|
@@ -250,7 +250,7 @@ Easing.out(Easing.back(2.5)) // stronger overshoot
|
|
|
250
250
|
|
|
251
251
|
### `bounce`
|
|
252
252
|
|
|
253
|
-
Simulates a physical bounce
|
|
253
|
+
Simulates a physical bounce - the value bounces off the endpoint.
|
|
254
254
|
|
|
255
255
|
- **Human name:** Bounce
|
|
256
256
|
- **Character:** Playful, energetic. Use for game-like or informal UIs.
|
|
@@ -278,7 +278,7 @@ Easing.bounce
|
|
|
278
278
|
|
|
279
279
|
### `bezier(x1, y1, x2, y2)`
|
|
280
280
|
|
|
281
|
-
Raw cubic Bézier
|
|
281
|
+
Raw cubic Bézier - the same primitive that powers all CSS `cubic-bezier()` calls.
|
|
282
282
|
|
|
283
283
|
- **Human name:** Custom Bézier
|
|
284
284
|
- **Character:** Whatever you specify.
|
|
@@ -307,8 +307,8 @@ Given a base easing function `f(t)` where `t ∈ [0, 1]`:
|
|
|
307
307
|
|
|
308
308
|
| Wrapper | Formula | Effect |
|
|
309
309
|
|---|---|---|
|
|
310
|
-
| `in(f)` | `f(t)` | Acceleration at start
|
|
311
|
-
| `out(f)` | `1 - f(1 - t)` | Deceleration at end
|
|
310
|
+
| `in(f)` | `f(t)` | Acceleration at start - slow → fast |
|
|
311
|
+
| `out(f)` | `1 - f(1 - t)` | Deceleration at end - fast → slow |
|
|
312
312
|
| `inOut(f)` | `t < 0.5 ? f(2t)/2 : 1 - f(2(1-t))/2` | Slow start and end |
|
|
313
313
|
|
|
314
314
|
### Examples
|
|
@@ -340,7 +340,7 @@ const easeInElastic = easeIn(elastic(1, 1));
|
|
|
340
340
|
|
|
341
341
|
---
|
|
342
342
|
|
|
343
|
-
## CSS Custom Properties
|
|
343
|
+
## CSS Custom Properties - Full Token Set
|
|
344
344
|
|
|
345
345
|
```css
|
|
346
346
|
:root {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
# Motion Interpolation
|
|
5
5
|
|
|
6
|
-
Interpolation is the mechanism that maps any changing value
|
|
6
|
+
Interpolation is the mechanism that maps any changing value - progress, scroll position, pointer delta, elapsed time - into any animated output range. Every animation in a system can be decomposed into a single canonical form.
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
# Motion Springs
|
|
5
5
|
|
|
6
|
-
Spring animations model physical mass-spring-damper systems. Unlike tween animations, springs are driven by physics rather than duration
|
|
6
|
+
Spring animations model physical mass-spring-damper systems. Unlike tween animations, springs are driven by physics rather than duration - they respond to velocity and settle naturally, making them ideal for interactions that require a sense of weight.
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -13,7 +13,7 @@ Every spring is defined by three parameters:
|
|
|
13
13
|
|
|
14
14
|
### Stiffness (`k`)
|
|
15
15
|
|
|
16
|
-
The spring constant
|
|
16
|
+
The spring constant - how strongly the spring pulls toward the target.
|
|
17
17
|
|
|
18
18
|
- **Low stiffness** (80–150): soft, gentle, slow to accelerate
|
|
19
19
|
- **Medium stiffness** (150–300): standard UI feel
|
|
@@ -25,7 +25,7 @@ Higher stiffness = faster animation, more acceleration. Does not affect whether
|
|
|
25
25
|
|
|
26
26
|
### Damping (`c`)
|
|
27
27
|
|
|
28
|
-
The friction coefficient
|
|
28
|
+
The friction coefficient - how quickly oscillation energy is removed.
|
|
29
29
|
|
|
30
30
|
- **Low damping relative to stiffness**: spring oscillates (undershooted)
|
|
31
31
|
- **Damping at critical value**: spring settles exactly without oscillation
|
|
@@ -95,7 +95,7 @@ stiffness: 180 | damping: 12 | mass: 1
|
|
|
95
95
|
settle time: ~600ms | overshoots: yes (pronounced, 2–3 cycles)
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
-
High energy, bouncy. Use for playful or expressive interactions
|
|
98
|
+
High energy, bouncy. Use for playful or expressive interactions - celebratory states, game-like UIs, avatar reactions. Not appropriate for productivity or enterprise UIs.
|
|
99
99
|
|
|
100
100
|
```js
|
|
101
101
|
// Framer Motion
|
|
@@ -133,7 +133,7 @@ stiffness: 280 | damping: 60 | mass: 1
|
|
|
133
133
|
settle time: ~800ms | overshoots: no (overdamped)
|
|
134
134
|
```
|
|
135
135
|
|
|
136
|
-
Overdamped spring
|
|
136
|
+
Overdamped spring - creeps gently to target with no oscillation. Feels heavy and deliberate. Good for large layout changes, full-screen transitions, onboarding sequences.
|
|
137
137
|
|
|
138
138
|
```js
|
|
139
139
|
// Framer Motion
|
|
@@ -203,17 +203,17 @@ The baked approximation loses velocity responsiveness (a real spring reacts to i
|
|
|
203
203
|
|
|
204
204
|
### Use spring when:
|
|
205
205
|
|
|
206
|
-
- **Drag release / throw**
|
|
207
|
-
- **Toggle state**
|
|
208
|
-
- **Interactive hover / follow**
|
|
209
|
-
- **Interrupt-safe sequences**
|
|
206
|
+
- **Drag release / throw** - the animation should carry the momentum from the gesture. Springs naturally handle initial velocity; tweens cannot.
|
|
207
|
+
- **Toggle state** - a checkbox, switch, or button that needs to feel responsive and alive. The `stiff` preset is standard here.
|
|
208
|
+
- **Interactive hover / follow** - cursor-tracking, magnetic elements. Springs give a sense of physical weight.
|
|
209
|
+
- **Interrupt-safe sequences** - if the user reverses a motion mid-way, springs handle the reversal gracefully by inheriting the current velocity.
|
|
210
210
|
|
|
211
211
|
### Use tween (eased duration) when:
|
|
212
212
|
|
|
213
|
-
- **Navigation transitions**
|
|
214
|
-
- **Data-driven state changes**
|
|
215
|
-
- **Reduced motion**
|
|
216
|
-
- **Synchronized choreography**
|
|
213
|
+
- **Navigation transitions** - page or route changes should complete in a fixed, predictable time. A spring may not settle in time if interrupted.
|
|
214
|
+
- **Data-driven state changes** - tab switches, accordion open/close, tooltip appear. A 200–300ms cubic-out tween is predictable and familiar.
|
|
215
|
+
- **Reduced motion** - when `prefers-reduced-motion` is active, replace all springs with short (150ms) linear or ease-out tweens. Springs are inherently bouncy; motion-sensitive users should never see oscillation.
|
|
216
|
+
- **Synchronized choreography** - when multiple elements must start and end together (e.g., a staggered list entrance), tweens with explicit durations are easier to coordinate.
|
|
217
217
|
|
|
218
218
|
```css
|
|
219
219
|
@media (prefers-reduced-motion: reduce) {
|