@hegemonart/get-design-done 1.42.0 → 1.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +1080 -1038
- package/README.md +157 -155
- package/SKILL.md +42 -42
- package/agents/README.md +53 -53
- package/agents/a11y-mapper.md +3 -3
- package/agents/component-benchmark-harvester.md +8 -8
- package/agents/component-benchmark-synthesizer.md +11 -11
- package/agents/component-taxonomy-mapper.md +5 -5
- package/agents/compose-executor.md +25 -25
- package/agents/conflict-resolver.md +8 -8
- package/agents/cost-forecaster.md +12 -12
- package/agents/decision-journal-exporter.md +5 -5
- package/agents/design-advisor.md +19 -19
- package/agents/design-assumptions-analyzer.md +16 -16
- package/agents/design-auditor.md +39 -39
- package/agents/design-authority-watcher.md +28 -28
- package/agents/design-component-generator.md +27 -27
- package/agents/design-context-builder.md +66 -66
- package/agents/design-context-checker-gate.md +5 -5
- package/agents/design-context-checker.md +20 -20
- package/agents/design-discussant.md +23 -23
- package/agents/design-doc-writer.md +12 -12
- package/agents/design-executor.md +38 -38
- package/agents/design-figma-writer.md +31 -31
- package/agents/design-fixer.md +27 -27
- package/agents/design-integration-checker-gate.md +5 -5
- package/agents/design-integration-checker.md +29 -29
- package/agents/design-paper-writer.md +14 -14
- package/agents/design-pattern-mapper.md +9 -9
- package/agents/design-pencil-writer.md +12 -12
- package/agents/design-phase-researcher.md +14 -14
- package/agents/design-plan-checker.md +13 -13
- package/agents/design-planner.md +24 -24
- package/agents/design-reflector.md +48 -48
- package/agents/design-research-synthesizer.md +21 -21
- package/agents/design-start-writer.md +7 -7
- package/agents/design-update-checker.md +8 -8
- package/agents/design-verifier-gate.md +5 -5
- package/agents/design-verifier.md +80 -80
- package/agents/ds-generator.md +14 -14
- package/agents/ds-migration-planner.md +12 -12
- package/agents/email-executor.md +26 -26
- package/agents/experiment-result-ingester.md +10 -10
- package/agents/flutter-executor.md +28 -28
- package/agents/gdd-graph-refresh.md +10 -10
- package/agents/gdd-intel-updater.md +11 -11
- package/agents/gdd-learnings-extractor.md +2 -2
- package/agents/motion-mapper.md +8 -8
- package/agents/motion-verifier.md +16 -16
- package/agents/pdf-executor.md +27 -27
- package/agents/perf-analyzer.md +20 -20
- package/agents/pr-commenter.md +24 -24
- package/agents/prototype-gate.md +29 -29
- package/agents/quality-gate-runner.md +21 -21
- package/agents/rollout-coordinator.md +8 -8
- package/agents/swift-executor.md +41 -41
- package/agents/ticket-sync-agent.md +19 -19
- package/agents/token-mapper.md +6 -6
- package/agents/user-research-synthesizer.md +13 -13
- package/agents/visual-hierarchy-mapper.md +2 -2
- package/dist/claude-code/.claude/skills/add-backlog/SKILL.md +3 -3
- package/dist/claude-code/.claude/skills/analyze-dependencies/SKILL.md +10 -10
- package/dist/claude-code/.claude/skills/apply-reflections/SKILL.md +13 -13
- package/dist/claude-code/.claude/skills/apply-reflections/apply-reflections-procedure.md +20 -20
- package/dist/claude-code/.claude/skills/audit/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/bandit-status/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/benchmark/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/bootstrap-ds/SKILL.md +10 -10
- package/dist/claude-code/.claude/skills/brief/SKILL.md +20 -20
- package/dist/claude-code/.claude/skills/budget/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/cache-manager/SKILL.md +6 -6
- package/dist/claude-code/.claude/skills/cache-manager/cache-policy.md +5 -5
- package/dist/claude-code/.claude/skills/check-update/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/compare/SKILL.md +15 -15
- package/dist/claude-code/.claude/skills/compare/compare-rubric.md +17 -17
- package/dist/claude-code/.claude/skills/complete-cycle/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/connections/SKILL.md +11 -11
- package/dist/claude-code/.claude/skills/connections/connections-onboarding.md +76 -76
- package/dist/claude-code/.claude/skills/continue/SKILL.md +2 -2
- package/dist/claude-code/.claude/skills/darkmode/SKILL.md +17 -17
- package/dist/claude-code/.claude/skills/darkmode/darkmode-audit-procedure.md +7 -7
- package/dist/claude-code/.claude/skills/debug/SKILL.md +3 -3
- package/dist/claude-code/.claude/skills/debug/debug-feedback-loops.md +12 -12
- package/dist/claude-code/.claude/skills/design/SKILL.md +12 -12
- package/dist/claude-code/.claude/skills/design/design-procedure.md +23 -23
- package/dist/claude-code/.claude/skills/discover/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/discover/discover-procedure.md +18 -18
- package/dist/claude-code/.claude/skills/discuss/SKILL.md +12 -12
- package/dist/claude-code/.claude/skills/do/SKILL.md +1 -1
- package/dist/claude-code/.claude/skills/explore/SKILL.md +21 -21
- package/dist/claude-code/.claude/skills/explore/explore-procedure.md +48 -48
- package/dist/claude-code/.claude/skills/export/SKILL.md +9 -9
- package/dist/claude-code/.claude/skills/extract-learnings/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/fast/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/figma-extract/SKILL.md +11 -11
- package/dist/claude-code/.claude/skills/figma-write/SKILL.md +6 -6
- package/dist/claude-code/.claude/skills/graphify/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/health/SKILL.md +16 -16
- package/dist/claude-code/.claude/skills/health/health-mcp-detection.md +3 -3
- package/dist/claude-code/.claude/skills/health/health-skill-length-report.md +6 -6
- package/dist/claude-code/.claude/skills/help/SKILL.md +1 -1
- package/dist/claude-code/.claude/skills/list-assumptions/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/map/SKILL.md +12 -12
- package/dist/claude-code/.claude/skills/migrate/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/new-cycle/SKILL.md +2 -2
- package/dist/claude-code/.claude/skills/new-cycle/milestone-completeness-rubric.md +16 -16
- package/dist/claude-code/.claude/skills/new-project/SKILL.md +1 -1
- package/dist/claude-code/.claude/skills/next/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/note/SKILL.md +1 -1
- package/dist/claude-code/.claude/skills/openrouter-status/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/optimize/SKILL.md +15 -15
- package/dist/claude-code/.claude/skills/pause/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/peer-cli-add/SKILL.md +11 -11
- package/dist/claude-code/.claude/skills/peer-cli-add/peer-cli-protocol.md +39 -39
- package/dist/claude-code/.claude/skills/peer-cli-customize/SKILL.md +14 -14
- package/dist/claude-code/.claude/skills/peers/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/plan/SKILL.md +13 -13
- package/dist/claude-code/.claude/skills/plan/plan-procedure.md +24 -24
- package/dist/claude-code/.claude/skills/plant-seed/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/pr-branch/SKILL.md +2 -2
- package/dist/claude-code/.claude/skills/progress/SKILL.md +15 -15
- package/dist/claude-code/.claude/skills/quality-gate/SKILL.md +22 -22
- package/dist/claude-code/.claude/skills/quality-gate/threat-modeling.md +19 -19
- package/dist/claude-code/.claude/skills/quick/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/reapply-patches/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/reflect/SKILL.md +3 -3
- package/dist/claude-code/.claude/skills/reflect/procedures/capability-gap-scan.md +11 -11
- package/dist/claude-code/.claude/skills/report-issue/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/report-issue/report-issue-procedure.md +27 -27
- package/dist/claude-code/.claude/skills/resume/SKILL.md +9 -9
- package/dist/claude-code/.claude/skills/review-backlog/SKILL.md +3 -3
- package/dist/claude-code/.claude/skills/review-decisions/SKILL.md +3 -3
- package/dist/claude-code/.claude/skills/roi/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/rollout-status/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/router/SKILL.md +11 -11
- package/dist/claude-code/.claude/skills/router/capability-gap-emitter.md +6 -6
- package/dist/claude-code/.claude/skills/router/router-pick-emitter.md +9 -9
- package/dist/claude-code/.claude/skills/router/router-rules.md +7 -7
- package/dist/claude-code/.claude/skills/scan/SKILL.md +16 -16
- package/dist/claude-code/.claude/skills/scan/scan-procedure.md +42 -42
- package/dist/claude-code/.claude/skills/settings/SKILL.md +2 -2
- package/dist/claude-code/.claude/skills/ship/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/sketch/SKILL.md +10 -10
- package/dist/claude-code/.claude/skills/sketch-wrap-up/SKILL.md +12 -12
- package/dist/claude-code/.claude/skills/skill-manifest/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/spike/SKILL.md +7 -7
- package/dist/claude-code/.claude/skills/spike-wrap-up/SKILL.md +13 -13
- package/dist/claude-code/.claude/skills/start/SKILL.md +8 -8
- package/dist/claude-code/.claude/skills/start/start-procedure.md +9 -9
- package/dist/claude-code/.claude/skills/stats/SKILL.md +5 -5
- package/dist/claude-code/.claude/skills/style/SKILL.md +12 -12
- package/dist/claude-code/.claude/skills/style/style-doc-procedure.md +12 -12
- package/dist/claude-code/.claude/skills/synthesize/SKILL.md +10 -10
- package/dist/claude-code/.claude/skills/timeline/SKILL.md +4 -4
- package/dist/claude-code/.claude/skills/todo/SKILL.md +3 -3
- package/dist/claude-code/.claude/skills/turn-closeout/SKILL.md +10 -10
- package/dist/claude-code/.claude/skills/unlock-decision/SKILL.md +3 -3
- package/dist/claude-code/.claude/skills/update/SKILL.md +9 -9
- package/dist/claude-code/.claude/skills/using-gdd/SKILL.md +17 -17
- package/dist/claude-code/.claude/skills/verify/SKILL.md +13 -13
- package/dist/claude-code/.claude/skills/verify/verify-procedure.md +34 -34
- package/dist/claude-code/.claude/skills/warm-cache/SKILL.md +8 -8
- package/dist/claude-code/.claude/skills/watch-authorities/SKILL.md +9 -9
- package/dist/claude-code/.claude/skills/zoom-out/SKILL.md +4 -4
- package/package.json +5 -2
- package/reference/DEPRECATIONS.md +10 -10
- package/reference/STATE-TEMPLATE.md +26 -26
- package/reference/accessibility.md +13 -13
- package/reference/adr-format.md +13 -13
- package/reference/ai-native-tool-interface.md +5 -5
- package/reference/anti-patterns.md +9 -9
- package/reference/architecture-vocabulary.md +31 -31
- package/reference/audit-scoring.md +13 -13
- package/reference/authority-feeds.md +36 -36
- package/reference/bandit-integration.md +25 -25
- package/reference/brand-voice.md +36 -36
- package/reference/capability-gap-stage-gate.md +20 -20
- package/reference/checklists.md +26 -26
- package/reference/cli-localization.md +13 -13
- package/reference/codex-tools.md +2 -2
- package/reference/color-theory.md +28 -28
- package/reference/component-authoring.md +4 -4
- package/reference/components/README.md +13 -13
- package/reference/components/TEMPLATE.md +13 -13
- package/reference/components/accordion.md +15 -15
- package/reference/components/alert.md +25 -25
- package/reference/components/badge.md +18 -18
- package/reference/components/breadcrumbs.md +24 -24
- package/reference/components/button.md +21 -21
- package/reference/components/card.md +13 -13
- package/reference/components/checkbox.md +20 -20
- package/reference/components/chip.md +20 -20
- package/reference/components/command-palette.md +15 -15
- package/reference/components/date-picker.md +22 -22
- package/reference/components/drawer.md +13 -13
- package/reference/components/file-upload.md +22 -22
- package/reference/components/input.md +18 -18
- package/reference/components/label.md +25 -25
- package/reference/components/link.md +19 -19
- package/reference/components/list.md +17 -17
- package/reference/components/menu.md +19 -19
- package/reference/components/modal-dialog.md +16 -16
- package/reference/components/navbar.md +19 -19
- package/reference/components/pagination.md +18 -18
- package/reference/components/popover.md +12 -12
- package/reference/components/progress.md +18 -18
- package/reference/components/radio.md +17 -17
- package/reference/components/rich-text-editor.md +24 -24
- package/reference/components/select-combobox.md +16 -16
- package/reference/components/sidebar.md +15 -15
- package/reference/components/skeleton.md +20 -20
- package/reference/components/slider.md +20 -20
- package/reference/components/stepper.md +24 -24
- package/reference/components/switch.md +19 -19
- package/reference/components/table.md +21 -21
- package/reference/components/tabs.md +11 -11
- package/reference/components/toast.md +19 -19
- package/reference/components/tooltip.md +19 -19
- package/reference/components/tree.md +17 -17
- package/reference/composition.md +38 -38
- package/reference/config-schema.md +37 -37
- package/reference/context-md-format.md +9 -9
- package/reference/contrast-advanced.md +29 -29
- package/reference/conversational-ui.md +17 -17
- package/reference/cost-governance.md +14 -14
- package/reference/css-grid-layout.md +8 -8
- package/reference/cycle-handoff-preamble.md +3 -3
- package/reference/data-visualization.md +67 -67
- package/reference/debugger-philosophy.md +5 -5
- package/reference/design-system-guidance.md +21 -21
- package/reference/design-systems-catalog.md +20 -20
- package/reference/design-variants.md +11 -11
- package/reference/domains/civic-patterns.md +10 -10
- package/reference/domains/finance-patterns.md +9 -9
- package/reference/domains/gaming-patterns.md +9 -9
- package/reference/domains/healthcare-patterns.md +11 -11
- package/reference/ds-bootstrap-rubric.md +13 -13
- package/reference/email-design.md +22 -22
- package/reference/emotional-design.md +10 -10
- package/reference/error-recovery.md +11 -11
- package/reference/export-formats.md +7 -7
- package/reference/figma-sandbox.md +6 -6
- package/reference/first-principles.md +10 -10
- package/reference/form-patterns.md +26 -26
- package/reference/framer-motion-patterns.md +49 -49
- package/reference/gdd-runtime-audit.md +17 -17
- package/reference/gdd-threat-model.md +44 -44
- package/reference/gemini-tools.md +3 -3
- package/reference/gestalt.md +24 -24
- package/reference/heuristics.md +32 -32
- package/reference/i18n.md +44 -44
- package/reference/iconography.md +24 -24
- package/reference/image-optimization.md +14 -14
- package/reference/information-architecture.md +47 -47
- package/reference/intel-schema.md +1 -1
- package/reference/known-failure-modes.md +37 -37
- package/reference/meta-rules.md +5 -5
- package/reference/migrations/material-3-to-4.md +17 -17
- package/reference/migrations/mui-v6.md +16 -16
- package/reference/migrations/shadcn-v2.md +25 -25
- package/reference/migrations/tailwind-v4.md +21 -21
- package/reference/model-prices.md +3 -3
- package/reference/model-tiers.md +40 -40
- package/reference/motion-advanced.md +21 -21
- package/reference/motion-easings.md +29 -29
- package/reference/motion-interpolate.md +1 -1
- package/reference/motion-spring.md +13 -13
- package/reference/motion-transition-taxonomy.md +34 -34
- package/reference/motion.md +31 -31
- package/reference/multi-author-model.md +13 -13
- package/reference/native-platforms.md +28 -28
- package/reference/notification-routing.md +6 -6
- package/reference/onboarding-progressive-disclosure.md +32 -32
- package/reference/openrouter-tier-mapping.md +8 -8
- package/reference/palette-catalog.md +37 -37
- package/reference/parallelism-rules.md +20 -20
- package/reference/peer-cli-capabilities.md +14 -14
- package/reference/peer-protocols.md +21 -21
- package/reference/perf-budget.md +21 -21
- package/reference/performance.md +22 -22
- package/reference/platforms.md +51 -51
- package/reference/pr-review-integration.md +7 -7
- package/reference/prices/antigravity.md +3 -3
- package/reference/prices/augment.md +3 -3
- package/reference/prices/claude.md +2 -2
- package/reference/prices/cline.md +4 -4
- package/reference/prices/codebuddy.md +3 -3
- package/reference/prices/codex.md +2 -2
- package/reference/prices/copilot.md +3 -3
- package/reference/prices/cursor.md +3 -3
- package/reference/prices/gemini.md +2 -2
- package/reference/prices/kilo.md +3 -3
- package/reference/prices/opencode.md +4 -4
- package/reference/prices/qwen.md +2 -2
- package/reference/prices/trae.md +3 -3
- package/reference/prices/windsurf.md +3 -3
- package/reference/prices.openrouter.md +5 -5
- package/reference/print-design.md +36 -36
- package/reference/priority-matrix.md +2 -2
- package/reference/project-skills-guide.md +3 -3
- package/reference/proportion-systems.md +23 -23
- package/reference/pseudonymization-rules.md +30 -30
- package/reference/retrieval-contract.md +14 -14
- package/reference/review-format.md +7 -7
- package/reference/rollout-coordination.md +10 -10
- package/reference/rtl-cjk-cultural.md +39 -39
- package/reference/runtime-models.md +28 -28
- package/reference/shared-preamble.md +26 -26
- package/reference/skill-authoring-contract.md +16 -16
- package/reference/skill-placeholders.md +3 -3
- package/reference/start-interview.md +10 -10
- package/reference/style-vocabulary.md +25 -25
- package/reference/surfaces.md +4 -4
- package/reference/ticket-sync.md +9 -9
- package/reference/typography.md +64 -64
- package/reference/user-research.md +54 -54
- package/reference/variable-fonts-loading.md +15 -15
- package/reference/visual-hierarchy-layout.md +41 -41
- package/scripts/lib/manifest/prose-denylist.json +1 -1
- package/skills/add-backlog/SKILL.md +3 -3
- package/skills/analyze-dependencies/SKILL.md +10 -10
- package/skills/apply-reflections/SKILL.md +13 -13
- package/skills/apply-reflections/apply-reflections-procedure.md +20 -20
- package/skills/audit/SKILL.md +7 -7
- package/skills/bandit-status/SKILL.md +7 -7
- package/skills/benchmark/SKILL.md +7 -7
- package/skills/bootstrap-ds/SKILL.md +10 -10
- package/skills/brief/SKILL.md +20 -20
- package/skills/budget/SKILL.md +4 -4
- package/skills/cache-manager/SKILL.md +6 -6
- package/skills/cache-manager/cache-policy.md +5 -5
- package/skills/check-update/SKILL.md +5 -5
- package/skills/compare/SKILL.md +15 -15
- package/skills/compare/compare-rubric.md +17 -17
- package/skills/complete-cycle/SKILL.md +5 -5
- package/skills/connections/SKILL.md +11 -11
- package/skills/connections/connections-onboarding.md +76 -76
- package/skills/continue/SKILL.md +2 -2
- package/skills/darkmode/SKILL.md +17 -17
- package/skills/darkmode/darkmode-audit-procedure.md +7 -7
- package/skills/debug/SKILL.md +3 -3
- package/skills/debug/debug-feedback-loops.md +12 -12
- package/skills/design/SKILL.md +12 -12
- package/skills/design/design-procedure.md +23 -23
- package/skills/discover/SKILL.md +7 -7
- package/skills/discover/discover-procedure.md +18 -18
- package/skills/discuss/SKILL.md +12 -12
- package/skills/do/SKILL.md +1 -1
- package/skills/explore/SKILL.md +21 -21
- package/skills/explore/explore-procedure.md +48 -48
- package/skills/export/SKILL.md +9 -9
- package/skills/extract-learnings/SKILL.md +5 -5
- package/skills/fast/SKILL.md +7 -7
- package/skills/figma-extract/SKILL.md +11 -11
- package/skills/figma-write/SKILL.md +6 -6
- package/skills/graphify/SKILL.md +4 -4
- package/skills/health/SKILL.md +16 -16
- package/skills/health/health-mcp-detection.md +3 -3
- package/skills/health/health-skill-length-report.md +6 -6
- package/skills/help/SKILL.md +1 -1
- package/skills/list-assumptions/SKILL.md +4 -4
- package/skills/map/SKILL.md +12 -12
- package/skills/migrate/SKILL.md +5 -5
- package/skills/new-cycle/SKILL.md +2 -2
- package/skills/new-cycle/milestone-completeness-rubric.md +16 -16
- package/skills/new-project/SKILL.md +1 -1
- package/skills/next/SKILL.md +5 -5
- package/skills/note/SKILL.md +1 -1
- package/skills/openrouter-status/SKILL.md +4 -4
- package/skills/optimize/SKILL.md +15 -15
- package/skills/pause/SKILL.md +5 -5
- package/skills/peer-cli-add/SKILL.md +11 -11
- package/skills/peer-cli-add/peer-cli-protocol.md +39 -39
- package/skills/peer-cli-customize/SKILL.md +14 -14
- package/skills/peers/SKILL.md +4 -4
- package/skills/plan/SKILL.md +13 -13
- package/skills/plan/plan-procedure.md +24 -24
- package/skills/plant-seed/SKILL.md +4 -4
- package/skills/pr-branch/SKILL.md +2 -2
- package/skills/progress/SKILL.md +15 -15
- package/skills/quality-gate/SKILL.md +22 -22
- package/skills/quality-gate/threat-modeling.md +19 -19
- package/skills/quick/SKILL.md +5 -5
- package/skills/reapply-patches/SKILL.md +7 -7
- package/skills/reflect/SKILL.md +3 -3
- package/skills/reflect/procedures/capability-gap-scan.md +11 -11
- package/skills/report-issue/SKILL.md +5 -5
- package/skills/report-issue/report-issue-procedure.md +27 -27
- package/skills/resume/SKILL.md +9 -9
- package/skills/review-backlog/SKILL.md +3 -3
- package/skills/review-decisions/SKILL.md +3 -3
- package/skills/roi/SKILL.md +5 -5
- package/skills/rollout-status/SKILL.md +4 -4
- package/skills/router/SKILL.md +11 -11
- package/skills/router/capability-gap-emitter.md +6 -6
- package/skills/router/router-pick-emitter.md +9 -9
- package/skills/router/router-rules.md +7 -7
- package/skills/scan/SKILL.md +16 -16
- package/skills/scan/scan-procedure.md +42 -42
- package/skills/settings/SKILL.md +2 -2
- package/skills/ship/SKILL.md +7 -7
- package/skills/sketch/SKILL.md +10 -10
- package/skills/sketch-wrap-up/SKILL.md +12 -12
- package/skills/skill-manifest/SKILL.md +5 -5
- package/skills/spike/SKILL.md +7 -7
- package/skills/spike-wrap-up/SKILL.md +13 -13
- package/skills/start/SKILL.md +8 -8
- package/skills/start/start-procedure.md +9 -9
- package/skills/stats/SKILL.md +5 -5
- package/skills/style/SKILL.md +12 -12
- package/skills/style/style-doc-procedure.md +12 -12
- package/skills/synthesize/SKILL.md +10 -10
- package/skills/timeline/SKILL.md +4 -4
- package/skills/todo/SKILL.md +3 -3
- package/skills/turn-closeout/SKILL.md +10 -10
- package/skills/unlock-decision/SKILL.md +3 -3
- package/skills/update/SKILL.md +9 -9
- package/skills/using-gdd/SKILL.md +17 -17
- package/skills/verify/SKILL.md +13 -13
- package/skills/verify/verify-procedure.md +34 -34
- package/skills/warm-cache/SKILL.md +8 -8
- package/skills/watch-authorities/SKILL.md +9 -9
- package/skills/zoom-out/SKILL.md +4 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Tooltip
|
|
1
|
+
# Tooltip - Benchmark Spec
|
|
2
2
|
|
|
3
3
|
**Harvested from**: WAI-ARIA APG, Radix UI, Material 3, Carbon, Mantine, Fluent 2, Atlassian, Apple HIG
|
|
4
4
|
**Wave**: 2 · **Category**: Containers
|
|
@@ -43,7 +43,7 @@ A tooltip is a small, non-interactive label that appears on hover or keyboard fo
|
|
|
43
43
|
| Light | Light background | Mantine (inverted) |
|
|
44
44
|
|
|
45
45
|
**Norm** (≥7/18): 300ms show delay, 0ms hide; max-width 240px; never interactive content.
|
|
46
|
-
**Diverge**: delay duration
|
|
46
|
+
**Diverge**: delay duration - Carbon recommends 100ms for toolbars; WAI-ARIA APG recommends ≤500ms. 300ms is the safe default.
|
|
47
47
|
|
|
48
48
|
---
|
|
49
49
|
|
|
@@ -72,8 +72,8 @@ A tooltip is a small, non-interactive label that appears on hover or keyboard fo
|
|
|
72
72
|
|
|
73
73
|
## Typography
|
|
74
74
|
|
|
75
|
-
- 12px/400
|
|
76
|
-
- No bold, no headings inside tooltip
|
|
75
|
+
- 12px/400 - tooltip text is supplemental; smaller weight and size distinguish it from primary content
|
|
76
|
+
- No bold, no headings inside tooltip - it is a single line of text (≤60 chars preferred)
|
|
77
77
|
- Multi-line: allowed if content genuinely requires it; still no interactive elements
|
|
78
78
|
|
|
79
79
|
---
|
|
@@ -81,11 +81,11 @@ A tooltip is a small, non-interactive label that appears on hover or keyboard fo
|
|
|
81
81
|
## Keyboard & Accessibility
|
|
82
82
|
|
|
83
83
|
> **WAI-ARIA role**: `tooltip`
|
|
84
|
-
> **Trigger attributes**: `aria-describedby="tooltip-id"`
|
|
84
|
+
> **Trigger attributes**: `aria-describedby="tooltip-id"` - links the supplemental label
|
|
85
85
|
|
|
86
86
|
### Keyboard Contract
|
|
87
87
|
|
|
88
|
-
*Quoted verbatim from WAI-ARIA APG
|
|
88
|
+
*Quoted verbatim from WAI-ARIA APG - https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/ - W3C - 2024*
|
|
89
89
|
|
|
90
90
|
| Key | Action |
|
|
91
91
|
|-----|--------|
|
|
@@ -97,11 +97,11 @@ Tooltip does NOT receive focus. It is purely a visual label attached to the trig
|
|
|
97
97
|
|
|
98
98
|
### Accessibility Rules
|
|
99
99
|
|
|
100
|
-
- Trigger MUST have `aria-describedby` pointing to the tooltip's `id`
|
|
101
|
-
- Tooltip is `role="tooltip"`
|
|
102
|
-
- Tooltip MUST appear on keyboard focus, not only on hover
|
|
103
|
-
- Do NOT put interactive content inside a tooltip
|
|
104
|
-
- Do NOT use tooltip as the only accessible name for a control
|
|
100
|
+
- Trigger MUST have `aria-describedby` pointing to the tooltip's `id` - screen readers read tooltip content as supplemental description
|
|
101
|
+
- Tooltip is `role="tooltip"` - NOT `role="dialog"` (no interactivity, no focus trap)
|
|
102
|
+
- Tooltip MUST appear on keyboard focus, not only on hover - keyboard-only users need access too *(WCAG 1.3.3, 2.1.1)*
|
|
103
|
+
- Do NOT put interactive content inside a tooltip - use Popover (`reference/components/popover.md`)
|
|
104
|
+
- Do NOT use tooltip as the only accessible name for a control - use `aria-label` on the trigger instead; tooltip supplements, not replaces, the accessible name
|
|
105
105
|
- Escape MUST dismiss the tooltip without removing focus from the trigger *(WAI-ARIA APG)*
|
|
106
106
|
|
|
107
107
|
---
|
|
@@ -112,25 +112,25 @@ Tooltip does NOT receive focus. It is purely a visual label attached to the trig
|
|
|
112
112
|
|------------|----------|--------|-------|
|
|
113
113
|
| Show | 100ms | ease-out | Fade only; no scale (too flashy for a label) |
|
|
114
114
|
| Hide | 80ms | ease | Fade only; immediate on Escape |
|
|
115
|
-
| Delay | 300ms |
|
|
115
|
+
| Delay | 300ms | - | CSS `transition-delay` or JS timeout |
|
|
116
116
|
|
|
117
|
-
Cross-link: `reference/motion.md`
|
|
117
|
+
Cross-link: `reference/motion.md` - `prefers-reduced-motion`: skip fade, instant show/hide
|
|
118
118
|
|
|
119
119
|
---
|
|
120
120
|
|
|
121
121
|
## Do / Don't
|
|
122
122
|
|
|
123
123
|
### Do
|
|
124
|
-
- Show on keyboard focus AND hover
|
|
124
|
+
- Show on keyboard focus AND hover - not hover-only *(WAI-ARIA APG, WCAG 2.1.1)*
|
|
125
125
|
- Use `aria-describedby` to link trigger to tooltip *(WAI-ARIA APG)*
|
|
126
|
-
- Limit tooltip content to ≤60 chars
|
|
126
|
+
- Limit tooltip content to ≤60 chars - longer content belongs in a popover *(Carbon, Material 3)*
|
|
127
127
|
- Apply 300ms show delay to prevent accidental triggers while cursor passes *(WAI-ARIA APG, Carbon)*
|
|
128
128
|
|
|
129
129
|
### Don't
|
|
130
|
-
- Don't put interactive elements inside a tooltip *(WAI-ARIA APG
|
|
131
|
-
- Don't use tooltip as the only accessible name
|
|
132
|
-
- Don't trigger tooltip on click
|
|
133
|
-
- Don't use tooltip for critical information
|
|
130
|
+
- Don't put interactive elements inside a tooltip *(WAI-ARIA APG - this makes it a popover)*
|
|
131
|
+
- Don't use tooltip as the only accessible name - `aria-describedby` supplements, not replaces, `aria-label` *(WAI-ARIA APG)*
|
|
132
|
+
- Don't trigger tooltip on click - use a popover *(Radix, WAI-ARIA APG)*
|
|
133
|
+
- Don't use tooltip for critical information - it's supplemental; users on touch devices may miss it *(Material 3, Polaris)*
|
|
134
134
|
|
|
135
135
|
---
|
|
136
136
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Tree View (Hierarchical Navigation)
|
|
1
|
+
# Tree View (Hierarchical Navigation) - Benchmark Spec
|
|
2
2
|
|
|
3
3
|
**Harvested from**: WAI-ARIA APG, Carbon, Atlassian, Radix, Material 3
|
|
4
4
|
**Wave**: 4 · **Category**: Navigation & Data
|
|
@@ -65,8 +65,8 @@ A tree view displays hierarchical data in a collapsible structure of parent and
|
|
|
65
65
|
|
|
66
66
|
| State | Trigger | Visual | ARIA |
|
|
67
67
|
|-------|---------|--------|------|
|
|
68
|
-
| node-default |
|
|
69
|
-
| node-hover | pointer over | 8% overlay on row |
|
|
68
|
+
| node-default | - | Icon + label; indented by level | - |
|
|
69
|
+
| node-hover | pointer over | 8% overlay on row | - |
|
|
70
70
|
| node-focus | keyboard focus | 2px focus-visible ring on row | `tabindex="0"` on focused; `-1` on rest |
|
|
71
71
|
| node-selected | click or Enter/Space | Filled row highlight | `aria-selected="true"` |
|
|
72
72
|
| node-expanded | toggle click or ArrowRight | Children visible; icon rotated/open | `aria-expanded="true"` |
|
|
@@ -93,10 +93,10 @@ A tree view displays hierarchical data in a collapsible structure of parent and
|
|
|
93
93
|
## Typography
|
|
94
94
|
|
|
95
95
|
- Node label: body-sm (13–14px), weight 400; selected node weight 500
|
|
96
|
-
- Level depth: visual indentation only
|
|
96
|
+
- Level depth: visual indentation only - no font-size reduction per level
|
|
97
97
|
- Disabled node: same font size, `color: --text-disabled`
|
|
98
98
|
|
|
99
|
-
Cross-link: `reference/typography.md`
|
|
99
|
+
Cross-link: `reference/typography.md` - body-sm
|
|
100
100
|
|
|
101
101
|
---
|
|
102
102
|
|
|
@@ -107,7 +107,7 @@ Cross-link: `reference/typography.md` — body-sm
|
|
|
107
107
|
|
|
108
108
|
### Keyboard Contract
|
|
109
109
|
|
|
110
|
-
*Quoted verbatim from WAI-ARIA APG
|
|
110
|
+
*Quoted verbatim from WAI-ARIA APG - https://www.w3.org/WAI/ARIA/apg/patterns/treeview/ - W3C - 2024*
|
|
111
111
|
|
|
112
112
|
| Key | Action |
|
|
113
113
|
|-----|--------|
|
|
@@ -123,14 +123,14 @@ Cross-link: `reference/typography.md` — body-sm
|
|
|
123
123
|
|
|
124
124
|
### Accessibility Rules
|
|
125
125
|
|
|
126
|
-
- ALL expandable nodes MUST have `aria-expanded`
|
|
126
|
+
- ALL expandable nodes MUST have `aria-expanded` - CSS-only expand/collapse is invisible to AT
|
|
127
127
|
- `aria-level` must accurately reflect nesting depth (1-based) on every `role="treeitem"`
|
|
128
|
-
- Child `<ul>` MUST have `role="group"`
|
|
128
|
+
- Child `<ul>` MUST have `role="group"` - without it, AT cannot perceive the parent-child relationship
|
|
129
129
|
- Focus management uses roving `tabindex`: only the active node has `tabindex="0"`; all others `tabindex="-1"`
|
|
130
130
|
- Lazy-loaded nodes MUST set `aria-busy="true"` while fetching; remove when complete
|
|
131
131
|
- Multi-select tree MUST set `aria-multiselectable="true"` on the `role="tree"` element
|
|
132
132
|
|
|
133
|
-
Cross-link: `reference/accessibility.md`
|
|
133
|
+
Cross-link: `reference/accessibility.md` - tree pattern, roving tabindex, aria-busy
|
|
134
134
|
|
|
135
135
|
---
|
|
136
136
|
|
|
@@ -144,9 +144,9 @@ Cross-link: `reference/accessibility.md` — tree pattern, roving tabindex, aria
|
|
|
144
144
|
| Node selection highlight | 100ms | ease-out | Background color only |
|
|
145
145
|
| Lazy-load spinner | continuous | linear | Replace with content on load |
|
|
146
146
|
|
|
147
|
-
**BAN**: Do not use CSS-only `display: none` / `display: block` to toggle children without updating `aria-expanded`
|
|
147
|
+
**BAN**: Do not use CSS-only `display: none` / `display: block` to toggle children without updating `aria-expanded` - both changes must happen atomically.
|
|
148
148
|
|
|
149
|
-
Cross-link: `reference/motion.md`
|
|
149
|
+
Cross-link: `reference/motion.md` - disclosure animations
|
|
150
150
|
|
|
151
151
|
---
|
|
152
152
|
|
|
@@ -159,10 +159,10 @@ Cross-link: `reference/motion.md` — disclosure animations
|
|
|
159
159
|
- Limit tree depth to 5–6 levels to prevent cognitive overload *(Carbon, Atlassian HIG)*
|
|
160
160
|
|
|
161
161
|
### Don't
|
|
162
|
-
- Don't use `<ul>/<li>` tree without `role="tree"` + `role="treeitem"`
|
|
163
|
-
- Don't forget `role="group"` on child `<ul>`
|
|
164
|
-
- Don't manage expand/collapse with CSS only (no `aria-expanded`)
|
|
165
|
-
- Don't indent via `aria-level` alone
|
|
162
|
+
- Don't use `<ul>/<li>` tree without `role="tree"` + `role="treeitem"` - semantically invisible to AT *(WCAG 1.3.1)*
|
|
163
|
+
- Don't forget `role="group"` on child `<ul>` - AT cannot infer parent-child structure without it *(WAI-ARIA APG)*
|
|
164
|
+
- Don't manage expand/collapse with CSS only (no `aria-expanded`) - blind users cannot discover collapsed state *(WCAG 4.1.2)*
|
|
165
|
+
- Don't indent via `aria-level` alone - also apply visual CSS indentation for sighted users *(Material 3, Carbon)*
|
|
166
166
|
|
|
167
167
|
---
|
|
168
168
|
|
|
@@ -170,7 +170,7 @@ Cross-link: `reference/motion.md` — disclosure animations
|
|
|
170
170
|
|
|
171
171
|
| Anti-pattern | Entry |
|
|
172
172
|
|--------------|-------|
|
|
173
|
-
| BAN-04 | `transition: all` on tree nodes
|
|
173
|
+
| BAN-04 | `transition: all` on tree nodes - `reference/anti-patterns.md#ban-04` |
|
|
174
174
|
|
|
175
175
|
---
|
|
176
176
|
|
|
@@ -220,6 +220,6 @@ grep -rn 'role="tree"' src/ | grep -v 'aria-label\|aria-labelledby'
|
|
|
220
220
|
</ul>
|
|
221
221
|
```
|
|
222
222
|
|
|
223
|
-
**Why it fails**: No `role="tree"` or `role="treeitem"`; no `aria-expanded`
|
|
223
|
+
**Why it fails**: No `role="tree"` or `role="treeitem"`; no `aria-expanded` - screen readers cannot tell if the node is open or closed; `role="group"` missing on child list; no `aria-level`; expand/collapse is click-only (no keyboard).
|
|
224
224
|
**Grep detection**: `grep -rn 'class.*tree\|treeview' src/ | grep '<ul\|<li' | grep -v 'role='`
|
|
225
225
|
**Fix**: Add `role="tree"` to root `<ul>`; `role="treeitem"` + `aria-expanded` + `aria-level` to each node; `role="group"` to child `<ul>`; implement arrow-key navigation with roving tabindex.
|
package/reference/composition.md
CHANGED
|
@@ -7,17 +7,17 @@ tags: [composition, golden-ratio, fibonacci, focal-point, eye-flow]
|
|
|
7
7
|
last_updated: 2026-05-18
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# Composition
|
|
10
|
+
# Composition - Pre-Gestalt Layout Fundamentals
|
|
11
11
|
|
|
12
|
-
The existing [visual hierarchy and layout reference](./visual-hierarchy-layout.md) covers shadow, z-index, whitespace, asymmetry, and the 12-column grid
|
|
12
|
+
The existing [visual hierarchy and layout reference](./visual-hierarchy-layout.md) covers shadow, z-index, whitespace, asymmetry, and the 12-column grid - the *applied* surface of layout. This file gives the upstream foundation those rules silently assume: rule of thirds, the golden ratio and root rectangles, Fibonacci, focal-point construction, visual-weight calculus, optical-vs-mathematical centering, and the Z / F / Gutenberg eye-flow patterns. Where `visual-hierarchy-layout.md` says "place the CTA where the eye lands", this file replaces that hand-wave with explicit grids, ratios, weight formulas, and detection signatures an audit can grep for.
|
|
13
13
|
|
|
14
|
-
This is the file an agent should consult any time it is *constructing* a layout
|
|
14
|
+
This is the file an agent should consult any time it is *constructing* a layout - choosing a grid, placing a focal point, balancing two halves of a composition, centering a glyph next to text, or deciding which eye-flow archetype a page should follow.
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
18
|
## Rule of Thirds
|
|
19
19
|
|
|
20
|
-
The rule of thirds divides any canvas into a 3×3 grid with two horizontal and two vertical lines at the 33% and 67% marks. The four intersections of those lines are the *power points*
|
|
20
|
+
The rule of thirds divides any canvas into a 3×3 grid with two horizontal and two vertical lines at the 33% and 67% marks. The four intersections of those lines are the *power points* - the locations the eye lands when scanning a composition. Placing a focal element exactly on a power point produces a layout that reads as deliberate and balanced; placing it at dead-center produces a layout that reads as static and posed. The rule is not a law; it is a default that holds until a stronger compositional intent overrides it (centered hero, symmetric mirror, single-axis radial).
|
|
21
21
|
|
|
22
22
|
**Audit detection signature.** Grep for grid declarations using third-fractions, then check whether a focal element (large heading, primary CTA, hero image) sits near one of the four intersections:
|
|
23
23
|
|
|
@@ -61,17 +61,17 @@ grep -rE "grid-template-columns:\s*1fr\s+1fr\s+1fr|33%|66%|33\.33%|66\.66%" src/
|
|
|
61
61
|
</style>
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
The CTA sits at the lower-right intersection
|
|
64
|
+
The CTA sits at the lower-right intersection - the natural Z-pattern terminus (see [§Eye-Flow Patterns](#eye-flow-patterns)). The headline anchors the upper-left third where reading begins.
|
|
65
65
|
|
|
66
66
|
---
|
|
67
67
|
|
|
68
68
|
## Golden Ratio and Root Rectangles
|
|
69
69
|
|
|
70
|
-
Beyond thirds, four irrational ratios govern compositions that need to feel *proportional* rather than *gridded*: φ (the golden ratio), √2, √3, and √5. Each rectangle has a different subdivision behavior
|
|
70
|
+
Beyond thirds, four irrational ratios govern compositions that need to feel *proportional* rather than *gridded*: φ (the golden ratio), √2, √3, and √5. Each rectangle has a different subdivision behavior - when you remove the largest possible square from inside it, the remainder has a specific relationship to the original. φ produces another φ-rectangle (infinitely self-similar - the source of the golden spiral). √2 produces a rectangle that, when folded in half, is still √2 (the math behind A0 / A1 / A2 paper). √3 produces a √3 / 2 rectangle. √5 produces two squares plus a φ-rectangle and is the bridge from integer roots back to φ via the identity `φ = (1 + √5) / 2`.
|
|
71
71
|
|
|
72
72
|
### φ-Grid (Golden Ratio)
|
|
73
73
|
|
|
74
|
-
φ ≈ 1.618. A φ-rectangle has its short side to long side in ratio `1 : 1.618`. When the same ratio governs the relationship between a sidebar and main content, an image and its caption block, or a heading and its body text, the layout reads as *naturally weighted*
|
|
74
|
+
φ ≈ 1.618. A φ-rectangle has its short side to long side in ratio `1 : 1.618`. When the same ratio governs the relationship between a sidebar and main content, an image and its caption block, or a heading and its body text, the layout reads as *naturally weighted* - neither cramped nor empty. The catch is that φ is opinionated: it pulls compositions toward warmth and editorial feel, away from grid-locked rigidity. Use it where the design wants to feel hand-tuned, not where it must align to a strict baseline grid.
|
|
75
75
|
|
|
76
76
|
```css
|
|
77
77
|
/* φ-grid — sidebar:content ratio of 1:1.618 */
|
|
@@ -88,7 +88,7 @@ Beyond thirds, four irrational ratios govern compositions that need to feel *pro
|
|
|
88
88
|
}
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
-
### Root Rectangles
|
|
91
|
+
### Root Rectangles - √2, √3, √5
|
|
92
92
|
|
|
93
93
|
| Ratio | Value | Subdivision property | UI fit |
|
|
94
94
|
| ----- | ------ | ------------------------------------------------------- | --------------------------------------------------------------- |
|
|
@@ -115,35 +115,35 @@ Dynamic symmetry (Jay Hambidge, 1920) draws *armatures* inside root rectangles:
|
|
|
115
115
|
|
|
116
116
|
### Fibonacci
|
|
117
117
|
|
|
118
|
-
The Fibonacci sequence
|
|
118
|
+
The Fibonacci sequence - `1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …` - approaches φ as the ratio between consecutive terms (8 / 5 = 1.6; 13 / 8 = 1.625; 21 / 13 = 1.615). The square-rectangle subdivision pattern uses Fibonacci numbers as side lengths: a 1×1 square next to a 1×1 square forms a 1×2, append a 2×2 to make a 3×2, append a 3×3 to make a 5×3, and so on - each new square's side is the previous two added together. The diagonal through these squares traces the golden spiral.
|
|
119
119
|
|
|
120
|
-
In UI, Fibonacci numbers show up in two places: (a) spacing scales
|
|
120
|
+
In UI, Fibonacci numbers show up in two places: (a) spacing scales - `4 8 12 20 32 52 84` is a Fibonacci-flavored scale (and see [./visual-hierarchy-layout.md §Whitespace as Design Element](./visual-hierarchy-layout.md) for the applied scale); (b) content sizing where natural proportion matters more than strict alignment (a 5-column / 3-column / 2-column nested layout reads as proportional because consecutive Fibonacci pairs approach φ). Fibonacci is the *integer-friendly approximation of φ* - use it when you want φ's feel but need round numbers for token systems.
|
|
121
121
|
|
|
122
122
|
---
|
|
123
123
|
|
|
124
124
|
## Focal-Point Construction
|
|
125
125
|
|
|
126
|
-
Every composition declares 0, 1, or 2+ focal points. A composition with 0 focal points reads as a pattern or texture
|
|
126
|
+
Every composition declares 0, 1, or 2+ focal points. A composition with 0 focal points reads as a pattern or texture - fine for backgrounds, wrong for content. A composition with too many focal points reads as noisy and unfocused. Choosing the right count is the first compositional decision; placing them on a power point or armature anchor is the second.
|
|
127
127
|
|
|
128
128
|
### Single-Focal
|
|
129
129
|
|
|
130
|
-
One element dominates
|
|
130
|
+
One element dominates - significantly larger, higher contrast, more isolated, or more saturated than every sibling. The eye lands once and stays. Fits archetypes where there is exactly one decision to make or one piece of information to absorb.
|
|
131
131
|
|
|
132
132
|
- **UI archetypes:** landing hero, empty state, error page, sign-in / sign-up form, paywall, confirmation modal, onboarding step.
|
|
133
133
|
- **Audit detection:** one element scores ≥ 1.5× the visual weight of every other element on the page (see [§Visual-Weight Calculus](#visual-weight-calculus)).
|
|
134
|
-
- **Common failure:** decorative imagery competing with the primary CTA
|
|
134
|
+
- **Common failure:** decorative imagery competing with the primary CTA - image and CTA weight scores within 10%, eye bounces between them.
|
|
135
135
|
|
|
136
136
|
### Dual-Focal
|
|
137
137
|
|
|
138
|
-
Two elements compete intentionally
|
|
138
|
+
Two elements compete intentionally - same weight, placed at opposite power points or mirrored across an axis. The eye is invited to compare. Fits archetypes where the user is choosing between exactly two paths.
|
|
139
139
|
|
|
140
140
|
- **UI archetypes:** pricing compare view (basic vs. pro), before/after slider, plan-A vs. plan-B, A/B testimonial pair, fork-in-the-road CTA (Login | Sign Up).
|
|
141
141
|
- **Audit detection:** exactly two elements with visual weights within 10% of each other and weights ≥ 2× the third-heaviest element; they sit on opposing thirds-power-points or mirror axes.
|
|
142
|
-
- **Common failure:** the two focal elements drift in weight as one gets a "recommended" badge
|
|
142
|
+
- **Common failure:** the two focal elements drift in weight as one gets a "recommended" badge - what was dual-focal becomes single-focal with a decorative competitor.
|
|
143
143
|
|
|
144
144
|
### Distributed
|
|
145
145
|
|
|
146
|
-
Three or more elements share weight
|
|
146
|
+
Three or more elements share weight - none dominates, all are roughly equal. The eye scans rather than locks on. Fits archetypes built around browse-and-select rather than read-and-act.
|
|
147
147
|
|
|
148
148
|
- **UI archetypes:** dashboard (multiple cards / KPIs / charts), gallery, product grid, settings index, file browser, kanban board.
|
|
149
149
|
- **Audit detection:** ≥ 3 elements with visual weights all within 25% of each other; total visual weight is high but no single element exceeds 1.3× the median.
|
|
@@ -153,7 +153,7 @@ Three or more elements share weight — none dominates, all are roughly equal. T
|
|
|
153
153
|
|
|
154
154
|
## Visual-Weight Calculus
|
|
155
155
|
|
|
156
|
-
Visual weight is the *perceived heaviness* of an element
|
|
156
|
+
Visual weight is the *perceived heaviness* of an element - how strongly the eye is pulled to it relative to neighbors. It is the product of four factors, each normalized to 0..1:
|
|
157
157
|
|
|
158
158
|
```text
|
|
159
159
|
weight = size × contrast × isolation × complexity
|
|
@@ -162,11 +162,11 @@ weight = size × contrast × isolation × complexity
|
|
|
162
162
|
- **Size** (0..1): the element's area normalized against the largest element on the page. A hero headline at full container width might be 1.0; a footer link at 12px might be 0.05.
|
|
163
163
|
- **Contrast** (0..1): luminance contrast against the immediate background, normalized against the page's maximum contrast pair. Black on white is 1.0; mid-gray on light-gray might be 0.2.
|
|
164
164
|
- **Isolation** (0..1): empty-space margin around the element, normalized against the largest margin on the page. Generous whitespace lifts the score; cramped neighbors lower it.
|
|
165
|
-
- **Complexity** (0..1): internal structure
|
|
165
|
+
- **Complexity** (0..1): internal structure - an image with detail scores higher than a flat color block of the same size; a button with an icon plus a label plus a chevron scores higher than a plain text link.
|
|
166
166
|
|
|
167
|
-
The formula is multiplicative because each factor is necessary
|
|
167
|
+
The formula is multiplicative because each factor is necessary - an element with massive size but zero contrast (white text on white) has zero visual weight, regardless of isolation or complexity.
|
|
168
168
|
|
|
169
|
-
### Worked Example
|
|
169
|
+
### Worked Example - 3 elements in a landing hero
|
|
170
170
|
|
|
171
171
|
Suppose a hero contains a headline, a primary CTA, and a secondary text link.
|
|
172
172
|
|
|
@@ -178,7 +178,7 @@ Suppose a hero contains a headline, a primary CTA, and a secondary text link.
|
|
|
178
178
|
|
|
179
179
|
The headline dominates (weight ≈ 0.2), the CTA is secondary (≈ 0.1, half the headline), the text link is near-invisible (≈ 0.002, two orders of magnitude lighter). This is correct for a hero that wants the user to read the headline, then act on the CTA, with the text link as a low-stakes escape hatch.
|
|
180
180
|
|
|
181
|
-
### "Balanced"
|
|
181
|
+
### "Balanced" - defined numerically
|
|
182
182
|
|
|
183
183
|
A two-sided composition is **balanced** when the sum of visual weights on each side of the optical center is within ~20% of the other. Three or more elements distributed are balanced when no single element exceeds 1.3× the median weight (see distributed-focal detection above).
|
|
184
184
|
|
|
@@ -193,19 +193,19 @@ A two-sided composition is **balanced** when the sum of visual weights on each s
|
|
|
193
193
|
# 5. If left_sum > 1.5 × right_sum (or right > 1.5 × left), flag IMBALANCED.
|
|
194
194
|
```
|
|
195
195
|
|
|
196
|
-
The 1.5× threshold catches obvious imbalance; the 20%-of-each-other rule is the *target* a balanced composition aims for. The gap between 20% and 50% is where a human designer's eye is needed
|
|
196
|
+
The 1.5× threshold catches obvious imbalance; the 20%-of-each-other rule is the *target* a balanced composition aims for. The gap between 20% and 50% is where a human designer's eye is needed - the formula declares "not obviously broken", not "definitively good".
|
|
197
197
|
|
|
198
198
|
---
|
|
199
199
|
|
|
200
200
|
## Optical vs. Mathematical Centering
|
|
201
201
|
|
|
202
|
-
The pixel center of a bounding box is rarely the visual center of the *thing inside the box*. Glyphs have asymmetric ink distribution; icons have asymmetric stroke weight; characters have descenders, ascenders, cap-height, and x-height that do not all line up with the box edges. Mathematical centering
|
|
202
|
+
The pixel center of a bounding box is rarely the visual center of the *thing inside the box*. Glyphs have asymmetric ink distribution; icons have asymmetric stroke weight; characters have descenders, ascenders, cap-height, and x-height that do not all line up with the box edges. Mathematical centering - `display: flex; align-items: center; justify-content: center;` - produces a result that *looks* off-center to the eye in three common cases:
|
|
203
203
|
|
|
204
204
|
- An icon glyph with directional weight (a play triangle pointing right has more ink on the left half of its bounding box and reads as shifted-left when math-centered).
|
|
205
|
-
- A button label aligned next to an icon
|
|
206
|
-
- Mixed cap-height + x-height text aligned to a baseline
|
|
205
|
+
- A button label aligned next to an icon - the label's x-height pulls the label's optical center *below* the icon's optical center.
|
|
206
|
+
- Mixed cap-height + x-height text aligned to a baseline - capitals look "too high" because their cap-height extends above the x-height where the eye expects the line to live.
|
|
207
207
|
|
|
208
|
-
### Asymmetric Glyph Weight
|
|
208
|
+
### Asymmetric Glyph Weight - the −1px nudge
|
|
209
209
|
|
|
210
210
|
A right-pointing play triangle visually balances when its bounding box is shifted ~1 px (or 1.5–2 px at larger sizes) to the *right* of the mathematical center. The shift accounts for the empty wedge on the triangle's right side.
|
|
211
211
|
|
|
@@ -228,7 +228,7 @@ See [./iconography.md](./iconography.md) §1 "Optical Sizing & Stroke Weight" fo
|
|
|
228
228
|
|
|
229
229
|
### Cap-Height vs. X-Height Alignment
|
|
230
230
|
|
|
231
|
-
When a label sits next to an icon, the icon should align to the **cap-height** of capital letters in the label
|
|
231
|
+
When a label sits next to an icon, the icon should align to the **cap-height** of capital letters in the label - not the x-height of lowercase, not the baseline. The eye reads the icon's center against the strongest vertical anchor in the type, and cap-height is that anchor. Aligning to x-height makes the icon look "low"; aligning to baseline makes it look "too low".
|
|
232
232
|
|
|
233
233
|
```css
|
|
234
234
|
/* Button with leading icon — align icon to cap-height of label */
|
|
@@ -251,7 +251,7 @@ When a label sits next to an icon, the icon should align to the **cap-height** o
|
|
|
251
251
|
align-items: center with line-height: 1 keeps the icon at cap-center. */
|
|
252
252
|
```
|
|
253
253
|
|
|
254
|
-
The cap-height anchor logic is one half of the story; the other half
|
|
254
|
+
The cap-height anchor logic is one half of the story; the other half - modular scale, x-height ratios per typeface - lives in [./typography.md](./typography.md) §Type Scale Systems and §Modular Scale.
|
|
255
255
|
|
|
256
256
|
---
|
|
257
257
|
|
|
@@ -259,7 +259,7 @@ The cap-height anchor logic is one half of the story; the other half — modular
|
|
|
259
259
|
|
|
260
260
|
A page is not read pixel-by-pixel. The eye follows one of three default patterns shaped by reading direction (LTR Western languages assumed; RTL mirrors these horizontally), content density, and the kind of decision the user is making. Designing *against* the dominant pattern produces friction; designing *with* it produces effortless scanning.
|
|
261
261
|
|
|
262
|
-
### Z-Pattern
|
|
262
|
+
### Z-Pattern - landing pages, conversion flows
|
|
263
263
|
|
|
264
264
|
The Z-pattern fits sparse, hero-led pages with a clear call to action. The eye lands top-left (logo / brand), sweeps top-right (secondary nav / brand CTA), diagonals down-left (hero headline / body), then sweeps bottom-right (primary CTA terminus). Each anchor of the Z gets one element; the diagonal is the "story" connecting them.
|
|
265
265
|
|
|
@@ -279,11 +279,11 @@ The Z-pattern fits sparse, hero-led pages with a clear call to action. The eye l
|
|
|
279
279
|
└──────────────────────────────────────────────────────────────┘
|
|
280
280
|
```
|
|
281
281
|
|
|
282
|
-
Pair with single-focal-point construction (the CTA at the lower-right power point
|
|
282
|
+
Pair with single-focal-point construction (the CTA at the lower-right power point - same coordinate as the rule-of-thirds example above).
|
|
283
283
|
|
|
284
|
-
### F-Pattern
|
|
284
|
+
### F-Pattern - content-heavy, scanning surfaces
|
|
285
285
|
|
|
286
|
-
The F-pattern fits dense pages a user scans rather than reads
|
|
286
|
+
The F-pattern fits dense pages a user scans rather than reads - search results, news feeds, documentation, settings pages, listings. The eye sweeps horizontally across the top, drops to a shorter horizontal sweep mid-page, then runs vertically down the left edge sampling row-openers. Headings, leading icons, and the first 2–3 words of each row do the heaviest signaling work; deep right-side content gets skipped.
|
|
287
287
|
|
|
288
288
|
```txt
|
|
289
289
|
┌──────────────────────────────────────────────────────────────┐
|
|
@@ -303,9 +303,9 @@ The F-pattern fits dense pages a user scans rather than reads — search results
|
|
|
303
303
|
|
|
304
304
|
Pair with distributed-focal-point construction. Front-load row-openers (titles, leading icons, status indicators) on the left edge. Avoid burying critical information on the right side of rows; the eye does not look there.
|
|
305
305
|
|
|
306
|
-
### Gutenberg Diagram
|
|
306
|
+
### Gutenberg Diagram - editorial, reading-heavy
|
|
307
307
|
|
|
308
|
-
The Gutenberg diagram applies to text-dense reading surfaces
|
|
308
|
+
The Gutenberg diagram applies to text-dense reading surfaces - long-form articles, blog posts, terms-of-service pages, documentation prose. The eye follows a *reading gravity* from the top-left (primary optical area) diagonally to the bottom-right (terminal area), and the two off-diagonal quadrants - top-right (strong fallow area) and bottom-left (weak fallow area) - receive much less attention. Placing critical information in the fallow areas guarantees it goes unread.
|
|
309
309
|
|
|
310
310
|
```txt
|
|
311
311
|
┌──────────────────────────────────────────────────────────────┐
|
|
@@ -323,7 +323,7 @@ The Gutenberg diagram applies to text-dense reading surfaces — long-form artic
|
|
|
323
323
|
└──────────────────────────────────────────────────────────────┘
|
|
324
324
|
```
|
|
325
325
|
|
|
326
|
-
Pair with single-focal-point construction. The terminal area is the natural home for a "next" action
|
|
326
|
+
Pair with single-focal-point construction. The terminal area is the natural home for a "next" action - a Read More link, a Subscribe CTA, a tip-jar button. Critical content does NOT go in either fallow area.
|
|
327
327
|
|
|
328
328
|
### Choosing the pattern
|
|
329
329
|
|
|
@@ -342,8 +342,8 @@ For RTL languages (Arabic, Hebrew, Urdu, Farsi) the Z-pattern and Gutenberg diag
|
|
|
342
342
|
|
|
343
343
|
## Cross-References
|
|
344
344
|
|
|
345
|
-
- [./visual-hierarchy-layout.md](./visual-hierarchy-layout.md)
|
|
346
|
-
- [./iconography.md](./iconography.md)
|
|
347
|
-
- [./typography.md](./typography.md)
|
|
345
|
+
- [./visual-hierarchy-layout.md](./visual-hierarchy-layout.md) - §Compositional Grids (responsive column + baseline grid) and §Asymmetry and Rhythm; composition is the upstream foundation that file assumes.
|
|
346
|
+
- [./iconography.md](./iconography.md) - §1 Optical Sizing & Stroke Weight; the optical-centering rules in this file apply directly to icon glyphs.
|
|
347
|
+
- [./typography.md](./typography.md) - §Type Scale Systems and §Modular Scale; the cap-height vs. x-height alignment rule depends on those scale relationships.
|
|
348
348
|
|
|
349
349
|
Reciprocal inbound cross-links land in Phase 28-06 (additive-only, D-06).
|
|
@@ -118,7 +118,7 @@ Stages are the only code that read `.design/config.json`. When spawning an agent
|
|
|
118
118
|
2. Injects it into the agent prompt (e.g., `model_profile: balanced`) so the agent can reason about its own budget.
|
|
119
119
|
3. Selects the concrete model per the profile table above and passes it to the `Task` tool.
|
|
120
120
|
|
|
121
|
-
Agents never read config directly
|
|
121
|
+
Agents never read config directly - the profile is always injected at spawn time.
|
|
122
122
|
|
|
123
123
|
## .design/budget.json Schema (Phase 10.1)
|
|
124
124
|
|
|
@@ -205,17 +205,17 @@ Resolution order for the per-spawn cap:
|
|
|
205
205
|
1. If `complexity_class` is in `tool_input.context.router_decision` AND `class_caps_usd[class]` is a positive finite number → use it.
|
|
206
206
|
2. Otherwise → use `per_task_cap_usd`.
|
|
207
207
|
|
|
208
|
-
Class `S` is special: when `complexity_class === "S"` is supplied to the hook, enforcement is skipped entirely (no cap check, no auto-downgrade)
|
|
208
|
+
Class `S` is special: when `complexity_class === "S"` is supplied to the hook, enforcement is skipped entirely (no cap check, no auto-downgrade) - class-S commands typically short-circuit the router upstream so this hook never runs at all; the explicit S handling is the defensive path. See `skills/router/SKILL.md` for the canonical `S → fast (short-circuited)`, `M → fast`, `L → quick`, `XL → full` mapping.
|
|
209
209
|
|
|
210
|
-
`per_phase_cap_usd` is unchanged by this field
|
|
210
|
+
`per_phase_cap_usd` is unchanged by this field - phase-cumulative enforcement always uses the global per-phase cap regardless of class.
|
|
211
211
|
|
|
212
212
|
## Bootstrap behavior
|
|
213
213
|
|
|
214
|
-
If `.design/budget.json` is missing when any `/gdd:*` command runs, `scripts/bootstrap.sh` writes the Default Config values (per D-12). Don't block the spawn
|
|
214
|
+
If `.design/budget.json` is missing when any `/gdd:*` command runs, `scripts/bootstrap.sh` writes the Default Config values (per D-12). Don't block the spawn - defaults are sensible.
|
|
215
215
|
|
|
216
216
|
## .design/telemetry/costs.jsonl + .design/agent-metrics.json (Phase 10.1)
|
|
217
217
|
|
|
218
|
-
Phase 10.1 introduces two measurement artifacts written by `hooks/budget-enforcer.js` (PreToolUse on `Agent` spawns) and `scripts/aggregate-agent-metrics.ts` (detached child of the hook + refresh step of `/gdd:optimize`). Both files live under the gitignored `.design/` directory
|
|
218
|
+
Phase 10.1 introduces two measurement artifacts written by `hooks/budget-enforcer.js` (PreToolUse on `Agent` spawns) and `scripts/aggregate-agent-metrics.ts` (detached child of the hook + refresh step of `/gdd:optimize`). Both files live under the gitignored `.design/` directory - they are local session state, not committed.
|
|
219
219
|
|
|
220
220
|
### .design/telemetry/costs.jsonl
|
|
221
221
|
|
|
@@ -239,21 +239,21 @@ Append-only ledger. One JSON object per line. Written by `hooks/budget-enforcer.
|
|
|
239
239
|
|
|
240
240
|
**Extra diagnostic fields** (optional; Phase 11 reflector ignores unknown fields gracefully):
|
|
241
241
|
|
|
242
|
-
- `tier_downgraded: <bool>`
|
|
243
|
-
- `enforcement_mode: <"enforce" | "warn" | "log">`
|
|
244
|
-
- `lazy_skipped: <bool>`
|
|
245
|
-
- `block_reason: <"per_task_cap" | "per_phase_cap">`
|
|
242
|
+
- `tier_downgraded: <bool>` - set when soft-threshold downgrade fired (D-03).
|
|
243
|
+
- `enforcement_mode: <"enforce" | "warn" | "log">` - mirrors `.design/budget.json.enforcement_mode` at the time of decision.
|
|
244
|
+
- `lazy_skipped: <bool>` - set when plan 10.1-04 gate agent declined to spawn the full checker.
|
|
245
|
+
- `block_reason: <"per_task_cap" | "per_phase_cap">` - set when hook blocked the spawn.
|
|
246
246
|
|
|
247
247
|
**Guarantees:**
|
|
248
248
|
|
|
249
|
-
- Writes are `fs.appendFileSync`
|
|
249
|
+
- Writes are `fs.appendFileSync` - OS-level atomic per line.
|
|
250
250
|
- The file is **never truncated or rotated** by the hook in v1. Log rotation is a Phase 12 concern.
|
|
251
|
-
- Consumers must be tolerant of malformed lines (partial writes from crashed processes)
|
|
252
|
-
- Rows log only token counts, agent name, tier, cost, cycle, phase. **No prompt or response content is logged**
|
|
251
|
+
- Consumers must be tolerant of malformed lines (partial writes from crashed processes) - skip-and-continue is the canonical pattern.
|
|
252
|
+
- Rows log only token counts, agent name, tier, cost, cycle, phase. **No prompt or response content is logged** - the schema is information-disclosure-safe by construction.
|
|
253
253
|
|
|
254
254
|
### .design/agent-metrics.json
|
|
255
255
|
|
|
256
|
-
Per-agent aggregate derived from `costs.jsonl` by `scripts/aggregate-agent-metrics.ts`. Written atomically via tmp-file + rename. Overwritten in full on every refresh
|
|
256
|
+
Per-agent aggregate derived from `costs.jsonl` by `scripts/aggregate-agent-metrics.ts`. Written atomically via tmp-file + rename. Overwritten in full on every refresh - not append-only. Consumers should treat it as a snapshot.
|
|
257
257
|
|
|
258
258
|
**Schema:**
|
|
259
259
|
|
|
@@ -279,8 +279,8 @@ Per-agent aggregate derived from `costs.jsonl` by `scripts/aggregate-agent-metri
|
|
|
279
279
|
|
|
280
280
|
**Field sources:**
|
|
281
281
|
|
|
282
|
-
- `typical_duration_seconds`, `default_tier`, `parallel_safe`, `reads_only`
|
|
283
|
-
- `total_spawns`, `total_cost_usd`, `total_tokens_in`, `total_tokens_out`
|
|
282
|
+
- `typical_duration_seconds`, `default_tier`, `parallel_safe`, `reads_only` - read from `agents/{agent}.md` frontmatter (kebab-case in the markdown; re-keyed to snake_case in JSON). Null if the agent file is absent or the field is missing.
|
|
283
|
+
- `total_spawns`, `total_cost_usd`, `total_tokens_in`, `total_tokens_out` - summed across all `costs.jsonl` rows for this agent.
|
|
284
284
|
- `cache_hit_rate = cache_hits / total_spawns` (clamped when total_spawns = 0).
|
|
285
285
|
- `lazy_skip_rate = lazy_skips / total_spawns` (same).
|
|
286
286
|
|
|
@@ -292,11 +292,11 @@ Both files sit inside `.design/`, which is already `.gitignore`d at the project
|
|
|
292
292
|
|
|
293
293
|
### Refresh cadence
|
|
294
294
|
|
|
295
|
-
The aggregator is invoked as a detached child process by `hooks/budget-enforcer.js` after every telemetry row write. It is also invoked directly by `/gdd:optimize` before analysis. There is no cron, no daemon, and no scheduled task
|
|
295
|
+
The aggregator is invoked as a detached child process by `hooks/budget-enforcer.js` after every telemetry row write. It is also invoked directly by `/gdd:optimize` before analysis. There is no cron, no daemon, and no scheduled task - metrics are always at most one spawn stale.
|
|
296
296
|
|
|
297
297
|
## .design/cache-manifest.json Schema (Phase 10.1)
|
|
298
298
|
|
|
299
|
-
Authored and maintained by `skills/cache-manager/SKILL.md`. Read by `hooks/budget-enforcer.js` (PreToolUse on Agent spawns) for short-circuiting cached spawns per D-05. Layer B of the D-08 two-layer cache. Flat KV shape
|
|
299
|
+
Authored and maintained by `skills/cache-manager/SKILL.md`. Read by `hooks/budget-enforcer.js` (PreToolUse on Agent spawns) for short-circuiting cached spawns per D-05. Layer B of the D-08 two-layer cache. Flat KV shape - keys are SHA-256 hex of the deterministic input-hash, values are entry objects. Schema version 1.
|
|
300
300
|
|
|
301
301
|
## Full Schema
|
|
302
302
|
|
|
@@ -333,28 +333,28 @@ Authored and maintained by `skills/cache-manager/SKILL.md`. Read by `hooks/budge
|
|
|
333
333
|
|
|
334
334
|
### `agent`
|
|
335
335
|
|
|
336
|
-
String
|
|
336
|
+
String - the `agents/<name>.md` basename without extension (e.g., `design-verifier`). Human-readable debug aid; not essential for lookup.
|
|
337
337
|
|
|
338
338
|
### `result`
|
|
339
339
|
|
|
340
|
-
String
|
|
340
|
+
String - either (a) a base64-encoded blob (for small results, typically < 16KB), or (b) a filesystem path under `.design/cache-blobs/<sha-prefix>.md` for larger results. Writers choose based on size; readers handle both transparently.
|
|
341
341
|
|
|
342
342
|
### `written_at`
|
|
343
343
|
|
|
344
|
-
String
|
|
344
|
+
String - ISO-8601 UTC timestamp at write time. Produced by `new Date().toISOString()`.
|
|
345
345
|
|
|
346
346
|
### `ttl_seconds`
|
|
347
347
|
|
|
348
|
-
Integer
|
|
348
|
+
Integer - copied from `.design/budget.json.cache_ttl_seconds` at write time (default 3600). Preserved in the entry so a later budget.json change does not retroactively invalidate or extend existing entries.
|
|
349
349
|
|
|
350
350
|
### `expires_at`
|
|
351
351
|
|
|
352
|
-
String
|
|
352
|
+
String - ISO-8601 UTC timestamp equal to `written_at + ttl_seconds`. Precomputed at write time; readers never recompute. Stale entries (`Date.now() > expires_at`) are treated as misses.
|
|
353
353
|
|
|
354
354
|
## TTL semantics
|
|
355
355
|
|
|
356
356
|
- TTL default source: `.design/budget.json.cache_ttl_seconds` (default 3600s = 1 hour, per Plan 10.1-01 schema).
|
|
357
|
-
- TTL is copied into each entry at write time
|
|
357
|
+
- TTL is copied into each entry at write time - **not** recomputed on read. Budget.json changes do not retroactively affect existing entries.
|
|
358
358
|
- `expires_at` = `written_at + ttl_seconds`, computed once, stored in the entry.
|
|
359
359
|
- Stale entries are **not** actively purged (lazy cleanup): they remain in the file until overwritten by a new write with the same key, or pruned manually. A proactive reaper is out of v1 scope.
|
|
360
360
|
- Readers (`hooks/budget-enforcer.js`) check `Date.now() / 1000 > Date.parse(expires_at) / 1000`; if true, return miss.
|
|
@@ -362,43 +362,43 @@ String — ISO-8601 UTC timestamp equal to `written_at + ttl_seconds`. Precomput
|
|
|
362
362
|
## Read/Write contract
|
|
363
363
|
|
|
364
364
|
- **Single writer**: `skills/cache-manager/SKILL.md` Phase 4 (`write-result-on-completion`). Other code must not write this file directly.
|
|
365
|
-
- **Multiple readers**: `hooks/budget-enforcer.js`, any orchestrator that runs Phase 2 (`lookup`) for dry-run planning. Readers treat malformed JSON as "manifest absent" (empty cache)
|
|
365
|
+
- **Multiple readers**: `hooks/budget-enforcer.js`, any orchestrator that runs Phase 2 (`lookup`) for dry-run planning. Readers treat malformed JSON as "manifest absent" (empty cache) - do not throw.
|
|
366
366
|
- **Concurrency**: Claude Code agent spawns are serialized at the hook level (PreToolUse is synchronous). No file locking is needed at v1 scale. Concurrent writes from parallel orchestrators are theoretically possible but exceedingly rare; last-writer-wins is acceptable (cache miss on next read re-populates).
|
|
367
367
|
|
|
368
368
|
## Bootstrap behavior
|
|
369
369
|
|
|
370
|
-
If `.design/cache-manifest.json` is missing when `hooks/budget-enforcer.js` reads it, the hook treats every lookup as a miss and the spawn proceeds normally. No bootstrap action is required
|
|
370
|
+
If `.design/cache-manifest.json` is missing when `hooks/budget-enforcer.js` reads it, the hook treats every lookup as a miss and the spawn proceeds normally. No bootstrap action is required - the manifest is created lazily on first successful spawn when `skills/cache-manager/SKILL.md` Phase 4 fires. Unlike `.design/budget.json`, missing cache-manifest.json is the **correct** initial state on a fresh repo.
|
|
371
371
|
|
|
372
372
|
## Cross-references
|
|
373
373
|
|
|
374
|
-
- `skills/cache-manager/SKILL.md`
|
|
375
|
-
- `hooks/budget-enforcer.js` (Plan 10.1-01)
|
|
376
|
-
- `.design/budget.json`
|
|
377
|
-
- `.design/telemetry/costs.jsonl` (Plan 10.1-05)
|
|
378
|
-
- D-05, D-08, D-09 in `.planning/phases/10.1-optimization-layer-cost-governance/10.1-CONTEXT.md`
|
|
374
|
+
- `skills/cache-manager/SKILL.md` - producer; documents the four-phase contract.
|
|
375
|
+
- `hooks/budget-enforcer.js` (Plan 10.1-01) - reader; short-circuits spawns on hit.
|
|
376
|
+
- `.design/budget.json` - provides `cache_ttl_seconds` default.
|
|
377
|
+
- `.design/telemetry/costs.jsonl` (Plan 10.1-05) - records `cache_hit: true` rows with zero tokens and zero cost when the short-circuit fires.
|
|
378
|
+
- D-05, D-08, D-09 in `.planning/phases/10.1-optimization-layer-cost-governance/10.1-CONTEXT.md` - decision lineage.
|
|
379
379
|
|
|
380
380
|
## Team collaboration (Phase 40)
|
|
381
381
|
|
|
382
|
-
Three optional top-level `.design/config.json` keys enable team mode. All are absent/off by default
|
|
382
|
+
Three optional top-level `.design/config.json` keys enable team mode. All are absent/off by default -
|
|
383
383
|
single-operator projects are unaffected. Full contract: `reference/multi-author-model.md`.
|
|
384
384
|
|
|
385
|
-
- **`gdd_cycle_mode`** (`designer` | `dev` | `full`, default `full`)
|
|
385
|
+
- **`gdd_cycle_mode`** (`designer` | `dev` | `full`, default `full`) - sectional handoff. `designer`
|
|
386
386
|
permits Brief + Explore writes; `dev` permits Plan + Design + Verify; `full` = all stages.
|
|
387
387
|
`scripts/lib/collab/cycle-mode.cjs` `stagePermitted(mode, stage)` gates STATE writes by stage.
|
|
388
|
-
- **`permissions`**
|
|
388
|
+
- **`permissions`** - per-section write permissions (`scripts/lib/collab/permissions.cjs`). Permissive
|
|
389
389
|
by default (absent = everyone `owner`). Shape: `{ default, actors: {<actor>: <role>}, rules:
|
|
390
390
|
[{section, action, roles}] }`, roles in `owner|contributor|reviewer|viewer`. A rule restricts a
|
|
391
391
|
`(section, action)` to its listed roles; an unruled pair is allowed. `viewer` never mutates. A CI
|
|
392
392
|
gate calls `can(config, actor, section, action)` to enforce on PRs.
|
|
393
|
-
- **`collab`**
|
|
393
|
+
- **`collab`** - `{ multi_writer_enabled (bool), lock_timeout_ms (int), sync_backend
|
|
394
394
|
(git|s3|git-lfs) }`. `multi_writer_enabled: true` switches the gdd-state advisory lock to the
|
|
395
|
-
team-mode policy (`scripts/lib/collab/lock-policy.cjs`
|
|
395
|
+
team-mode policy (`scripts/lib/collab/lock-policy.cjs` - 30 s wait + 100 ms backoff);
|
|
396
396
|
`sync_backend` selects the cross-machine `.design/` backend (`scripts/lib/collab/sync-backend.cjs`,
|
|
397
|
-
default `git`; `s3`/`git-lfs` are opt-in declarations
|
|
397
|
+
default `git`; `s3`/`git-lfs` are opt-in declarations - a live client is not bundled this phase).
|
|
398
398
|
|
|
399
399
|
## CLI localization (Phase 40.5)
|
|
400
400
|
|
|
401
|
-
- **`locale`** (`en`|`ru`|`uk`|`de`|`fr`|`zh`|`ja`)
|
|
401
|
+
- **`locale`** (`en`|`ru`|`uk`|`de`|`fr`|`zh`|`ja`) - overrides the language of GDD's own `--help`,
|
|
402
402
|
common error messages, and skill prompt headers. Set via `/gdd:locale <code>`. Precedence: this key >
|
|
403
403
|
env `LANG`/`LC_ALL` > `en`. Missing message keys fall back to English (`scripts/lib/i18n/index.cjs`,
|
|
404
404
|
chain `locale → base → en`); `en` + `ru` are complete, the other five are placeholders. Full
|