@hegemonart/get-design-done 1.41.5 → 1.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +1120 -1029
- package/README.md +158 -154
- 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 +48 -0
- package/dist/claude-code/.claude/skills/analyze-dependencies/SKILL.md +95 -0
- package/dist/claude-code/.claude/skills/apply-reflections/SKILL.md +92 -0
- package/dist/claude-code/.claude/skills/apply-reflections/apply-reflections-procedure.md +170 -0
- package/dist/claude-code/.claude/skills/audit/SKILL.md +79 -0
- package/dist/claude-code/.claude/skills/bandit-status/SKILL.md +94 -0
- package/dist/claude-code/.claude/skills/benchmark/SKILL.md +65 -0
- package/dist/claude-code/.claude/skills/bootstrap-ds/SKILL.md +43 -0
- package/dist/claude-code/.claude/skills/brief/SKILL.md +128 -0
- package/dist/claude-code/.claude/skills/budget/SKILL.md +45 -0
- package/dist/claude-code/.claude/skills/cache-manager/SKILL.md +66 -0
- package/dist/claude-code/.claude/skills/cache-manager/cache-policy.md +126 -0
- package/dist/claude-code/.claude/skills/check-update/SKILL.md +98 -0
- package/dist/claude-code/.claude/skills/compare/SKILL.md +82 -0
- package/dist/claude-code/.claude/skills/compare/compare-rubric.md +171 -0
- package/dist/claude-code/.claude/skills/complete-cycle/SKILL.md +81 -0
- package/dist/claude-code/.claude/skills/connections/SKILL.md +71 -0
- package/dist/claude-code/.claude/skills/connections/connections-onboarding.md +608 -0
- package/dist/claude-code/.claude/skills/continue/SKILL.md +24 -0
- package/dist/claude-code/.claude/skills/darkmode/SKILL.md +76 -0
- package/dist/claude-code/.claude/skills/darkmode/darkmode-audit-procedure.md +258 -0
- package/dist/claude-code/.claude/skills/debug/SKILL.md +41 -0
- package/dist/claude-code/.claude/skills/debug/debug-feedback-loops.md +119 -0
- package/dist/claude-code/.claude/skills/design/SKILL.md +99 -0
- package/dist/claude-code/.claude/skills/design/design-procedure.md +304 -0
- package/dist/claude-code/.claude/skills/discover/SKILL.md +72 -0
- package/dist/claude-code/.claude/skills/discover/discover-procedure.md +222 -0
- package/dist/claude-code/.claude/skills/discuss/SKILL.md +96 -0
- package/dist/claude-code/.claude/skills/do/SKILL.md +45 -0
- package/dist/claude-code/.claude/skills/explore/SKILL.md +105 -0
- package/dist/claude-code/.claude/skills/explore/explore-procedure.md +267 -0
- package/dist/claude-code/.claude/skills/export/SKILL.md +30 -0
- package/dist/claude-code/.claude/skills/extract-learnings/SKILL.md +98 -0
- package/dist/claude-code/.claude/skills/fast/SKILL.md +91 -0
- package/dist/claude-code/.claude/skills/figma-extract/SKILL.md +64 -0
- package/dist/claude-code/.claude/skills/figma-write/SKILL.md +39 -0
- package/dist/claude-code/.claude/skills/graphify/SKILL.md +49 -0
- package/dist/claude-code/.claude/skills/health/SKILL.md +99 -0
- package/dist/claude-code/.claude/skills/health/health-mcp-detection.md +44 -0
- package/dist/claude-code/.claude/skills/health/health-skill-length-report.md +69 -0
- package/dist/claude-code/.claude/skills/help/SKILL.md +87 -0
- package/dist/claude-code/.claude/skills/list-assumptions/SKILL.md +61 -0
- package/dist/claude-code/.claude/skills/locale/SKILL.md +51 -0
- package/dist/claude-code/.claude/skills/map/SKILL.md +89 -0
- package/dist/claude-code/.claude/skills/migrate/SKILL.md +70 -0
- package/dist/claude-code/.claude/skills/new-cycle/SKILL.md +37 -0
- package/dist/claude-code/.claude/skills/new-cycle/milestone-completeness-rubric.md +87 -0
- package/dist/claude-code/.claude/skills/new-project/SKILL.md +53 -0
- package/dist/claude-code/.claude/skills/next/SKILL.md +68 -0
- package/dist/claude-code/.claude/skills/note/SKILL.md +48 -0
- package/dist/claude-code/.claude/skills/openrouter-status/SKILL.md +86 -0
- package/dist/claude-code/.claude/skills/optimize/SKILL.md +97 -0
- package/dist/claude-code/.claude/skills/pause/SKILL.md +77 -0
- package/dist/claude-code/.claude/skills/peer-cli-add/SKILL.md +88 -0
- package/dist/claude-code/.claude/skills/peer-cli-add/peer-cli-protocol.md +161 -0
- package/dist/claude-code/.claude/skills/peer-cli-customize/SKILL.md +90 -0
- package/dist/claude-code/.claude/skills/peers/SKILL.md +96 -0
- package/dist/claude-code/.claude/skills/plan/SKILL.md +105 -0
- package/dist/claude-code/.claude/skills/plan/plan-procedure.md +278 -0
- package/dist/claude-code/.claude/skills/plant-seed/SKILL.md +48 -0
- package/dist/claude-code/.claude/skills/pr-branch/SKILL.md +32 -0
- package/dist/claude-code/.claude/skills/progress/SKILL.md +95 -0
- package/dist/claude-code/.claude/skills/quality-gate/SKILL.md +90 -0
- package/dist/claude-code/.claude/skills/quality-gate/threat-modeling.md +101 -0
- package/dist/claude-code/.claude/skills/quick/SKILL.md +44 -0
- package/dist/claude-code/.claude/skills/reapply-patches/SKILL.md +32 -0
- package/dist/claude-code/.claude/skills/recall/SKILL.md +75 -0
- package/dist/claude-code/.claude/skills/reflect/SKILL.md +85 -0
- package/dist/claude-code/.claude/skills/reflect/procedures/capability-gap-scan.md +120 -0
- package/dist/claude-code/.claude/skills/report-issue/SKILL.md +53 -0
- package/dist/claude-code/.claude/skills/report-issue/report-issue-procedure.md +120 -0
- package/dist/claude-code/.claude/skills/resume/SKILL.md +93 -0
- package/dist/claude-code/.claude/skills/review-backlog/SKILL.md +46 -0
- package/dist/claude-code/.claude/skills/review-decisions/SKILL.md +42 -0
- package/dist/claude-code/.claude/skills/roi/SKILL.md +54 -0
- package/dist/claude-code/.claude/skills/rollout-status/SKILL.md +35 -0
- package/dist/claude-code/.claude/skills/router/SKILL.md +89 -0
- package/dist/claude-code/.claude/skills/router/capability-gap-emitter.md +65 -0
- package/dist/claude-code/.claude/skills/router/router-pick-emitter.md +78 -0
- package/dist/claude-code/.claude/skills/router/router-rules.md +84 -0
- package/dist/claude-code/.claude/skills/scan/SKILL.md +92 -0
- package/dist/claude-code/.claude/skills/scan/scan-procedure.md +732 -0
- package/dist/claude-code/.claude/skills/settings/SKILL.md +87 -0
- package/dist/claude-code/.claude/skills/ship/SKILL.md +48 -0
- package/dist/claude-code/.claude/skills/sketch/SKILL.md +78 -0
- package/dist/claude-code/.claude/skills/sketch-wrap-up/SKILL.md +92 -0
- package/dist/claude-code/.claude/skills/skill-manifest/SKILL.md +79 -0
- package/dist/claude-code/.claude/skills/spike/SKILL.md +67 -0
- package/dist/claude-code/.claude/skills/spike-wrap-up/SKILL.md +86 -0
- package/dist/claude-code/.claude/skills/start/SKILL.md +67 -0
- package/dist/claude-code/.claude/skills/start/start-procedure.md +115 -0
- package/dist/claude-code/.claude/skills/stats/SKILL.md +51 -0
- package/dist/claude-code/.claude/skills/style/SKILL.md +71 -0
- package/dist/claude-code/.claude/skills/style/style-doc-procedure.md +150 -0
- package/dist/claude-code/.claude/skills/synthesize/SKILL.md +94 -0
- package/dist/claude-code/.claude/skills/timeline/SKILL.md +66 -0
- package/dist/claude-code/.claude/skills/todo/SKILL.md +64 -0
- package/dist/claude-code/.claude/skills/turn-closeout/SKILL.md +95 -0
- package/dist/claude-code/.claude/skills/undo/SKILL.md +31 -0
- package/dist/claude-code/.claude/skills/unlock-decision/SKILL.md +54 -0
- package/dist/claude-code/.claude/skills/update/SKILL.md +56 -0
- package/dist/claude-code/.claude/skills/using-gdd/SKILL.md +78 -0
- package/dist/claude-code/.claude/skills/verify/SKILL.md +113 -0
- package/dist/claude-code/.claude/skills/verify/verify-procedure.md +512 -0
- package/dist/claude-code/.claude/skills/warm-cache/SKILL.md +81 -0
- package/dist/claude-code/.claude/skills/watch-authorities/SKILL.md +82 -0
- package/dist/claude-code/.claude/skills/zoom-out/SKILL.md +26 -0
- package/package.json +8 -2
- package/reference/DEPRECATIONS.md +21 -7
- 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/registry.json +7 -0
- 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 +71 -0
- 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/build/factory.cjs +62 -0
- package/scripts/lib/build/harness-configs.cjs +64 -0
- package/scripts/lib/manifest/prose-denylist.json +1 -1
- package/sdk/cli/commands/build.ts +106 -0
- package/sdk/cli/index.js +84 -2
- package/sdk/cli/index.ts +7 -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
|
@@ -9,113 +9,113 @@ Eight controlled transition families derived from the hyperframes registry. Each
|
|
|
9
9
|
|
|
10
10
|
## 1. 3d
|
|
11
11
|
|
|
12
|
-
The 3d family covers transitions driven by depth and perspective. Elements rotate or flip along a spatial axis so the viewer perceives them moving through three-dimensional space rather than sliding across a flat surface. The visual character is physical and mechanical
|
|
12
|
+
The 3d family covers transitions driven by depth and perspective. Elements rotate or flip along a spatial axis so the viewer perceives them moving through three-dimensional space rather than sliding across a flat surface. The visual character is physical and mechanical - content feels like it has mass, faces, and hinge points. Timing curves should emphasize the acceleration and deceleration of a real object rotating under gravity.
|
|
13
13
|
|
|
14
14
|
**Canonical examples:** `flip-x`, `flip-y`, `rotate-3d-left`, `cube-left`
|
|
15
15
|
|
|
16
16
|
### When to use
|
|
17
17
|
|
|
18
|
-
- **Page flips in book or document viewers**
|
|
19
|
-
- **Card flip interactions**
|
|
20
|
-
- **Onboarding carousel slides**
|
|
18
|
+
- **Page flips in book or document viewers** - the metaphor of a literal page turning reinforces the reading model.
|
|
19
|
+
- **Card flip interactions** - revealing the back of a card (e.g., a flashcard, a product tile showing detail) benefits from the physical flip metaphor.
|
|
20
|
+
- **Onboarding carousel slides** - a cube or rotating panel transition communicates sequential steps with a stronger sense of progression than a flat slide.
|
|
21
21
|
|
|
22
22
|
---
|
|
23
23
|
|
|
24
24
|
## 2. blur
|
|
25
25
|
|
|
26
|
-
The blur family transitions content by shifting focus: the outgoing element loses sharpness while the incoming element sharpens into clarity. The motion resembles a camera rack-focus
|
|
26
|
+
The blur family transitions content by shifting focus: the outgoing element loses sharpness while the incoming element sharpens into clarity. The motion resembles a camera rack-focus - attention narrows onto a single point and then expands to the new content. Unlike most transition families, blur operates in the depth-of-field axis rather than the spatial or temporal axis, making it feel intimate and selective.
|
|
27
27
|
|
|
28
28
|
**Canonical examples:** `blur-in`, `blur-out`, `blur-in-up`, `blur-in-down`
|
|
29
29
|
|
|
30
30
|
### When to use
|
|
31
31
|
|
|
32
|
-
- **Focus-mode overlays**
|
|
33
|
-
- **Photo gallery lightbox opens**
|
|
34
|
-
- **Loading skeleton to content**
|
|
32
|
+
- **Focus-mode overlays** - blurring underlying content when a modal, drawer, or spotlight opens communicates that the rest of the UI has receded.
|
|
33
|
+
- **Photo gallery lightbox opens** - racking focus from thumbnail to full image reinforces the zoom metaphor without a disorienting scale jump.
|
|
34
|
+
- **Loading skeleton to content** - blurring out a skeleton and sharpening in the real content feels more organic than an abrupt swap or a flat cross-fade.
|
|
35
35
|
|
|
36
36
|
---
|
|
37
37
|
|
|
38
38
|
## 3. cover
|
|
39
39
|
|
|
40
|
-
The cover family uses a fill or wipe that expands from one edge to conceal the outgoing content and simultaneously reveal the incoming content behind it. The transition is directional
|
|
40
|
+
The cover family uses a fill or wipe that expands from one edge to conceal the outgoing content and simultaneously reveal the incoming content behind it. The transition is directional - left, right, up, or down - giving users a strong spatial cue about where they are navigating. The incoming content is already fully rendered beneath the cover layer, so there is no compositional ambiguity mid-transition.
|
|
41
41
|
|
|
42
42
|
**Canonical examples:** `cover-left`, `cover-right`, `cover-up`, `cover-down`
|
|
43
43
|
|
|
44
44
|
### When to use
|
|
45
45
|
|
|
46
|
-
- **Route transitions in marketing sites**
|
|
47
|
-
- **Section reveals on scroll**
|
|
48
|
-
- **Slide-panel opens**
|
|
46
|
+
- **Route transitions in marketing sites** - a cover wipe from the current page edge toward the next reinforces the left-to-right or top-to-bottom navigation model.
|
|
47
|
+
- **Section reveals on scroll** - covering the previous section as the next one rises into view creates a satisfying page-turning rhythm for long-form content.
|
|
48
|
+
- **Slide-panel opens** - a drawer or side panel that covers the main content from its natural edge feels grounded rather than floating.
|
|
49
49
|
|
|
50
50
|
---
|
|
51
51
|
|
|
52
52
|
## 4. destruction
|
|
53
53
|
|
|
54
|
-
The destruction family fragments outgoing content before new content appears. Elements shatter, explode, pixelate, or break apart into constituent pieces that scatter or dissolve. The transition is intentionally dramatic and high-entropy
|
|
54
|
+
The destruction family fragments outgoing content before new content appears. Elements shatter, explode, pixelate, or break apart into constituent pieces that scatter or dissolve. The transition is intentionally dramatic and high-entropy - it signals a decisive, irreversible state change rather than a soft navigation event. Because of its visual weight, destruction transitions should be reserved for moments where the drama is earned.
|
|
55
55
|
|
|
56
56
|
**Canonical examples:** `shatter`, `explode`, `pixelate-out`, `break-apart`
|
|
57
57
|
|
|
58
58
|
### When to use
|
|
59
59
|
|
|
60
|
-
- **Onboarding celebrations**
|
|
61
|
-
- **Error states (use sparingly)**
|
|
62
|
-
- **Game-style transitions**
|
|
60
|
+
- **Onboarding celebrations** - completing a significant setup milestone (connecting an account, finishing a profile) can warrant a brief destruction-style break of the previous step.
|
|
61
|
+
- **Error states (use sparingly)** - a pixelate-out or shatter on a failed action can reinforce the severity of the error without a generic fade, but overuse deadens the signal.
|
|
62
|
+
- **Game-style transitions** - level completions, score reveals, or achievement unlocks in game-adjacent products match the genre conventions users already associate with this visual language.
|
|
63
63
|
|
|
64
64
|
---
|
|
65
65
|
|
|
66
66
|
## 5. dissolve
|
|
67
67
|
|
|
68
|
-
The dissolve family cross-fades both the outgoing and incoming content so they overlap during the transition period. Neither element is hidden at the midpoint
|
|
68
|
+
The dissolve family cross-fades both the outgoing and incoming content so they overlap during the transition period. Neither element is hidden at the midpoint - the viewer sees a superimposition of both states. This creates a sense of continuity and blending rather than replacement. Dissolves feel gentle and temporal: time is passing, but the context is preserved.
|
|
69
69
|
|
|
70
70
|
**Canonical examples:** `dissolve`, `fade-through-black`, `fade-through-white`, `morph-dissolve`
|
|
71
71
|
|
|
72
72
|
### When to use
|
|
73
73
|
|
|
74
|
-
- **Content replacement where continuity matters**
|
|
75
|
-
- **Photo slideshows**
|
|
76
|
-
- **Wizard step changes**
|
|
74
|
+
- **Content replacement where continuity matters** - updating a detail panel or a card's content without navigating away benefits from dissolve so the user understands they are still in the same location.
|
|
75
|
+
- **Photo slideshows** - the classic cross-dissolve between images preserves the sense of a continuous viewing experience.
|
|
76
|
+
- **Wizard step changes** - stepping through a multi-step form where each step occupies the same spatial region reads more clearly with a dissolve than a directional slide, because the user has not navigated anywhere.
|
|
77
77
|
|
|
78
78
|
---
|
|
79
79
|
|
|
80
80
|
## 6. distortion
|
|
81
81
|
|
|
82
|
-
The distortion family applies mesh warping, ripple, stretch, or liquid deformation to content during the transition. Rather than moving content spatially or temporally, distortion transitions make the pixels themselves behave like a physical medium
|
|
82
|
+
The distortion family applies mesh warping, ripple, stretch, or liquid deformation to content during the transition. Rather than moving content spatially or temporally, distortion transitions make the pixels themselves behave like a physical medium - rubber, water, or fabric - that stretches and snaps back. The effect is visceral and tactile. Used well, it adds a signature moment that makes a product feel materially distinct.
|
|
83
83
|
|
|
84
84
|
**Canonical examples:** `warp`, `ripple`, `stretch-in`, `liquid`
|
|
85
85
|
|
|
86
86
|
### When to use
|
|
87
87
|
|
|
88
|
-
- **Creative and editorial contexts**
|
|
89
|
-
- **Unique brand moments**
|
|
90
|
-
- **Hero section transitions on marketing sites**
|
|
88
|
+
- **Creative and editorial contexts** - design portfolios, editorial publications, and art-directed landing pages where differentiation is a primary goal.
|
|
89
|
+
- **Unique brand moments** - a single, well-timed warp or ripple on a hero image transition can become a brand signature without overwhelming the interface.
|
|
90
|
+
- **Hero section transitions on marketing sites** - distortion applied at the seam between a full-bleed hero and the next section creates a visceral scroll reward that flat transitions cannot match.
|
|
91
91
|
|
|
92
92
|
---
|
|
93
93
|
|
|
94
94
|
## 7. grid
|
|
95
95
|
|
|
96
|
-
The grid family breaks content into a regular matrix of tiles that animate independently
|
|
96
|
+
The grid family breaks content into a regular matrix of tiles that animate independently - entering, exiting, flipping, or fading in a choreographed sequence. The grid subdivision can be dense (many small tiles for a mosaic effect) or coarse (a few large panels). The transition communicates that the content is composed of discrete pieces, which suits imagery and portfolio work where the grid metaphor is already meaningful.
|
|
97
97
|
|
|
98
98
|
**Canonical examples:** `grid-in`, `grid-out`, `checkerboard`, `tile-flip`
|
|
99
99
|
|
|
100
100
|
### When to use
|
|
101
101
|
|
|
102
|
-
- **Portfolio galleries**
|
|
103
|
-
- **Image reveals**
|
|
104
|
-
- **Dramatic content transitions in editorial contexts**
|
|
102
|
+
- **Portfolio galleries** - revealing a new set of work by animating each thumbnail cell independently reinforces the gallery grid metaphor.
|
|
103
|
+
- **Image reveals** - a grid-in where tiles appear in a wave pattern draws the eye across the composition before the full image settles.
|
|
104
|
+
- **Dramatic content transitions in editorial contexts** - a checkerboard or tile-flip between major sections of an editorial layout creates a theatrical reveal suited to magazine-style layouts.
|
|
105
105
|
|
|
106
106
|
---
|
|
107
107
|
|
|
108
108
|
## 8. light
|
|
109
109
|
|
|
110
|
-
The light family uses luminosity effects
|
|
110
|
+
The light family uses luminosity effects - flash, glow, lens flare, or bloom - to punctuate the moment of transition. Rather than moving content spatially, light transitions overwhelm the frame briefly with brightness or radiant energy before the new content resolves. The effect is momentary and climactic, borrowed from cinematic language where a burst of light signals a revelation, a completion, or the passage of significance.
|
|
111
111
|
|
|
112
112
|
**Canonical examples:** `flash`, `whiteout`, `bloom`, `lens-flare`
|
|
113
113
|
|
|
114
114
|
### When to use
|
|
115
115
|
|
|
116
|
-
- **Onboarding completions**
|
|
117
|
-
- **Achievement unlocks**
|
|
118
|
-
- **Brand-moment animations and moments of delight**
|
|
116
|
+
- **Onboarding completions** - a flash or bloom when the user finishes setup signals that something important has happened.
|
|
117
|
+
- **Achievement unlocks** - reward moments in any product (reaching a milestone, earning a badge) suit light transitions because brightness is universally read as positive and celebratory.
|
|
118
|
+
- **Brand-moment animations and moments of delight** - a subtle lens-flare or glow on a signature interaction (e.g., hitting a streak, confirming a purchase) adds warmth without disrupting flow.
|
|
119
119
|
|
|
120
120
|
---
|
|
121
121
|
|
|
@@ -140,13 +140,13 @@ Quick-reference guide for selecting the right transition family based on visual
|
|
|
140
140
|
|
|
141
141
|
Transition family choice constrains the appropriate duration range. The duration system (defined in `reference/motion.md`) maps timing to semantic classes: narrative, slow, standard, quick, and instant.
|
|
142
142
|
|
|
143
|
-
**3d and destruction** require slow-to-narrative durations (400–700 ms). Their visual complexity
|
|
143
|
+
**3d and destruction** require slow-to-narrative durations (400–700 ms). Their visual complexity - rotating geometry, fragmenting particles - needs time to resolve clearly. At quick durations they read as broken or glitchy rather than intentional.
|
|
144
144
|
|
|
145
145
|
**distortion** works best in the slow-to-standard range (300–500 ms). Warping too fast looks like an artifact; too slow it becomes self-indulgent. The sweet spot is long enough to feel physical but short enough to feel responsive.
|
|
146
146
|
|
|
147
147
|
**grid** tolerates a wider range depending on tile count. Coarse grids (2×2 or 3×3) can run at standard (200–300 ms); dense mosaics need slow (350–500 ms) so individual tile motion is legible.
|
|
148
148
|
|
|
149
|
-
**light** transitions are typically the shortest of the heavy-weight families. A flash or whiteout at 150–250 ms (standard-to-quick) feels like a camera flash
|
|
149
|
+
**light** transitions are typically the shortest of the heavy-weight families. A flash or whiteout at 150–250 ms (standard-to-quick) feels like a camera flash - instantaneous and climactic. Extending it past 400 ms turns a flash into a fade.
|
|
150
150
|
|
|
151
151
|
**dissolve and cover** are the workhorses of the system. Both operate comfortably at standard (200–300 ms) and can be compressed to quick (100–150 ms) for secondary navigation without losing legibility. They are the default choice when in doubt.
|
|
152
152
|
|
package/reference/motion.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Motion & Animation Framework
|
|
2
2
|
|
|
3
|
-
Based on Emil Kowalski's design engineering philosophy. Apply these rules in order
|
|
3
|
+
Based on Emil Kowalski's design engineering philosophy. Apply these rules in order - do not skip to "how should this animate" before answering "should this animate."
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -10,11 +10,11 @@ Based on Emil Kowalski's design engineering philosophy. Apply these rules in ord
|
|
|
10
10
|
|
|
11
11
|
| Action frequency | Decision |
|
|
12
12
|
|---|---|
|
|
13
|
-
| 100+/day
|
|
14
|
-
| Tens/day
|
|
15
|
-
| Occasional
|
|
16
|
-
| Rare
|
|
17
|
-
| Once
|
|
13
|
+
| 100+/day - keyboard shortcuts, command palette, list navigation | **No animation. Ever.** |
|
|
14
|
+
| Tens/day - hover states, toggles, tab switching | Remove or keep to <80ms. No delay. |
|
|
15
|
+
| Occasional - modals opening, drawers, toasts | Standard animation (150–300ms) |
|
|
16
|
+
| Rare - onboarding, celebrations, first-time flows | Can add personality and delight |
|
|
17
|
+
| Once - loading splash, page transitions | Full animation budget |
|
|
18
18
|
|
|
19
19
|
**Critical rule**: Never animate keyboard-initiated actions. They repeat hundreds of times daily. Every ms of animation is felt.
|
|
20
20
|
|
|
@@ -26,7 +26,7 @@ Valid animation purposes only. If it doesn't serve one of these, remove it.
|
|
|
26
26
|
|---|---|
|
|
27
27
|
| **Spatial consistency** | Toast enters/exits same edge each time |
|
|
28
28
|
| **State indication** | Button morphs to show loading → success |
|
|
29
|
-
| **Cause-effect explanation** | Item deletion
|
|
29
|
+
| **Cause-effect explanation** | Item deletion - item flies to trash |
|
|
30
30
|
| **Feedback** | Button scales 0.97 on press |
|
|
31
31
|
| **Prevent jarring changes** | Content appearing/disappearing needs transition |
|
|
32
32
|
|
|
@@ -36,9 +36,9 @@ Invalid purposes: "It looks cool", "It feels modern", "Other apps do it."
|
|
|
36
36
|
|
|
37
37
|
| Element state | Easing | Rationale |
|
|
38
38
|
|---|---|---|
|
|
39
|
-
| **Entering** | `ease-out` (fast start, slow end) | Feels responsive
|
|
40
|
-
| **Exiting** | `ease-in` (slow start, fast end) | Gets out of the way
|
|
41
|
-
| **State transition** (same element) | `ease-in-out` | Natural
|
|
39
|
+
| **Entering** | `ease-out` (fast start, slow end) | Feels responsive - starts immediately |
|
|
40
|
+
| **Exiting** | `ease-in` (slow start, fast end) | Gets out of the way - doesn't linger |
|
|
41
|
+
| **State transition** (same element) | `ease-in-out` | Natural - neither abrupt start nor end |
|
|
42
42
|
| **Interactive/draggable** | Spring physics | Follows finger/cursor naturally |
|
|
43
43
|
| **Bounce/elastic** | **Never** | Feels toy-like and dated |
|
|
44
44
|
|
|
@@ -92,7 +92,7 @@ Exception: `filter` (blur) is GPU-accelerated in modern browsers but battery-exp
|
|
|
92
92
|
When animating a list of items entering:
|
|
93
93
|
- Stagger delay: **30–50ms** per item
|
|
94
94
|
- Maximum stagger depth: **6–8 items** (items beyond that appear simultaneously)
|
|
95
|
-
- Direction: top-to-bottom OR left-to-right
|
|
95
|
+
- Direction: top-to-bottom OR left-to-right - never random
|
|
96
96
|
|
|
97
97
|
```css
|
|
98
98
|
.item:nth-child(1) { animation-delay: 0ms; }
|
|
@@ -121,7 +121,7 @@ button:not(:active) {
|
|
|
121
121
|
```
|
|
122
122
|
|
|
123
123
|
Scale range: **0.95–0.98** for buttons. **0.97** is the safest default.
|
|
124
|
-
Never scale below 0.90
|
|
124
|
+
Never scale below 0.90 - it looks broken.
|
|
125
125
|
|
|
126
126
|
---
|
|
127
127
|
|
|
@@ -169,7 +169,7 @@ The best animations are ones users cannot describe but notice when absent. Signs
|
|
|
169
169
|
- Removing the animation makes the UI feel broken
|
|
170
170
|
- Users say "it feels premium" but can't point to any specific feature
|
|
171
171
|
|
|
172
|
-
This is the goal. Not "look at this animation"
|
|
172
|
+
This is the goal. Not "look at this animation" - "why does this feel so good to use?"
|
|
173
173
|
|
|
174
174
|
---
|
|
175
175
|
|
|
@@ -238,7 +238,7 @@ Rule of thumb: for UI micro-interactions use stiffness 150–250, damping 20–3
|
|
|
238
238
|
|
|
239
239
|
## Scroll-Triggered Animations
|
|
240
240
|
|
|
241
|
-
Use IntersectionObserver for scroll-reveal effects
|
|
241
|
+
Use IntersectionObserver for scroll-reveal effects - it replaces scroll-event
|
|
242
242
|
listeners with a throttled browser-native API.
|
|
243
243
|
|
|
244
244
|
### Basic pattern
|
|
@@ -271,15 +271,15 @@ document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
|
|
|
271
271
|
|
|
272
272
|
### Once vs repeat
|
|
273
273
|
|
|
274
|
-
- **Once**
|
|
274
|
+
- **Once** - call `observer.unobserve(entry.target)` after first intersection.
|
|
275
275
|
Use for: hero reveals, one-shot entrance animations, stat counters.
|
|
276
|
-
- **Repeat**
|
|
276
|
+
- **Repeat** - leave observer active. Use for: progress indicators, parallax effects,
|
|
277
277
|
sticky nav state changes.
|
|
278
278
|
|
|
279
279
|
### Performance rules
|
|
280
280
|
|
|
281
281
|
1. Animate only `transform` and `opacity` (GPU-accelerated). Avoid `top`, `left`, `width`, `height`.
|
|
282
|
-
2. No debounce/throttle needed
|
|
282
|
+
2. No debounce/throttle needed - IntersectionObserver is already throttled by the browser.
|
|
283
283
|
3. For many elements, share a single observer instance and call `observe()` once per element.
|
|
284
284
|
4. Prefer CSS transitions triggered by a class toggle over requestAnimationFrame loops.
|
|
285
285
|
5. Use `will-change: transform, opacity` sparingly (only on elements that animate repeatedly).
|
|
@@ -287,11 +287,11 @@ document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
|
|
|
287
287
|
---
|
|
288
288
|
|
|
289
289
|
## MIFB Micro-Motion Extensions
|
|
290
|
-
Source: jakubkrehel/make-interfaces-feel-better (MIT)
|
|
290
|
+
Source: jakubkrehel/make-interfaces-feel-better (MIT) - motion.md
|
|
291
291
|
|
|
292
292
|
### Interruptible Animations
|
|
293
293
|
|
|
294
|
-
Use CSS transitions for interactive elements because transitions retarget mid-animation
|
|
294
|
+
Use CSS transitions for interactive elements because transitions retarget mid-animation - when a user moves their cursor away before a hover animation completes, the transition reverses smoothly from wherever it currently is. Keyframe animations restart from the beginning, creating a jarring jump.
|
|
295
295
|
|
|
296
296
|
**Decision rule:**
|
|
297
297
|
- Interactive states (hover, focus, active, pressed): always CSS transitions
|
|
@@ -314,11 +314,11 @@ For multi-element entrances (card grids, lists, feature sections):
|
|
|
314
314
|
- Entrance transform: `opacity: 0 → 1` + `translateY(12px → 0)` + `blur(4px → 0)`
|
|
315
315
|
- Entrance duration: 300ms, `ease-out`
|
|
316
316
|
- Exit transform: `opacity: 1 → 0` + `translateY(0 → -12px)` (opposite direction, smaller offset)
|
|
317
|
-
- Exit duration: 150ms (half the entrance duration
|
|
317
|
+
- Exit duration: 150ms (half the entrance duration - exits should be faster)
|
|
318
318
|
|
|
319
|
-
The blur component adds a depth cue that makes entrances feel less flat. Keep blur modest (4px)
|
|
319
|
+
The blur component adds a depth cue that makes entrances feel less flat. Keep blur modest (4px) - the goal is a subtle focus effect, not a visible blur.
|
|
320
320
|
|
|
321
|
-
### Contextual Icon Animations
|
|
321
|
+
### Contextual Icon Animations - Cross-Fade Pattern
|
|
322
322
|
|
|
323
323
|
When swapping two icons (e.g., play ↔ pause, chevron-up ↔ chevron-down, bookmark ↔ bookmarked), use this exact cross-fade spec:
|
|
324
324
|
|
|
@@ -326,7 +326,7 @@ When swapping two icons (e.g., play ↔ pause, chevron-up ↔ chevron-down, book
|
|
|
326
326
|
- `scale: 0.25 → 1` (entering), `scale: 1 → 0.25` (exiting)
|
|
327
327
|
- `opacity: 0 → 1` (entering), `opacity: 1 → 0` (exiting)
|
|
328
328
|
- `filter: blur(4px) → blur(0)` (entering), `blur(0) → blur(4px)` (exiting)
|
|
329
|
-
- `transition: { type: "spring", duration: 0.3, bounce: 0 }`
|
|
329
|
+
- `transition: { type: "spring", duration: 0.3, bounce: 0 }` - **bounce MUST be 0**
|
|
330
330
|
|
|
331
331
|
**CSS fallback (no Framer):**
|
|
332
332
|
- Keep both icons in the DOM, one `position: absolute`
|
|
@@ -335,14 +335,14 @@ When swapping two icons (e.g., play ↔ pause, chevron-up ↔ chevron-down, book
|
|
|
335
335
|
|
|
336
336
|
The scale + blur combination creates a focus-snap effect that feels intentional rather than mechanical. The `bounce: 0` hard constraint exists because any bounce on a 0.25-scale origin point makes icons appear to "pop" invasively.
|
|
337
337
|
|
|
338
|
-
### Scale on Press
|
|
338
|
+
### Scale on Press - Canonical Value
|
|
339
339
|
|
|
340
340
|
The canonical scale value for press feedback is **`0.96`**.
|
|
341
341
|
|
|
342
342
|
Rules:
|
|
343
|
-
- Never use `scale(0.95)`
|
|
344
|
-
- Never use `scale(0.97)`
|
|
345
|
-
- Never use `scale(0.98)` or higher
|
|
343
|
+
- Never use `scale(0.95)` - too large, feels unresponsive
|
|
344
|
+
- Never use `scale(0.97)` - too subtle at high DPI, not perceived as feedback
|
|
345
|
+
- Never use `scale(0.98)` or higher - imperceptible
|
|
346
346
|
- `0.96` is the ONLY correct value for standard interactive elements
|
|
347
347
|
|
|
348
348
|
Tailwind: `active:scale-[0.96]`
|
|
@@ -363,13 +363,13 @@ When `AnimatePresence` wraps UI that exists in the DOM before it enters the anim
|
|
|
363
363
|
</AnimatePresence>
|
|
364
364
|
```
|
|
365
365
|
|
|
366
|
-
Without `initial={false}`, Framer will animate the FIRST render of children
|
|
366
|
+
Without `initial={false}`, Framer will animate the FIRST render of children - meaning UI that's immediately visible on page load will "fade in" unnecessarily. This creates a flash/flicker that signals poor craftsmanship.
|
|
367
367
|
|
|
368
368
|
**Rule:** Any `AnimatePresence` wrapping persistent UI should have `initial={false}`.
|
|
369
369
|
|
|
370
|
-
### will-change
|
|
370
|
+
### will-change - GPU Property Table
|
|
371
371
|
|
|
372
|
-
Only add `will-change` when you observe first-frame stutter on lower-end hardware. Do NOT add it preemptively
|
|
372
|
+
Only add `will-change` when you observe first-frame stutter on lower-end hardware. Do NOT add it preemptively - it consumes GPU memory continuously for every element that has it.
|
|
373
373
|
|
|
374
374
|
GPU-compositable properties (safe with will-change):
|
|
375
375
|
| Property | will-change value |
|
|
@@ -379,7 +379,7 @@ GPU-compositable properties (safe with will-change):
|
|
|
379
379
|
| filter (blur, brightness, contrast) | `filter` |
|
|
380
380
|
| clip-path | `clip-path` |
|
|
381
381
|
|
|
382
|
-
Never use `will-change: all` or `will-change: contents`
|
|
382
|
+
Never use `will-change: all` or `will-change: contents` - this forces the entire element and its subtree onto a new compositor layer, thrashing memory.
|
|
383
383
|
|
|
384
384
|
Remove `will-change` after the animation completes if applied dynamically:
|
|
385
385
|
```js
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
# Multi-Author Model
|
|
1
|
+
# Multi-Author Model - Team Collaboration Contract
|
|
2
2
|
|
|
3
3
|
Phase 40 contract. GDD's single-process baseline (Phase 20 lockfile + atomic STATE.md RMW) is safe for
|
|
4
4
|
one operator. This file is the contract for **multiple developers** working a design in parallel: how
|
|
5
5
|
STATE.md merges, how decisions are attributed and reviewed, how writes coordinate across processes,
|
|
6
|
-
and who is allowed to write what. Everything here is **git-native + advisory**
|
|
6
|
+
and who is allowed to write what. Everything here is **git-native + advisory** - no server, no live
|
|
7
7
|
multiplayer, no SSO.
|
|
8
8
|
|
|
9
|
-
## 1. Multi-writer STATE.md
|
|
9
|
+
## 1. Multi-writer STATE.md - git-merge-driver with per-section semantic merge
|
|
10
10
|
|
|
11
11
|
GDD does **not** ship a CRDT or OT engine. The chosen model (lowest risk, highest familiarity) is a
|
|
12
12
|
**git merge driver with per-section semantic conflict detection**. The append-mostly `<decisions>`
|
|
@@ -17,8 +17,8 @@ block is the common case: two branches each adding a new `D-NN` must merge clean
|
|
|
17
17
|
- **Equal duplicates collapse.** The same `D-NN` with identical text/status/attribution on both sides
|
|
18
18
|
is kept once.
|
|
19
19
|
- **Divergence is the only conflict.** The same `D-NN` with different text or status on the two sides
|
|
20
|
-
is a genuine conflict
|
|
21
|
-
- **Decisions are durable.** A `D-NN` removed on one side but unchanged on the other is **kept**
|
|
20
|
+
is a genuine conflict - surfaced to `agents/conflict-resolver.md`, never auto-resolved.
|
|
21
|
+
- **Decisions are durable.** A `D-NN` removed on one side but unchanged on the other is **kept** - a
|
|
22
22
|
decision is never silently deleted by a merge; removal goes through the unlock flow (§3).
|
|
23
23
|
|
|
24
24
|
A single-value section (e.g. `status`) merges with `mergeStatusScalar`: if only one side changed, take
|
|
@@ -32,13 +32,13 @@ A decision line carries an **optional** attribution suffix:
|
|
|
32
32
|
D-07: Use OKLCH design tokens (locked) [author=alice co-author=gdd-3f9a]
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
- `author`
|
|
36
|
-
- `co-author`
|
|
35
|
+
- `author` - the git user who made the decision.
|
|
36
|
+
- `co-author` - the GDD instance id (which machine/agent run produced it).
|
|
37
37
|
|
|
38
38
|
The suffix is backward-compatible: a plain `D-01: text (locked)` parses with `author`/`co-author` =
|
|
39
39
|
null. `scripts/lib/collab/attribution.cjs` parses + formats the line and groups decisions by author.
|
|
40
40
|
`agents/design-reflector.md` reads attribution to surface **per-author patterns** (who tends to lock
|
|
41
|
-
early, whose decisions get reverted). This is the SC#5 "attribution field"
|
|
41
|
+
early, whose decisions get reverted). This is the SC#5 "attribution field" - encoded in the line, not
|
|
42
42
|
a schema-breaking change to the `Decision` type.
|
|
43
43
|
|
|
44
44
|
## 3. Async review queue + decision locks
|
|
@@ -64,10 +64,10 @@ proposed → reviewing → approved → locked
|
|
|
64
64
|
mode the Phase 20 defaults apply (`maxWaitMs: 5000`). When `collab.multi_writer_enabled: true`, a
|
|
65
65
|
teammate's write may be queued, so the policy waits up to **30 s** with a **100 ms** backoff poll and a
|
|
66
66
|
2-minute stale threshold. `collab.lock_timeout_ms` overrides the wait. The gdd-state MCP write path
|
|
67
|
-
passes these options to the existing advisory lock
|
|
67
|
+
passes these options to the existing advisory lock - coordinated multi-process writes, no new lock
|
|
68
68
|
mechanism.
|
|
69
69
|
|
|
70
|
-
## 5. Sectional handoff
|
|
70
|
+
## 5. Sectional handoff - `gdd_cycle_mode`
|
|
71
71
|
|
|
72
72
|
`.design/config.json#gdd_cycle_mode` partitions a cycle by role (`scripts/lib/collab/cycle-mode.cjs`):
|
|
73
73
|
|
|
@@ -77,7 +77,7 @@ mechanism.
|
|
|
77
77
|
| `dev` | Plan, Design, Verify |
|
|
78
78
|
| `full` | all (the default / current behavior) |
|
|
79
79
|
|
|
80
|
-
`stagePermitted(mode, stage)` gates STATE writes by stage
|
|
80
|
+
`stagePermitted(mode, stage)` gates STATE writes by stage - a designer-mode cycle cannot write Plan/Design
|
|
81
81
|
state, and vice versa. This lets a designer hand a brief to a dev without either overwriting the other's
|
|
82
82
|
sections.
|
|
83
83
|
|
|
@@ -101,9 +101,9 @@ permissive (`owner` can do everything); an override can restrict, e.g. "only `@l
|
|
|
101
101
|
## 8. Cross-machine sync (opt-in)
|
|
102
102
|
|
|
103
103
|
`scripts/lib/collab/sync-backend.cjs` `resolveBackend(config)` selects the `.design/` sync backend:
|
|
104
|
-
`git` (the **default**
|
|
104
|
+
`git` (the **default** - existing behavior), or an opt-in `s3` / `git-lfs` for orgs whose git
|
|
105
105
|
push/pull cadence is too slow. Sync is **opt-in and off by default**; a live S3/LFS client is out of
|
|
106
|
-
scope for this phase
|
|
106
|
+
scope for this phase - the selector + contract ship, the backend is pluggable.
|
|
107
107
|
|
|
108
108
|
## Boundaries
|
|
109
109
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# Native Platforms
|
|
1
|
+
# Native Platforms - Token-Bridge Spec
|
|
2
2
|
|
|
3
3
|
This reference is the **token→native-code bridge**: it specifies how the canonical
|
|
4
4
|
CSS-token form produced by the Phase-23 token engine
|
|
5
|
-
(`scripts/lib/design-tokens/`) maps onto the three native theme systems
|
|
6
|
-
SwiftUI, Jetpack Compose, and Flutter
|
|
5
|
+
(`scripts/lib/design-tokens/`) maps onto the three native theme systems -
|
|
6
|
+
SwiftUI, Jetpack Compose, and Flutter - and pins down the **precision contract**
|
|
7
7
|
that defines what "token identity preserved" means for the deterministic
|
|
8
8
|
round-trip (`reference/native-platforms.md` is the authority that
|
|
9
9
|
`test/suite/native-token-bridge.test.cjs` asserts against).
|
|
@@ -13,15 +13,15 @@ have distinct jobs and must not be confused:
|
|
|
13
13
|
|
|
14
14
|
| File | Job |
|
|
15
15
|
| --- | --- |
|
|
16
|
-
| `reference/platforms.md` (Phase 19) | Interaction **conventions**
|
|
17
|
-
| `reference/native-platforms.md` (Phase 34.1, this file) | The token→theme **bridge**
|
|
16
|
+
| `reference/platforms.md` (Phase 19) | Interaction **conventions** - navigation, safe areas, gestures, native typography, haptics. *Behavioral* knowledge the executors reference when laying out a screen. |
|
|
17
|
+
| `reference/native-platforms.md` (Phase 34.1, this file) | The token→theme **bridge** - how a design token (`#3B82F6`, `16px`, `Inter`) becomes a SwiftUI `Color` / Compose `Color(0x…)` / Flutter `Color(0x…)`, plus the precision contract for the round-trip. *Structural* knowledge the emitters implement. |
|
|
18
18
|
|
|
19
19
|
Per **D-02** the bridge **extends** the Phase-23 engine with three new emitters
|
|
20
20
|
(`scripts/lib/design-tokens/{swift,compose,flutter}.cjs`) rather than forking a
|
|
21
21
|
separate native IR. There is one canonical token form (below) and one set of
|
|
22
22
|
readers; the native emitters are additional *sinks* on the same facade. Per
|
|
23
|
-
**D-10** the round-trip operates at the **token level**
|
|
24
|
-
re-extract with documented precision
|
|
23
|
+
**D-10** the round-trip operates at the **token level** - deterministic emit +
|
|
24
|
+
re-extract with documented precision - never full-view parsing and never a live
|
|
25
25
|
simulator, so the default `npm test` stays green on any machine.
|
|
26
26
|
|
|
27
27
|
---
|
|
@@ -55,7 +55,7 @@ whose values are the raw token values as strings.
|
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
Each emitter accepts either the full Phase-23 `TokenSet`
|
|
58
|
-
(`{ tokens, source?, format? }`) **or** a bare `{ tokens }` object
|
|
58
|
+
(`{ tokens, source?, format? }`) **or** a bare `{ tokens }` object - it reads
|
|
59
59
|
`tokenSet.tokens` and throws a `TypeError` only when no `.tokens` object is
|
|
60
60
|
present.
|
|
61
61
|
|
|
@@ -77,20 +77,20 @@ to decide whether a value is a color, a dimension, or a string:
|
|
|
77
77
|
A value is **always** re-sniffed regardless of prefix, so a `#…` value under a
|
|
78
78
|
non-color prefix is still emitted as a color and a `Npx` value under a non-space
|
|
79
79
|
prefix is still emitted as a dimension. The prefix is the hint; the value is the
|
|
80
|
-
authority. This keeps the bridge
|
|
80
|
+
authority. This keeps the bridge solid against arbitrary token-naming schemes.
|
|
81
81
|
|
|
82
82
|
---
|
|
83
83
|
|
|
84
84
|
## 3. SwiftUI mapping
|
|
85
85
|
|
|
86
86
|
Target: a Swift source string exposing an `enum` of static theme constants
|
|
87
|
-
(`enum GDDTheme { … }`)
|
|
87
|
+
(`enum GDDTheme { … }`) - colors as `Color`, dimensions as `CGFloat` points,
|
|
88
88
|
typography families as `String` (and an optional `Font` helper).
|
|
89
89
|
|
|
90
90
|
| Token | SwiftUI form |
|
|
91
91
|
| --- | --- |
|
|
92
92
|
| color `#RRGGBB` | `Color(red: R/255.0, green: G/255.0, blue: B/255.0, opacity: A/255.0)` from the 8-bit channels |
|
|
93
|
-
| dimension `Npx` | `CGFloat` point literal
|
|
93
|
+
| dimension `Npx` | `CGFloat` point literal - integer `N` (pt) |
|
|
94
94
|
| font-family | `String` literal (`"Inter, system-ui"`) |
|
|
95
95
|
|
|
96
96
|
Illustrative (2-line) snippet:
|
|
@@ -102,7 +102,7 @@ static let space4: CGFloat = 16
|
|
|
102
102
|
|
|
103
103
|
SwiftUI uses normalized `0.0…1.0` channel fractions; to keep the round-trip
|
|
104
104
|
**exact** the emitter writes each channel as the 8-bit numerator over `255.0`
|
|
105
|
-
(e.g. `59.0/255.0`) rather than a pre-divided decimal
|
|
105
|
+
(e.g. `59.0/255.0`) rather than a pre-divided decimal - the re-extractor reads
|
|
106
106
|
the numerator back as the integer channel, avoiding float drift. The `Color` /
|
|
107
107
|
`Font` / `ViewModifier` consumption pattern (applying the constants to views) is
|
|
108
108
|
the executor's job; this emitter produces the *constants*.
|
|
@@ -144,7 +144,7 @@ carries the typography tokens, plus a constants class
|
|
|
144
144
|
| Token | Flutter form |
|
|
145
145
|
| --- | --- |
|
|
146
146
|
| color `#RRGGBB` | `Color(0xAARRGGBB)` (alpha-first, 8 hex digits) |
|
|
147
|
-
| dimension `Npx` | logical-px **double**
|
|
147
|
+
| dimension `Npx` | logical-px **double** - `N.0` |
|
|
148
148
|
| typography family | `String` (`fontFamily: 'Inter'`) |
|
|
149
149
|
|
|
150
150
|
Illustrative (2-line) snippet:
|
|
@@ -155,7 +155,7 @@ static const space4 = 16.0;
|
|
|
155
155
|
```
|
|
156
156
|
|
|
157
157
|
Flutter measures in logical pixels and keeps the value as a `double` (`16.0`),
|
|
158
|
-
so
|
|
158
|
+
so - unlike pt/dp - Flutter dimensions are **not** rounded to integers; the
|
|
159
159
|
fractional part survives.
|
|
160
160
|
|
|
161
161
|
---
|
|
@@ -164,29 +164,29 @@ fractional part survives.
|
|
|
164
164
|
|
|
165
165
|
This section is the crux. It defines, per value category, exactly what
|
|
166
166
|
information the emit → re-extract round-trip preserves. The test asserts token
|
|
167
|
-
identity **within this precision**
|
|
167
|
+
identity **within this precision** - not bit-exact floats, not lossy
|
|
168
168
|
approximation. An emitter is correct **iff** `reextract(emit({tokens}))`
|
|
169
169
|
reproduces every token in the identity set under these rules.
|
|
170
170
|
|
|
171
|
-
### COLOR
|
|
171
|
+
### COLOR - 8-bit-per-channel, EXACT
|
|
172
172
|
|
|
173
173
|
- Accepted input forms: `#RGB`, `#RRGGBB`, `#RGBA`, `#RRGGBBAA` (case-insensitive).
|
|
174
174
|
- `#RGB` / `#RGBA` shorthand **expands** to `#RRGGBB` / `#RRGGBBAA` by
|
|
175
175
|
duplicating each nibble (`#3af` → `#33aaff`). This expansion is part of the
|
|
176
176
|
contract: the re-extractor recovers the **expanded** `#RRGGBB(AA)` form, so
|
|
177
177
|
`#3af` round-trips to `#33aaff` (canonically equal, the documented identity).
|
|
178
|
-
- Each channel is an 8-bit integer (0–255) and is preserved **exactly**
|
|
178
|
+
- Each channel is an 8-bit integer (0–255) and is preserved **exactly** - no
|
|
179
179
|
channel may be off by one. SwiftUI stores channels as `N.0/255.0` numerators;
|
|
180
180
|
Compose/Flutter store them in a `0xAARRGGBB` literal. Both forms recover the
|
|
181
181
|
identical 8-bit channels.
|
|
182
182
|
- **Alpha:** when the input has no alpha (`#RGB`/`#RRGGBB`) the emitted color is
|
|
183
|
-
**opaque**
|
|
183
|
+
**opaque** - alpha byte `0xFF` (Compose/Flutter) / `opacity: 255.0/255.0`
|
|
184
184
|
(SwiftUI). The re-extractor emits an alpha channel **only when the original
|
|
185
185
|
had one**: a 6-digit input round-trips to a 6-digit `#RRGGBB` (the implied
|
|
186
186
|
opaque alpha is dropped on the way back); an 8-digit input round-trips to the
|
|
187
187
|
8-digit `#RRGGBBAA`. This keeps `#3B82F6 → #3B82F6` an exact identity.
|
|
188
188
|
|
|
189
|
-
### DIMENSION
|
|
189
|
+
### DIMENSION - integer pt/dp, logical-px double
|
|
190
190
|
|
|
191
191
|
- Accepted input: `Npx` or a bare unit-less number (`16px`, `16`). The unit is
|
|
192
192
|
normalised to `px` on the canonical side.
|
|
@@ -200,7 +200,7 @@ reproduces every token in the identity set under these rules.
|
|
|
200
200
|
- The re-extractor always recovers the canonical `Npx` string form, so the
|
|
201
201
|
emit→re-extract identity for an integer dimension is `"16px" === "16px"`.
|
|
202
202
|
|
|
203
|
-
### `rem` / `em`
|
|
203
|
+
### `rem` / `em` - passed through verbatim (non-mappable)
|
|
204
204
|
|
|
205
205
|
`rem`/`em` values depend on a root/element font-size that the token map does not
|
|
206
206
|
carry, so they are **not** converted. They are treated as **non-mappable**
|
|
@@ -208,18 +208,18 @@ carry, so they are **not** converted. They are treated as **non-mappable**
|
|
|
208
208
|
identity set. (A future plan may add an explicit base-size option; until then,
|
|
209
209
|
verbatim pass-through is the stated, deterministic behavior.)
|
|
210
210
|
|
|
211
|
-
### TYPOGRAPHY / NAMED VALUES
|
|
211
|
+
### TYPOGRAPHY / NAMED VALUES - string pass-through
|
|
212
212
|
|
|
213
213
|
`font-family`, `font-weight`, named sizes, and any other string token are
|
|
214
214
|
emitted **verbatim** as a string literal and recovered **string-equal**
|
|
215
215
|
(`"Inter, system-ui" → "Inter, system-ui"`). No normalisation, no quoting
|
|
216
216
|
changes that alter the recovered string.
|
|
217
217
|
|
|
218
|
-
### NON-MAPPABLE
|
|
218
|
+
### NON-MAPPABLE - verbatim, EXCLUDED from the identity set
|
|
219
219
|
|
|
220
|
-
Values the emitter cannot represent as a native primitive
|
|
220
|
+
Values the emitter cannot represent as a native primitive - CSS `var(--x)`
|
|
221
221
|
references, `calc(…)` expressions, gradients (`linear-gradient(…)`), and `rem`/
|
|
222
|
-
`em` dimensions
|
|
222
|
+
`em` dimensions - are **passed through verbatim** into a raw-string slot
|
|
223
223
|
(a trailing comment such as `// non-mappable: <name> = <value>` or the language
|
|
224
224
|
equivalent) so no information is lost, and are **explicitly excluded** from the
|
|
225
225
|
round-trip identity assertion. The contract documents them as
|
|
@@ -256,18 +256,18 @@ regression baseline.
|
|
|
256
256
|
This reference is registered in
|
|
257
257
|
[`reference/registry.json`](./registry.json) as the `native-platforms` entry
|
|
258
258
|
(type `heuristic`, phase `34.1`) so the registry round-trip test
|
|
259
|
-
(`test/suite/reference-registry.test.cjs`) stays green
|
|
259
|
+
(`test/suite/reference-registry.test.cjs`) stays green - every `reference/*.md`
|
|
260
260
|
must be registered and resolve (D-05, the 33.5-01 lesson).
|
|
261
261
|
|
|
262
262
|
---
|
|
263
263
|
|
|
264
264
|
## 9. Cross-references
|
|
265
265
|
|
|
266
|
-
- [`reference/platforms.md`](./platforms.md)
|
|
266
|
+
- [`reference/platforms.md`](./platforms.md) - the interaction-conventions
|
|
267
267
|
sibling (navigation, safe areas, gestures, native typography). Executors read
|
|
268
268
|
**both**: this file for the token→theme bridge, that file for layout/behavior.
|
|
269
|
-
- `scripts/lib/design-tokens/`
|
|
269
|
+
- `scripts/lib/design-tokens/` - the Phase-23 token engine this bridge extends
|
|
270
270
|
(`index.cjs` facade + `css-vars` / `js-const` / `tailwind` / `figma` readers +
|
|
271
271
|
the new `swift` / `compose` / `flutter` emitters).
|
|
272
|
-
- `test/fixtures/mapper-outputs/tokens.json`
|
|
272
|
+
- `test/fixtures/mapper-outputs/tokens.json` - the canonical token fixture the
|
|
273
273
|
round-trip test derives its map from.
|