@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,24 +1,24 @@
|
|
|
1
1
|
# Greenfield Design-System Bootstrap Rubric
|
|
2
2
|
|
|
3
|
-
Emission rules for `/gdd:bootstrap-ds` + `agents/ds-generator.md`
|
|
3
|
+
Emission rules for `/gdd:bootstrap-ds` + `agents/ds-generator.md` - how to turn a brand input (a primary color + optional secondary + tone tags + target framework) into a coherent token system, **without inventing a brand**. The deterministic math lives in `scripts/lib/ds/token-scale.cjs`; the color-theory grounding lives in `reference/color-theory.md`. This file is the rulebook the generator obeys.
|
|
4
4
|
|
|
5
|
-
GDD does not author a brand identity (logomarks, voice)
|
|
5
|
+
GDD does not author a brand identity (logomarks, voice) - it emits a **starter token system + a few proof components** a greenfield project can build on.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
## Color
|
|
10
10
|
|
|
11
|
-
- **Primary → 9 tints/shades.** Convert the brand primary to OKLCH `{l, c, h}`, then call `oklchScale(primary)` → 9 stops (`100`…`900`) emitted as native CSS `oklch()`. Stop `500` is the primary exactly; lighter stops interpolate L toward white with damped chroma; darker stops toward black. Native `oklch()`
|
|
11
|
+
- **Primary → 9 tints/shades.** Convert the brand primary to OKLCH `{l, c, h}`, then call `oklchScale(primary)` → 9 stops (`100`…`900`) emitted as native CSS `oklch()`. Stop `500` is the primary exactly; lighter stops interpolate L toward white with damped chroma; darker stops toward black. Native `oklch()` - **no hex conversion, no color library**.
|
|
12
12
|
- **Never auto-generate more than 2 brand colors.** Primary is always emitted. A **secondary** scale is emitted **only if the user supplies one**. Never invent a third brand hue.
|
|
13
|
-
- **Neutrals**
|
|
14
|
-
- **Semantic colors**
|
|
15
|
-
- **Contrast**
|
|
13
|
+
- **Neutrals** - a low-chroma gray ramp (chroma ≤ 0.02) sharing the primary's hue for a subtle tint, or pure neutral (`c = 0`). 9 stops via `oklchScale({ l, c: 0.012, h: primary.h })`.
|
|
14
|
+
- **Semantic colors** - success / warning / danger / info derived at fixed hues (≈145 / 85 / 25 / 255) at the brand's mid-lightness + chroma, so they sit in the same family. These are functional, not "brand" colors (they do not count against the ≤2 rule).
|
|
15
|
+
- **Contrast** - every text-on-surface pairing must clear WCAG AA (see `reference/color-theory.md`); the generator checks the chosen `500`/`700` against white/`50`.
|
|
16
16
|
|
|
17
17
|
## Typography
|
|
18
18
|
|
|
19
|
-
- **Modular scale** via `typeScale(baseRem, ratio, steps)`. Base `1rem` (16px). **Ratio ∈ {1.2 (minor third), 1.25 (major third), 1.333 (perfect fourth)}**
|
|
19
|
+
- **Modular scale** via `typeScale(baseRem, ratio, steps)`. Base `1rem` (16px). **Ratio ∈ {1.2 (minor third), 1.25 (major third), 1.333 (perfect fourth)}** - pick by tone (calm → 1.2, default → 1.25, editorial/bold → 1.333).
|
|
20
20
|
- Emit named steps (`xs`…`5xl`) from the scale; line-height pairs (tight 1.2 for headings, 1.5 for body).
|
|
21
|
-
- Font family is a **slot**, not a choice
|
|
21
|
+
- Font family is a **slot**, not a choice - emit a system-font stack placeholder + a `--font-sans` / `--font-mono` variable the user swaps. GDD does not pick a typeface (brand territory).
|
|
22
22
|
|
|
23
23
|
## Spacing
|
|
24
24
|
|
|
@@ -27,9 +27,9 @@ GDD does not author a brand identity (logomarks, voice) — it emits a **starter
|
|
|
27
27
|
## Radius + Motion
|
|
28
28
|
|
|
29
29
|
- **Radius** via `radiusScale(basePx)` → `sm/md/lg/xl/full` (`full = 9999` pill).
|
|
30
|
-
- **Motion defaults**
|
|
30
|
+
- **Motion defaults** - durations `fast 150ms / base 250ms / slow 400ms`; easing `ease-out` for enters, a standard curve for moves; **always** respect `prefers-reduced-motion` (emit the media-query guard).
|
|
31
31
|
|
|
32
|
-
## The 3 variants (D-02
|
|
32
|
+
## The 3 variants (D-02 - user picks one)
|
|
33
33
|
|
|
34
34
|
The generator emits three coherent variants; the user picks ONE before first-component scaffolding:
|
|
35
35
|
|
|
@@ -42,10 +42,10 @@ The generator emits three coherent variants; the user picks ONE before first-com
|
|
|
42
42
|
## Emission format
|
|
43
43
|
|
|
44
44
|
- Emit **CSS custom properties** (`:root { --color-primary-500: oklch(...); --space-4: 16px; ... }`) as the canonical artifact, plus a target-framework mapping:
|
|
45
|
-
- **web (default)**
|
|
46
|
-
- **native**
|
|
45
|
+
- **web (default)** - a Tailwind `theme.extend` block (or shadcn CSS variables) + the `:root` tokens.
|
|
46
|
+
- **native** - route the token set through `reference/native-platforms.md` (Phase 34) for SwiftUI / Compose / Flutter theme objects.
|
|
47
47
|
- Tokens are **named by role, not value** (`--color-primary-500`, not `--blue-500`) so a rebrand is a one-line hue change.
|
|
48
48
|
|
|
49
49
|
## First-component scaffolding (proof artifact)
|
|
50
50
|
|
|
51
|
-
After the user picks a variant, emit **button + input + card** in the detected target framework, consuming only the emitted tokens
|
|
51
|
+
After the user picks a variant, emit **button + input + card** in the detected target framework, consuming only the emitted tokens - a proof the system is coherent, not a full component library (that is out of scope).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# Email Design
|
|
1
|
+
# Email Design - Constraint Catalogue
|
|
2
2
|
|
|
3
3
|
This reference is the **email-constraint catalogue**: the hard email-client rules an
|
|
4
|
-
email template MUST honor. Email is a *constrained* HTML/CSS surface
|
|
4
|
+
email template MUST honor. Email is a *constrained* HTML/CSS surface - the modern
|
|
5
5
|
HTML/CSS the web executor emits (flexbox, grid, `<style>` sheets, `position`) is
|
|
6
6
|
dropped or mis-rendered by most email clients. This file is the **authority** that the
|
|
7
7
|
email-executor (Phase 34.2-02) generates against and the design-verifier's email branch
|
|
@@ -14,8 +14,8 @@ distinct jobs and must not be confused:
|
|
|
14
14
|
|
|
15
15
|
| File | Job |
|
|
16
16
|
| --- | --- |
|
|
17
|
-
| `reference/platforms.md` (Phase 19) | Interaction **conventions**
|
|
18
|
-
| `reference/email-design.md` (Phase 34.2, this file) | The email **constraint catalogue**
|
|
17
|
+
| `reference/platforms.md` (Phase 19) | Interaction **conventions** - navigation, safe areas, gestures, native typography, haptics. *Behavioral* knowledge for native/web screens. |
|
|
18
|
+
| `reference/email-design.md` (Phase 34.2, this file) | The email **constraint catalogue** - table-based layout, inline styles, MSO conditional comments, dark-mode `color-scheme`, ~600px max-width, image/alt rules, and top-20-client quirks. *Structural* knowledge an email template implements. |
|
|
19
19
|
|
|
20
20
|
Per **D-02** there is **no `mjml` runtime dependency**: MJML source is the agent's
|
|
21
21
|
canonical artifact and the HTML is derived by the agent, not a build step. Per **D-03**
|
|
@@ -44,7 +44,7 @@ kept to 2–3 lines. The implementation is `validate-email-html.cjs`.
|
|
|
44
44
|
|
|
45
45
|
---
|
|
46
46
|
|
|
47
|
-
## 2. Layout
|
|
47
|
+
## 2. Layout - tables, not flexbox/grid/position
|
|
48
48
|
|
|
49
49
|
Email layout uses nested `role="presentation"` **tables**, never the modern CSS box
|
|
50
50
|
primitives. `display:flex`, `display:grid`, and `position:absolute|fixed|sticky` are
|
|
@@ -53,11 +53,11 @@ collapsing a layout to a single column or off-screen elements.
|
|
|
53
53
|
|
|
54
54
|
| Rule-id | Constraint |
|
|
55
55
|
| --- | --- |
|
|
56
|
-
| **EM-LAYOUT-01** | Layout is built from `role="presentation"` tables. The forbidden modern primitives
|
|
56
|
+
| **EM-LAYOUT-01** | Layout is built from `role="presentation"` tables. The forbidden modern primitives - `display:flex`, `display:grid`, `position:absolute`, `position:fixed` (and `position:sticky`) - MUST NOT appear in any `style`. *(Statically checkable: their presence is flagged.)* |
|
|
57
57
|
| EM-LAYOUT-02 | Body content sits in a fixed-/max-width container of ~**600px** (the safe width across the desktop preview pane and most mobile clients). Wider tables clip in Outlook and force horizontal scroll on mobile. |
|
|
58
58
|
| EM-LAYOUT-03 | Use `cellpadding="0" cellspacing="0" border="0"` on layout tables and prefer cell `padding` over margins (margins are inconsistently honored). |
|
|
59
59
|
| EM-LAYOUT-04 | Single primary column on mobile; multi-column desktop layouts degrade to stacked rows. Do not rely on `float` for columns (use side-by-side `<td>`s or `align`). |
|
|
60
|
-
| EM-LAYOUT-05 | Set explicit `width` on tables/cells; never assume an intrinsic content width. Outlook ignores CSS `max-width` on many elements
|
|
60
|
+
| EM-LAYOUT-05 | Set explicit `width` on tables/cells; never assume an intrinsic content width. Outlook ignores CSS `max-width` on many elements - pair it with a `<!--[if mso]>` ghost table (see §4). |
|
|
61
61
|
|
|
62
62
|
```html
|
|
63
63
|
<table role="presentation" width="600" cellpadding="0" cellspacing="0" border="0"
|
|
@@ -114,7 +114,7 @@ overrides.
|
|
|
114
114
|
|
|
115
115
|
| Rule-id | Constraint |
|
|
116
116
|
| --- | --- |
|
|
117
|
-
| **EM-DARK-01** | Declare a `color-scheme` signal: a `<meta name="color-scheme" content="light dark">` and/or a `color-scheme: light dark;` CSS declaration and/or a `@media (prefers-color-scheme: dark)` block. At least one MUST be present. *(Statically checkable: total absence of any color-scheme signal is flagged. A `<meta name="color-scheme">` alone satisfies it
|
|
117
|
+
| **EM-DARK-01** | Declare a `color-scheme` signal: a `<meta name="color-scheme" content="light dark">` and/or a `color-scheme: light dark;` CSS declaration and/or a `@media (prefers-color-scheme: dark)` block. At least one MUST be present. *(Statically checkable: total absence of any color-scheme signal is flagged. A `<meta name="color-scheme">` alone satisfies it - decoupled from any `<style>` block.)* |
|
|
118
118
|
| EM-DARK-02 | Pair `color-scheme` with `supported-color-schemes` (meta) for Apple Mail / Outlook. |
|
|
119
119
|
| EM-DARK-03 | Beware forced color inversion: set explicit `background-color` AND `color` on text containers so an inverting client cannot produce unreadable low-contrast pairs. |
|
|
120
120
|
| EM-DARK-04 | Provide dark-mode-friendly logos (transparent PNG or a `prefers-color-scheme` image swap) so a dark background does not hide a dark logo. |
|
|
@@ -124,7 +124,7 @@ overrides.
|
|
|
124
124
|
## 6. Images & accessibility
|
|
125
125
|
|
|
126
126
|
Images are often blocked by default and must degrade gracefully; accessibility rules
|
|
127
|
-
prevent broken layouts and unreadable content. *(Guidance
|
|
127
|
+
prevent broken layouts and unreadable content. *(Guidance - not all statically
|
|
128
128
|
asserted; see §8.)*
|
|
129
129
|
|
|
130
130
|
| Rule-id | Constraint |
|
|
@@ -139,19 +139,19 @@ asserted; see §8.)*
|
|
|
139
139
|
|
|
140
140
|
## 7. Top-20 client quirks
|
|
141
141
|
|
|
142
|
-
The top-20-by-market-share email clients and their headline quirks. *(Catalogue
|
|
142
|
+
The top-20-by-market-share email clients and their headline quirks. *(Catalogue -
|
|
143
143
|
most are render-tested via the optional Litmus / Email-on-Acid connection (34.2-02),
|
|
144
144
|
NOT statically checkable; see §8.)*
|
|
145
145
|
|
|
146
146
|
| Rule-id | Client | Headline quirk |
|
|
147
147
|
| --- | --- | --- |
|
|
148
|
-
| EM-CLIENT-01 | Apple Mail (iOS) | Most standards-compliant; honors `<style>` + media queries; auto-scales text
|
|
149
|
-
| EM-CLIENT-02 | Apple Mail (macOS) | WebKit-based,
|
|
148
|
+
| EM-CLIENT-01 | Apple Mail (iOS) | Most standards-compliant; honors `<style>` + media queries; auto-scales text - set `meta viewport`. |
|
|
149
|
+
| EM-CLIENT-02 | Apple Mail (macOS) | WebKit-based, solid; respects `prefers-color-scheme`; watch auto-link of dates/addresses. |
|
|
150
150
|
| EM-CLIENT-03 | Gmail (web) | **Strips `<head>` styles** beyond a limited `<style>`; clips messages over ~102KB ("[Message clipped]"); requires inline styles. |
|
|
151
151
|
| EM-CLIENT-04 | Gmail (mobile app, default account) | Supports a `<style>` block + media queries; same ~102KB clip; no `:hover` reliability. |
|
|
152
|
-
| EM-CLIENT-05 | Gmail (mobile, non-default / IMAP "GANGA") | **Strips `<style>` entirely**
|
|
152
|
+
| EM-CLIENT-05 | Gmail (mobile, non-default / IMAP "GANGA") | **Strips `<style>` entirely** - only inline styles survive; the strictest Gmail mode. |
|
|
153
153
|
| EM-CLIENT-06 | Outlook 2016–2021 (Windows) | **Word engine**: no flexbox/grid/`position`, ignores `max-width`/`border-radius`/CSS `background-image`; needs ghost tables + VML + `mso-line-height-rule:exactly`. |
|
|
154
|
-
| EM-CLIENT-07 | Outlook (Microsoft 365, Windows) | Word engine like 2016/2019; DPI scaling bugs
|
|
154
|
+
| EM-CLIENT-07 | Outlook (Microsoft 365, Windows) | Word engine like 2016/2019; DPI scaling bugs - set explicit image `width`/`height`. |
|
|
155
155
|
| EM-CLIENT-08 | Outlook.com (web) | Different (better) engine than desktop; **aggressive dark-mode color inversion**; rewrites some colors. |
|
|
156
156
|
| EM-CLIENT-09 | Outlook (macOS) | WebKit-based (unlike Windows); far more capable; still test buttons/spacing. |
|
|
157
157
|
| EM-CLIENT-10 | Outlook (mobile, iOS/Android) | Largely fine; respects media queries; watch link color overrides. |
|
|
@@ -173,15 +173,15 @@ NOT statically checkable; see §8.)*
|
|
|
173
173
|
This table is the **contract** the validator's `rule` ids map to. The four rule-ids
|
|
174
174
|
below are the deterministic subset that `scripts/lib/email/validate-email-html.cjs`
|
|
175
175
|
asserts via regex/string analysis of the supplied HTML string. Every other rule-id in
|
|
176
|
-
this catalogue is **render-tested guidance**
|
|
176
|
+
this catalogue is **render-tested guidance** - verified by the optional Litmus /
|
|
177
177
|
Email-on-Acid render-test connection (34.2-02), never asserted by the static validator.
|
|
178
178
|
|
|
179
179
|
| Rule-id | Check | Statically checked by the validator? | How verified otherwise |
|
|
180
180
|
| --- | --- | --- | --- |
|
|
181
|
-
| **EM-LAYOUT-01** | No `display:flex` / `display:grid` / `position:absolute\|fixed` in any `style` | **YES**
|
|
182
|
-
| **EM-STYLE-01** | No `<style>` block as the PRIMARY styling mechanism (non-`@media` rules / large sheet); inline styling expected | **YES**
|
|
183
|
-
| **EM-MSO-01** | An MSO conditional comment (`<!--[if mso]>` / `<!--[if !mso]>`) is present in a full-email document | **YES**
|
|
184
|
-
| **EM-DARK-01** | A `color-scheme` signal is present (meta `color-scheme` and/or CSS `color-scheme` and/or `prefers-color-scheme`) | **YES**
|
|
181
|
+
| **EM-LAYOUT-01** | No `display:flex` / `display:grid` / `position:absolute\|fixed` in any `style` | **YES** - presence flagged | - |
|
|
182
|
+
| **EM-STYLE-01** | No `<style>` block as the PRIMARY styling mechanism (non-`@media` rules / large sheet); inline styling expected | **YES** - a non-trivial `<style>` block flagged; a small `@media`-only block tolerated | - |
|
|
183
|
+
| **EM-MSO-01** | An MSO conditional comment (`<!--[if mso]>` / `<!--[if !mso]>`) is present in a full-email document | **YES** - absence flagged | - |
|
|
184
|
+
| **EM-DARK-01** | A `color-scheme` signal is present (meta `color-scheme` and/or CSS `color-scheme` and/or `prefers-color-scheme`) | **YES** - total absence flagged (a `<meta name="color-scheme">` alone satisfies it) | - |
|
|
185
185
|
| EM-LAYOUT-02..05 | ~600px width, cellpadding, single-column, explicit widths | No | Render test (Litmus) |
|
|
186
186
|
| EM-STYLE-02..04 | Longhand props, no external CSS, tolerated `@media` | No | Render test |
|
|
187
187
|
| EM-MSO-02..04 | Ghost tables, VML, DPI/namespace head | No | Render test (Outlook) |
|
|
@@ -207,13 +207,13 @@ Notes on the four statically-checked rules:
|
|
|
207
207
|
|
|
208
208
|
## 9. Cross-references
|
|
209
209
|
|
|
210
|
-
- [`reference/platforms.md`](./platforms.md)
|
|
210
|
+
- [`reference/platforms.md`](./platforms.md) - the interaction-conventions sibling
|
|
211
211
|
(navigation, safe areas, gestures). The email-executor reads **this** file for the
|
|
212
212
|
email constraints, that file for general platform behavior.
|
|
213
213
|
- [`scripts/lib/email/validate-email-html.cjs`](../scripts/lib/email/validate-email-html.cjs)
|
|
214
|
-
|
|
214
|
+
- the deterministic static validator that asserts the §8 subset; its `rule` ids are
|
|
215
215
|
the constraint-ids defined here.
|
|
216
|
-
- [`reference/registry.json`](./registry.json)
|
|
216
|
+
- [`reference/registry.json`](./registry.json) - this catalogue is registered as the
|
|
217
217
|
`email-design` entry (type `heuristic`, phase `34.2`) so the registry round-trip test
|
|
218
218
|
(`test/suite/reference-registry.test.cjs`) stays green (D-05, the 33.5-01 / 34.1-01
|
|
219
219
|
lesson).
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# Emotional Design
|
|
1
|
+
# Emotional Design - Norman's Three Levels
|
|
2
2
|
|
|
3
3
|
Source: Don Norman, *Emotional Design: Why We Love (or Hate) Everyday Things* (2004). See also: `jnd.org`.
|
|
4
4
|
|
|
5
|
-
Use this file as a **cross-cutting scoring lens** in design audits and reflections. The three levels apply simultaneously to every design decision
|
|
5
|
+
Use this file as a **cross-cutting scoring lens** in design audits and reflections. The three levels apply simultaneously to every design decision - they are not sequential stages.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -12,7 +12,7 @@ Use this file as a **cross-cutting scoring lens** in design audits and reflectio
|
|
|
12
12
|
|
|
13
13
|
> The immediate, pre-cognitive, automatic reaction to sensory input.
|
|
14
14
|
|
|
15
|
-
The visceral level operates before the user thinks. It is driven by appearance, proportion, colour, texture
|
|
15
|
+
The visceral level operates before the user thinks. It is driven by appearance, proportion, colour, texture - the aesthetic surface. A user who says "I don't know why, but this feels cheap" is responding at the visceral level.
|
|
16
16
|
|
|
17
17
|
**What it governs:**
|
|
18
18
|
- First impression within 50ms of page load (aesthetic-usability effect)
|
|
@@ -39,14 +39,14 @@ The visceral level operates before the user thinks. It is driven by appearance,
|
|
|
39
39
|
|
|
40
40
|
### Behavioral Level
|
|
41
41
|
|
|
42
|
-
> The experience of use
|
|
42
|
+
> The experience of use - whether actions feel controllable, predictable, and rewarding.
|
|
43
43
|
|
|
44
44
|
The behavioral level is what UX heuristics primarily address. It covers usability, feedback, error recovery, and responsiveness. A user who says "This is frustrating to use" is responding at the behavioral level.
|
|
45
45
|
|
|
46
46
|
**What it governs:**
|
|
47
47
|
- Interaction feedback (loading states, error messages, success confirmations)
|
|
48
48
|
- Control and reversibility (undo, cancel, back navigation)
|
|
49
|
-
- Response latency
|
|
49
|
+
- Response latency - the Doherty Threshold: feedback within 400ms
|
|
50
50
|
- Error prevention and recovery
|
|
51
51
|
- Learnability and consistency across screens
|
|
52
52
|
|
|
@@ -69,14 +69,14 @@ The behavioral level is what UX heuristics primarily address. It covers usabilit
|
|
|
69
69
|
|
|
70
70
|
### Reflective Level
|
|
71
71
|
|
|
72
|
-
> The conscious, post-use evaluation
|
|
72
|
+
> The conscious, post-use evaluation - meaning, narrative, and self-image.
|
|
73
73
|
|
|
74
74
|
The reflective level is where brand identity, storytelling, and pride of ownership live. A user who says "I love showing this tool to colleagues" is responding at the reflective level. This level takes the longest to build and the longest to repair when damaged.
|
|
75
75
|
|
|
76
76
|
**What it governs:**
|
|
77
77
|
- Whether the product aligns with the user's self-image
|
|
78
78
|
- Brand narrative consistency across all touchpoints
|
|
79
|
-
- Delight and surprise moments
|
|
79
|
+
- Delight and surprise moments - not gimmicks; earned moments
|
|
80
80
|
- The **Peak** moment in the Peak-End Rule: the highest positive moment in the flow
|
|
81
81
|
- Long-term loyalty and word-of-mouth referral
|
|
82
82
|
|
|
@@ -103,14 +103,14 @@ Apply this lens as a **secondary overlay** after scoring the primary audit pilla
|
|
|
103
103
|
|
|
104
104
|
1. Identify 1–2 evidence items from the primary audit (e.g., Pillar 3 Color → Visceral Level)
|
|
105
105
|
2. Note conflicts between levels (e.g., Behavioral score 4 but Visceral score 1 = technically functional but aesthetically repellent)
|
|
106
|
-
3. Flag the weakest level as the highest-
|
|
106
|
+
3. Flag the weakest level as the highest-impact improvement opportunity
|
|
107
107
|
|
|
108
108
|
**Common cross-level conflict patterns:**
|
|
109
109
|
|
|
110
110
|
| Conflict pattern | Diagnosis | Remedy |
|
|
111
111
|
|---|---|---|
|
|
112
112
|
| High behavioral, low visceral | Technically usable but aesthetically generic | Audit against `style-vocabulary.md`; commit to a stronger aesthetic type |
|
|
113
|
-
| High visceral, low behavioral | Beautiful but broken | Fix H-01, H-09 violations first
|
|
113
|
+
| High visceral, low behavioral | Beautiful but broken | Fix H-01, H-09 violations first - UX before aesthetics |
|
|
114
114
|
| High visceral + behavioral, low reflective | Polished but forgettable | Design a peak moment; review `brand-voice.md` emotional arc |
|
|
115
115
|
|
|
116
116
|
---
|
|
@@ -119,6 +119,6 @@ Apply this lens as a **secondary overlay** after scoring the primary audit pilla
|
|
|
119
119
|
|
|
120
120
|
**design-auditor:** After pillar scoring, apply emotional-design lens as a cross-cutting overlay. Add `## Emotional Design Overlay` section to `DESIGN-AUDIT.md` with scores for all three levels and any cross-level conflict notes.
|
|
121
121
|
|
|
122
|
-
**design-reflector:** In Section 1 (What Surprised Us), flag if visceral vs behavioral scores diverge by ≥2 points
|
|
122
|
+
**design-reflector:** In Section 1 (What Surprised Us), flag if visceral vs behavioral scores diverge by ≥2 points - this is a leading indicator of the "beautiful but broken" pattern.
|
|
123
123
|
|
|
124
124
|
**design-discussant:** In `--spec` mode, include one reflective-level confidence-scored question: "What story does this product help the user tell about themselves?"
|
|
@@ -10,7 +10,7 @@ On `status=429`, consult `scripts/lib/rate-guard.cjs` → `blockUntilReady(provi
|
|
|
10
10
|
|
|
11
11
|
On network-transient (5xx, ECONNRESET), use jittered backoff (`scripts/lib/jittered-backoff.cjs`); max 3 retries.
|
|
12
12
|
|
|
13
|
-
On auth-error, surface to user
|
|
13
|
+
On auth-error, surface to user - do not retry.
|
|
14
14
|
|
|
15
15
|
## Recovery-action table
|
|
16
16
|
|
|
@@ -18,14 +18,14 @@ The `FailoverReason` enum in `scripts/lib/error-classifier.cjs` has eight values
|
|
|
18
18
|
|
|
19
19
|
| FailoverReason | Retryable | Action |
|
|
20
20
|
| ------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
21
|
-
| `rate_limited` | yes | Call `rate-guard.ingestHeaders(provider, response.headers)` to record the rate-limit signal, then `rate-guard.blockUntilReady(provider)` before retrying. The blocker waits until `resetAt` on disk
|
|
22
|
-
| `context_overflow` | yes | Compress context
|
|
23
|
-
| `auth_error` | no | Surface the error to the user with actionable text: which credential, which provider, and the renewal path (OAuth re-auth URL, API-key environment variable, etc.). Do not retry automatically
|
|
24
|
-
| `network_transient` | yes | Retry with `scripts/lib/jittered-backoff.cjs`
|
|
21
|
+
| `rate_limited` | yes | Call `rate-guard.ingestHeaders(provider, response.headers)` to record the rate-limit signal, then `rate-guard.blockUntilReady(provider)` before retrying. The blocker waits until `resetAt` on disk - synchronized siblings (watch-authorities + update-check) therefore share the backoff boundary. After the block returns, retry with jittered backoff at attempt 0. |
|
|
22
|
+
| `context_overflow` | yes | Compress context - drop the oldest non-system turns (or the oldest attachments) targeting roughly 50 % token reduction. Retry **once** with the compressed payload. If the retry also raises `context_overflow`, escalate to the user as an unrecoverable block - further compression destroys information. |
|
|
23
|
+
| `auth_error` | no | Surface the error to the user with actionable text: which credential, which provider, and the renewal path (OAuth re-auth URL, API-key environment variable, etc.). Do not retry automatically - a loop would just multiply the failure. |
|
|
24
|
+
| `network_transient` | yes | Retry with `scripts/lib/jittered-backoff.cjs` - `await sleep(attempt)` inside a bounded loop. Cap at 3 attempts before giving up. When retries exhaust, reclassify as `network_permanent` and surface to the user. |
|
|
25
25
|
| `network_permanent` | no | Surface to user. The endpoint is wrong, DNS is broken, or the resource was removed. A retry without operator action will just re-fail. |
|
|
26
26
|
| `tool_not_found` | no | Surface to user. Either the tool name drifted (common for MCP servers whose prefixes change across sessions) or the MCP is not registered. Reprobe via the connection's probe sequence before retrying anything. |
|
|
27
|
-
| `validation` | no | Surface the validation detail to the caller. Do not retry the same input
|
|
28
|
-
| `unknown` | no | Surface the raw error to the user. Do not retry
|
|
27
|
+
| `validation` | no | Surface the validation detail to the caller. Do not retry the same input - 4xx is the server saying "your payload is wrong". Fixing the payload is caller work. |
|
|
28
|
+
| `unknown` | no | Surface the raw error to the user. Do not retry - we can't tell whether it's safe. Add a telemetry row so we can tighten the classifier over time. |
|
|
29
29
|
|
|
30
30
|
## Integration points
|
|
31
31
|
|
|
@@ -34,7 +34,7 @@ The `FailoverReason` enum in `scripts/lib/error-classifier.cjs` has eight values
|
|
|
34
34
|
| `hooks/budget-enforcer.ts` | pre-spawn rate-guard check (Plan 20-14) | If upstream state already shows `rate_limited`, emit `decision: 'rate-limited'` and short-circuit before any spawn. |
|
|
35
35
|
| Figma MCP probe | live `get_metadata` call errors | `network_transient` → jittered-backoff retry. `auth_error` → STOP with a reauth note. `rate_limited` → block then retry. |
|
|
36
36
|
| Watch-authorities fetcher | per-feed HTTP fetch | Same policy as Figma probe; `validation` also possible on ETag stalemate (304). |
|
|
37
|
-
| Update-check HTTP curl | GitHub `releases/latest` fetch | Silent failure by D-04 of Plan 13.3
|
|
37
|
+
| Update-check HTTP curl | GitHub `releases/latest` fetch | Silent failure by D-04 of Plan 13.3 - classify but don't surface; log and exit 0. |
|
|
38
38
|
| MCP transport | tool-call errors (gdd-state, figma, 21st-dev)| Map `tool_not_found` to a probe-reissue; map `auth_error` to STOP; retry transient classes via the caller's own loop. |
|
|
39
39
|
|
|
40
40
|
## Fix-loop iteration interaction
|
|
@@ -43,9 +43,9 @@ Retries consume iteration budget when paired with the Layer-B cache:
|
|
|
43
43
|
|
|
44
44
|
1. On cache hit, `iteration-budget.refund(1)` preserves the iteration that would otherwise have been spent.
|
|
45
45
|
2. On each actual retry that does real work (no cache hit), the caller `iteration-budget.consume(1)` before the spawn.
|
|
46
|
-
3. When the budget's `remaining === 0`, further retries throw `IterationBudgetExhaustedError` and the caller must surface to user
|
|
46
|
+
3. When the budget's `remaining === 0`, further retries throw `IterationBudgetExhaustedError` and the caller must surface to user - a retry cycle has become pathological.
|
|
47
47
|
|
|
48
|
-
This protects the "infinite fix loop" case
|
|
48
|
+
This protects the "infinite fix loop" case - a blocker that regenerates after every fix - from burning unbounded context.
|
|
49
49
|
|
|
50
50
|
## Telemetry
|
|
51
51
|
|
|
@@ -55,4 +55,4 @@ Every classification result that leads to a retry or a surfaced error should app
|
|
|
55
55
|
{ "type": "error.classified", "timestamp": "…", "sessionId": "…", "payload": { "reason": "rate_limited", "retryable": true, "caller": "figma-probe" } }
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
The event subtype is defined in `scripts/lib/event-stream/types.ts`. Consumers (`gdd-reflector`, dashboard) aggregate by `reason` to detect classifier drift
|
|
58
|
+
The event subtype is defined in `scripts/lib/event-stream/types.ts`. Consumers (`gdd-reflector`, dashboard) aggregate by `reason` to detect classifier drift - if `unknown` spikes, the classifier needs tightening.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Export Formats
|
|
1
|
+
# Export Formats - the `/gdd:export` contract
|
|
2
2
|
|
|
3
3
|
How `/gdd:export <cycle> --format html|pdf|notion [--pseudonymize] [--pr]` turns a completed cycle's in-repo design output into a stakeholder-shareable artifact. Dep-free: the HTML/PDF assembler is pure (`scripts/lib/export/build-html.cjs`); Notion is MCP-based; no `paged`/`puppeteer`/`pdfkit`/markdown-lib runtime.
|
|
4
4
|
|
|
@@ -10,21 +10,21 @@ In cycle order: `EXPERIENCE.md` (Phase 19.5 cross-cycle memory) · `.design/DESI
|
|
|
10
10
|
|
|
11
11
|
## Formats
|
|
12
12
|
|
|
13
|
-
- **`html`** (default)
|
|
14
|
-
- **`pdf`**
|
|
15
|
-
- **`notion`**
|
|
13
|
+
- **`html`** (default) - `buildHtml({ title, subtitle, sections, images })` → a **single self-contained HTML** file: inline `<style>`, base64-embedded images, **zero external references** (safe to email / drop in Drive). Written to `.design/export/<cycle>.html`.
|
|
14
|
+
- **`pdf`** - the same `buildHtml({ ..., print: true })` (adds a Paged.js-compatible `@page` print stylesheet). Written to `.design/export/<cycle>.print.html`; **the user renders it** via Paged.js / headless-Chrome. GDD ships **no** PDF runtime (the print-executor precedent, D-02).
|
|
15
|
+
- **`notion`** - a Notion page via the Notion MCP (`connections/notion.md`): headings → section/toggle blocks, screenshots → image-upload blocks. Degrades to the `html` file when the Notion MCP is `not_configured`/disabled.
|
|
16
16
|
|
|
17
17
|
## Privacy (redact always; pseudonymize opt-in)
|
|
18
18
|
|
|
19
|
-
Every section is passed through `scripts/lib/redact.cjs` (secrets
|
|
19
|
+
Every section is passed through `scripts/lib/redact.cjs` (secrets - the floor). `--pseudonymize` additionally applies `scripts/lib/pseudonymize.cjs` (git identity / paths / hostname / repo origin) - use it when sharing externally. Default (no flag) = redact only.
|
|
20
20
|
|
|
21
21
|
## PR integration (`--pr`)
|
|
22
22
|
|
|
23
|
-
`--pr` hands the generated self-contained HTML preview to `agents/pr-commenter.md` (Phase 35.1) to post as a PR comment
|
|
23
|
+
`--pr` hands the generated self-contained HTML preview to `agents/pr-commenter.md` (Phase 35.1) to post as a PR comment - degrade-to-noop when there's no PR or pr-commenter is unavailable (never blocks the export).
|
|
24
24
|
|
|
25
25
|
## Self-contained guarantee (html/pdf)
|
|
26
26
|
|
|
27
|
-
`build-html.cjs` emits no external `src=`/`<link>`/`<script>`
|
|
27
|
+
`build-html.cjs` emits no external `src=`/`<link>`/`<script>` - CSS is inline, images are base64 `data:` URIs. Content links (`<a href="https://…">`) are preserved (they're references, not essential resources). Deterministic: same input → byte-identical output (the regression baseline freezes a fixture render).
|
|
28
28
|
|
|
29
29
|
## Out of scope
|
|
30
30
|
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
# Figma Plugin Sandbox
|
|
1
|
+
# Figma Plugin Sandbox - Hard Rules
|
|
2
2
|
|
|
3
3
|
The `use_figma` MCP runs every script inside the Figma plugin sandbox with a **~5–10s per-call budget**. Four pitfalls repeatedly burn quota in docs-authoring loops. Treat these as hard rules.
|
|
4
4
|
|
|
5
|
-
**Rule 1
|
|
5
|
+
**Rule 1 - `loadFontAsync` does NOT cache across `use_figma` calls.** Every new call re-fetches font metadata. Preload every style ONCE at the top of a script; clone existing text nodes via `node.clone()` or `figma.createText().fontName = ...` rather than calling `loadFontAsync` again.
|
|
6
6
|
|
|
7
|
-
**Rule 2
|
|
7
|
+
**Rule 2 - `figma.root.findOne()` is O(tree-size) per call.** On a real file with thousands of frames this alone eats the budget. When you already know the node you want to act on, pass the node ID directly and call `figma.getNodeById(id)`. Never call `findOne` in a loop.
|
|
8
8
|
|
|
9
|
-
**Rule 3
|
|
9
|
+
**Rule 3 - `appendChild` on a large attached tree triggers full AutoLayout recomputation.** Build subtrees off-tree (on a detached parent) and attach the completed subtree once at the end. This avoids N + N-1 + ... + 1 full layout passes.
|
|
10
10
|
|
|
11
|
-
**Rule 4
|
|
11
|
+
**Rule 4 - per-call timeout is ~5–10s.** For docs-authoring (multi-row layouts populating from a library), budget **≤2 row-equivalents per `use_figma` call**. Exceeding this puts the script in the hill-climb-against-timeout failure mode: you retry with less content per call, each retry wastes another 5–10s, and MCP quota vanishes.
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
|
15
15
|
## When to skip `use_figma` entirely
|
|
16
16
|
|
|
17
|
-
For **authoring new content**
|
|
17
|
+
For **authoring new content** - creating pages, populating with library components, building documentation layouts from scratch - prefer `figma:figma-generate-design` from the Figma plugin. It runs outside the sandbox and has no per-call timeout.
|
|
18
18
|
|
|
19
19
|
`use_figma` (and `/gdd:figma-write`) remain the right tools for **decision-writing**: attaching annotations, binding local-style tokens, registering Code Connect mappings, writing back implementation-status. Small, bounded, read-then-write operations where the four pitfalls don't apply.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# First Principles
|
|
1
|
+
# First Principles - Invariant Design Constraints
|
|
2
2
|
|
|
3
3
|
> These are the three invariants that no design decision can override. They are facts about human biology and cognition, not preferences or conventions. Every design choice is downstream of these three constraints.
|
|
4
4
|
|
|
@@ -53,7 +53,7 @@ Working memory holds approximately 7 items and degrades rapidly within seconds.
|
|
|
53
53
|
| Recognition over recall (H-06) | Visible navigation labels, not icon-only; breadcrumbs on deep paths |
|
|
54
54
|
| Context must be preserved | Multi-step forms: prior-step summary visible; form state not cleared on back-navigate |
|
|
55
55
|
| Error memory fades fast | Inline validation: errors adjacent to the field that caused them |
|
|
56
|
-
| Completion status reduces anxiety | Progress indicators: `Step 2 of 4`; Zeigarnik Effect
|
|
56
|
+
| Completion status reduces anxiety | Progress indicators: `Step 2 of 4`; Zeigarnik Effect - show percentage done |
|
|
57
57
|
| Last action should be reversible | Undo available for destructive/irreversible actions within 5 seconds |
|
|
58
58
|
|
|
59
59
|
**Reducibility check:** Does this screen require the user to remember something from a previous screen? If yes, surface that context inline.
|
|
@@ -64,11 +64,11 @@ Working memory holds approximately 7 items and degrades rapidly within seconds.
|
|
|
64
64
|
|
|
65
65
|
For any proposed design element, apply in order:
|
|
66
66
|
|
|
67
|
-
1. **Body test**
|
|
68
|
-
2. **Attention test**
|
|
69
|
-
3. **Memory test**
|
|
67
|
+
1. **Body test** - Is this element reachable by a person with limited motor precision on a small screen?
|
|
68
|
+
2. **Attention test** - Does this element earn its place by directly supporting the primary task?
|
|
69
|
+
3. **Memory test** - Does this element surface context the user would otherwise need to remember?
|
|
70
70
|
|
|
71
|
-
If an element fails all three tests, it is purely decorative. Decorative elements are not forbidden
|
|
71
|
+
If an element fails all three tests, it is purely decorative. Decorative elements are not forbidden - but they are not invariant-justified, and they are the first candidates for removal when performance or clarity is at risk.
|
|
72
72
|
|
|
73
73
|
---
|
|
74
74
|
|
|
@@ -76,7 +76,7 @@ If an element fails all three tests, it is purely decorative. Decorative element
|
|
|
76
76
|
|
|
77
77
|
When `design-discussant` runs the brief stage, it prepends this invariants question before the main interview:
|
|
78
78
|
|
|
79
|
-
> "Before we discuss the design direction, let me confirm three constraints: (1) Are there any accessibility requirements for motor-impaired users? (2) Is the primary use case on mobile or desktop
|
|
79
|
+
> "Before we discuss the design direction, let me confirm three constraints: (1) Are there any accessibility requirements for motor-impaired users? (2) Is the primary use case on mobile or desktop - or both? (3) Are there any multi-step flows where the user must carry context between screens?"
|
|
80
80
|
|
|
81
81
|
Answers are recorded as D-XX decisions prefixed `[Invariant]` in STATE.md.
|
|
82
82
|
|
|
@@ -84,6 +84,6 @@ Answers are recorded as D-XX decisions prefixed `[Invariant]` in STATE.md.
|
|
|
84
84
|
|
|
85
85
|
## Relationship to Other References
|
|
86
86
|
|
|
87
|
-
- `reference/heuristics.md`
|
|
88
|
-
- `reference/emotional-design.md`
|
|
89
|
-
- `reference/component-authoring.md`
|
|
87
|
+
- `reference/heuristics.md` - H-01 through H-10 are the behavioral-level expression of Invariants 2 and 3
|
|
88
|
+
- `reference/emotional-design.md` - Invariant 1 (Body) maps to the Visceral level; Invariants 2–3 map to the Behavioral level
|
|
89
|
+
- `reference/component-authoring.md` - P-01 through P-06 are the component-level expression of all three invariants
|