@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.
Files changed (425) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +1080 -1038
  4. package/README.md +157 -155
  5. package/SKILL.md +42 -42
  6. package/agents/README.md +53 -53
  7. package/agents/a11y-mapper.md +3 -3
  8. package/agents/component-benchmark-harvester.md +8 -8
  9. package/agents/component-benchmark-synthesizer.md +11 -11
  10. package/agents/component-taxonomy-mapper.md +5 -5
  11. package/agents/compose-executor.md +25 -25
  12. package/agents/conflict-resolver.md +8 -8
  13. package/agents/cost-forecaster.md +12 -12
  14. package/agents/decision-journal-exporter.md +5 -5
  15. package/agents/design-advisor.md +19 -19
  16. package/agents/design-assumptions-analyzer.md +16 -16
  17. package/agents/design-auditor.md +39 -39
  18. package/agents/design-authority-watcher.md +28 -28
  19. package/agents/design-component-generator.md +27 -27
  20. package/agents/design-context-builder.md +66 -66
  21. package/agents/design-context-checker-gate.md +5 -5
  22. package/agents/design-context-checker.md +20 -20
  23. package/agents/design-discussant.md +23 -23
  24. package/agents/design-doc-writer.md +12 -12
  25. package/agents/design-executor.md +38 -38
  26. package/agents/design-figma-writer.md +31 -31
  27. package/agents/design-fixer.md +27 -27
  28. package/agents/design-integration-checker-gate.md +5 -5
  29. package/agents/design-integration-checker.md +29 -29
  30. package/agents/design-paper-writer.md +14 -14
  31. package/agents/design-pattern-mapper.md +9 -9
  32. package/agents/design-pencil-writer.md +12 -12
  33. package/agents/design-phase-researcher.md +14 -14
  34. package/agents/design-plan-checker.md +13 -13
  35. package/agents/design-planner.md +24 -24
  36. package/agents/design-reflector.md +48 -48
  37. package/agents/design-research-synthesizer.md +21 -21
  38. package/agents/design-start-writer.md +7 -7
  39. package/agents/design-update-checker.md +8 -8
  40. package/agents/design-verifier-gate.md +5 -5
  41. package/agents/design-verifier.md +80 -80
  42. package/agents/ds-generator.md +14 -14
  43. package/agents/ds-migration-planner.md +12 -12
  44. package/agents/email-executor.md +26 -26
  45. package/agents/experiment-result-ingester.md +10 -10
  46. package/agents/flutter-executor.md +28 -28
  47. package/agents/gdd-graph-refresh.md +10 -10
  48. package/agents/gdd-intel-updater.md +11 -11
  49. package/agents/gdd-learnings-extractor.md +2 -2
  50. package/agents/motion-mapper.md +8 -8
  51. package/agents/motion-verifier.md +16 -16
  52. package/agents/pdf-executor.md +27 -27
  53. package/agents/perf-analyzer.md +20 -20
  54. package/agents/pr-commenter.md +24 -24
  55. package/agents/prototype-gate.md +29 -29
  56. package/agents/quality-gate-runner.md +21 -21
  57. package/agents/rollout-coordinator.md +8 -8
  58. package/agents/swift-executor.md +41 -41
  59. package/agents/ticket-sync-agent.md +19 -19
  60. package/agents/token-mapper.md +6 -6
  61. package/agents/user-research-synthesizer.md +13 -13
  62. package/agents/visual-hierarchy-mapper.md +2 -2
  63. package/dist/claude-code/.claude/skills/add-backlog/SKILL.md +3 -3
  64. package/dist/claude-code/.claude/skills/analyze-dependencies/SKILL.md +10 -10
  65. package/dist/claude-code/.claude/skills/apply-reflections/SKILL.md +13 -13
  66. package/dist/claude-code/.claude/skills/apply-reflections/apply-reflections-procedure.md +20 -20
  67. package/dist/claude-code/.claude/skills/audit/SKILL.md +7 -7
  68. package/dist/claude-code/.claude/skills/bandit-status/SKILL.md +7 -7
  69. package/dist/claude-code/.claude/skills/benchmark/SKILL.md +7 -7
  70. package/dist/claude-code/.claude/skills/bootstrap-ds/SKILL.md +10 -10
  71. package/dist/claude-code/.claude/skills/brief/SKILL.md +20 -20
  72. package/dist/claude-code/.claude/skills/budget/SKILL.md +4 -4
  73. package/dist/claude-code/.claude/skills/cache-manager/SKILL.md +6 -6
  74. package/dist/claude-code/.claude/skills/cache-manager/cache-policy.md +5 -5
  75. package/dist/claude-code/.claude/skills/check-update/SKILL.md +5 -5
  76. package/dist/claude-code/.claude/skills/compare/SKILL.md +15 -15
  77. package/dist/claude-code/.claude/skills/compare/compare-rubric.md +17 -17
  78. package/dist/claude-code/.claude/skills/complete-cycle/SKILL.md +5 -5
  79. package/dist/claude-code/.claude/skills/connections/SKILL.md +11 -11
  80. package/dist/claude-code/.claude/skills/connections/connections-onboarding.md +76 -76
  81. package/dist/claude-code/.claude/skills/continue/SKILL.md +2 -2
  82. package/dist/claude-code/.claude/skills/darkmode/SKILL.md +17 -17
  83. package/dist/claude-code/.claude/skills/darkmode/darkmode-audit-procedure.md +7 -7
  84. package/dist/claude-code/.claude/skills/debug/SKILL.md +3 -3
  85. package/dist/claude-code/.claude/skills/debug/debug-feedback-loops.md +12 -12
  86. package/dist/claude-code/.claude/skills/design/SKILL.md +12 -12
  87. package/dist/claude-code/.claude/skills/design/design-procedure.md +23 -23
  88. package/dist/claude-code/.claude/skills/discover/SKILL.md +7 -7
  89. package/dist/claude-code/.claude/skills/discover/discover-procedure.md +18 -18
  90. package/dist/claude-code/.claude/skills/discuss/SKILL.md +12 -12
  91. package/dist/claude-code/.claude/skills/do/SKILL.md +1 -1
  92. package/dist/claude-code/.claude/skills/explore/SKILL.md +21 -21
  93. package/dist/claude-code/.claude/skills/explore/explore-procedure.md +48 -48
  94. package/dist/claude-code/.claude/skills/export/SKILL.md +9 -9
  95. package/dist/claude-code/.claude/skills/extract-learnings/SKILL.md +5 -5
  96. package/dist/claude-code/.claude/skills/fast/SKILL.md +7 -7
  97. package/dist/claude-code/.claude/skills/figma-extract/SKILL.md +11 -11
  98. package/dist/claude-code/.claude/skills/figma-write/SKILL.md +6 -6
  99. package/dist/claude-code/.claude/skills/graphify/SKILL.md +4 -4
  100. package/dist/claude-code/.claude/skills/health/SKILL.md +16 -16
  101. package/dist/claude-code/.claude/skills/health/health-mcp-detection.md +3 -3
  102. package/dist/claude-code/.claude/skills/health/health-skill-length-report.md +6 -6
  103. package/dist/claude-code/.claude/skills/help/SKILL.md +1 -1
  104. package/dist/claude-code/.claude/skills/list-assumptions/SKILL.md +4 -4
  105. package/dist/claude-code/.claude/skills/map/SKILL.md +12 -12
  106. package/dist/claude-code/.claude/skills/migrate/SKILL.md +5 -5
  107. package/dist/claude-code/.claude/skills/new-cycle/SKILL.md +2 -2
  108. package/dist/claude-code/.claude/skills/new-cycle/milestone-completeness-rubric.md +16 -16
  109. package/dist/claude-code/.claude/skills/new-project/SKILL.md +1 -1
  110. package/dist/claude-code/.claude/skills/next/SKILL.md +5 -5
  111. package/dist/claude-code/.claude/skills/note/SKILL.md +1 -1
  112. package/dist/claude-code/.claude/skills/openrouter-status/SKILL.md +4 -4
  113. package/dist/claude-code/.claude/skills/optimize/SKILL.md +15 -15
  114. package/dist/claude-code/.claude/skills/pause/SKILL.md +5 -5
  115. package/dist/claude-code/.claude/skills/peer-cli-add/SKILL.md +11 -11
  116. package/dist/claude-code/.claude/skills/peer-cli-add/peer-cli-protocol.md +39 -39
  117. package/dist/claude-code/.claude/skills/peer-cli-customize/SKILL.md +14 -14
  118. package/dist/claude-code/.claude/skills/peers/SKILL.md +4 -4
  119. package/dist/claude-code/.claude/skills/plan/SKILL.md +13 -13
  120. package/dist/claude-code/.claude/skills/plan/plan-procedure.md +24 -24
  121. package/dist/claude-code/.claude/skills/plant-seed/SKILL.md +4 -4
  122. package/dist/claude-code/.claude/skills/pr-branch/SKILL.md +2 -2
  123. package/dist/claude-code/.claude/skills/progress/SKILL.md +15 -15
  124. package/dist/claude-code/.claude/skills/quality-gate/SKILL.md +22 -22
  125. package/dist/claude-code/.claude/skills/quality-gate/threat-modeling.md +19 -19
  126. package/dist/claude-code/.claude/skills/quick/SKILL.md +5 -5
  127. package/dist/claude-code/.claude/skills/reapply-patches/SKILL.md +7 -7
  128. package/dist/claude-code/.claude/skills/reflect/SKILL.md +3 -3
  129. package/dist/claude-code/.claude/skills/reflect/procedures/capability-gap-scan.md +11 -11
  130. package/dist/claude-code/.claude/skills/report-issue/SKILL.md +5 -5
  131. package/dist/claude-code/.claude/skills/report-issue/report-issue-procedure.md +27 -27
  132. package/dist/claude-code/.claude/skills/resume/SKILL.md +9 -9
  133. package/dist/claude-code/.claude/skills/review-backlog/SKILL.md +3 -3
  134. package/dist/claude-code/.claude/skills/review-decisions/SKILL.md +3 -3
  135. package/dist/claude-code/.claude/skills/roi/SKILL.md +5 -5
  136. package/dist/claude-code/.claude/skills/rollout-status/SKILL.md +4 -4
  137. package/dist/claude-code/.claude/skills/router/SKILL.md +11 -11
  138. package/dist/claude-code/.claude/skills/router/capability-gap-emitter.md +6 -6
  139. package/dist/claude-code/.claude/skills/router/router-pick-emitter.md +9 -9
  140. package/dist/claude-code/.claude/skills/router/router-rules.md +7 -7
  141. package/dist/claude-code/.claude/skills/scan/SKILL.md +16 -16
  142. package/dist/claude-code/.claude/skills/scan/scan-procedure.md +42 -42
  143. package/dist/claude-code/.claude/skills/settings/SKILL.md +2 -2
  144. package/dist/claude-code/.claude/skills/ship/SKILL.md +7 -7
  145. package/dist/claude-code/.claude/skills/sketch/SKILL.md +10 -10
  146. package/dist/claude-code/.claude/skills/sketch-wrap-up/SKILL.md +12 -12
  147. package/dist/claude-code/.claude/skills/skill-manifest/SKILL.md +5 -5
  148. package/dist/claude-code/.claude/skills/spike/SKILL.md +7 -7
  149. package/dist/claude-code/.claude/skills/spike-wrap-up/SKILL.md +13 -13
  150. package/dist/claude-code/.claude/skills/start/SKILL.md +8 -8
  151. package/dist/claude-code/.claude/skills/start/start-procedure.md +9 -9
  152. package/dist/claude-code/.claude/skills/stats/SKILL.md +5 -5
  153. package/dist/claude-code/.claude/skills/style/SKILL.md +12 -12
  154. package/dist/claude-code/.claude/skills/style/style-doc-procedure.md +12 -12
  155. package/dist/claude-code/.claude/skills/synthesize/SKILL.md +10 -10
  156. package/dist/claude-code/.claude/skills/timeline/SKILL.md +4 -4
  157. package/dist/claude-code/.claude/skills/todo/SKILL.md +3 -3
  158. package/dist/claude-code/.claude/skills/turn-closeout/SKILL.md +10 -10
  159. package/dist/claude-code/.claude/skills/unlock-decision/SKILL.md +3 -3
  160. package/dist/claude-code/.claude/skills/update/SKILL.md +9 -9
  161. package/dist/claude-code/.claude/skills/using-gdd/SKILL.md +17 -17
  162. package/dist/claude-code/.claude/skills/verify/SKILL.md +13 -13
  163. package/dist/claude-code/.claude/skills/verify/verify-procedure.md +34 -34
  164. package/dist/claude-code/.claude/skills/warm-cache/SKILL.md +8 -8
  165. package/dist/claude-code/.claude/skills/watch-authorities/SKILL.md +9 -9
  166. package/dist/claude-code/.claude/skills/zoom-out/SKILL.md +4 -4
  167. package/package.json +5 -2
  168. package/reference/DEPRECATIONS.md +10 -10
  169. package/reference/STATE-TEMPLATE.md +26 -26
  170. package/reference/accessibility.md +13 -13
  171. package/reference/adr-format.md +13 -13
  172. package/reference/ai-native-tool-interface.md +5 -5
  173. package/reference/anti-patterns.md +9 -9
  174. package/reference/architecture-vocabulary.md +31 -31
  175. package/reference/audit-scoring.md +13 -13
  176. package/reference/authority-feeds.md +36 -36
  177. package/reference/bandit-integration.md +25 -25
  178. package/reference/brand-voice.md +36 -36
  179. package/reference/capability-gap-stage-gate.md +20 -20
  180. package/reference/checklists.md +26 -26
  181. package/reference/cli-localization.md +13 -13
  182. package/reference/codex-tools.md +2 -2
  183. package/reference/color-theory.md +28 -28
  184. package/reference/component-authoring.md +4 -4
  185. package/reference/components/README.md +13 -13
  186. package/reference/components/TEMPLATE.md +13 -13
  187. package/reference/components/accordion.md +15 -15
  188. package/reference/components/alert.md +25 -25
  189. package/reference/components/badge.md +18 -18
  190. package/reference/components/breadcrumbs.md +24 -24
  191. package/reference/components/button.md +21 -21
  192. package/reference/components/card.md +13 -13
  193. package/reference/components/checkbox.md +20 -20
  194. package/reference/components/chip.md +20 -20
  195. package/reference/components/command-palette.md +15 -15
  196. package/reference/components/date-picker.md +22 -22
  197. package/reference/components/drawer.md +13 -13
  198. package/reference/components/file-upload.md +22 -22
  199. package/reference/components/input.md +18 -18
  200. package/reference/components/label.md +25 -25
  201. package/reference/components/link.md +19 -19
  202. package/reference/components/list.md +17 -17
  203. package/reference/components/menu.md +19 -19
  204. package/reference/components/modal-dialog.md +16 -16
  205. package/reference/components/navbar.md +19 -19
  206. package/reference/components/pagination.md +18 -18
  207. package/reference/components/popover.md +12 -12
  208. package/reference/components/progress.md +18 -18
  209. package/reference/components/radio.md +17 -17
  210. package/reference/components/rich-text-editor.md +24 -24
  211. package/reference/components/select-combobox.md +16 -16
  212. package/reference/components/sidebar.md +15 -15
  213. package/reference/components/skeleton.md +20 -20
  214. package/reference/components/slider.md +20 -20
  215. package/reference/components/stepper.md +24 -24
  216. package/reference/components/switch.md +19 -19
  217. package/reference/components/table.md +21 -21
  218. package/reference/components/tabs.md +11 -11
  219. package/reference/components/toast.md +19 -19
  220. package/reference/components/tooltip.md +19 -19
  221. package/reference/components/tree.md +17 -17
  222. package/reference/composition.md +38 -38
  223. package/reference/config-schema.md +37 -37
  224. package/reference/context-md-format.md +9 -9
  225. package/reference/contrast-advanced.md +29 -29
  226. package/reference/conversational-ui.md +17 -17
  227. package/reference/cost-governance.md +14 -14
  228. package/reference/css-grid-layout.md +8 -8
  229. package/reference/cycle-handoff-preamble.md +3 -3
  230. package/reference/data-visualization.md +67 -67
  231. package/reference/debugger-philosophy.md +5 -5
  232. package/reference/design-system-guidance.md +21 -21
  233. package/reference/design-systems-catalog.md +20 -20
  234. package/reference/design-variants.md +11 -11
  235. package/reference/domains/civic-patterns.md +10 -10
  236. package/reference/domains/finance-patterns.md +9 -9
  237. package/reference/domains/gaming-patterns.md +9 -9
  238. package/reference/domains/healthcare-patterns.md +11 -11
  239. package/reference/ds-bootstrap-rubric.md +13 -13
  240. package/reference/email-design.md +22 -22
  241. package/reference/emotional-design.md +10 -10
  242. package/reference/error-recovery.md +11 -11
  243. package/reference/export-formats.md +7 -7
  244. package/reference/figma-sandbox.md +6 -6
  245. package/reference/first-principles.md +10 -10
  246. package/reference/form-patterns.md +26 -26
  247. package/reference/framer-motion-patterns.md +49 -49
  248. package/reference/gdd-runtime-audit.md +17 -17
  249. package/reference/gdd-threat-model.md +44 -44
  250. package/reference/gemini-tools.md +3 -3
  251. package/reference/gestalt.md +24 -24
  252. package/reference/heuristics.md +32 -32
  253. package/reference/i18n.md +44 -44
  254. package/reference/iconography.md +24 -24
  255. package/reference/image-optimization.md +14 -14
  256. package/reference/information-architecture.md +47 -47
  257. package/reference/intel-schema.md +1 -1
  258. package/reference/known-failure-modes.md +37 -37
  259. package/reference/meta-rules.md +5 -5
  260. package/reference/migrations/material-3-to-4.md +17 -17
  261. package/reference/migrations/mui-v6.md +16 -16
  262. package/reference/migrations/shadcn-v2.md +25 -25
  263. package/reference/migrations/tailwind-v4.md +21 -21
  264. package/reference/model-prices.md +3 -3
  265. package/reference/model-tiers.md +40 -40
  266. package/reference/motion-advanced.md +21 -21
  267. package/reference/motion-easings.md +29 -29
  268. package/reference/motion-interpolate.md +1 -1
  269. package/reference/motion-spring.md +13 -13
  270. package/reference/motion-transition-taxonomy.md +34 -34
  271. package/reference/motion.md +31 -31
  272. package/reference/multi-author-model.md +13 -13
  273. package/reference/native-platforms.md +28 -28
  274. package/reference/notification-routing.md +6 -6
  275. package/reference/onboarding-progressive-disclosure.md +32 -32
  276. package/reference/openrouter-tier-mapping.md +8 -8
  277. package/reference/palette-catalog.md +37 -37
  278. package/reference/parallelism-rules.md +20 -20
  279. package/reference/peer-cli-capabilities.md +14 -14
  280. package/reference/peer-protocols.md +21 -21
  281. package/reference/perf-budget.md +21 -21
  282. package/reference/performance.md +22 -22
  283. package/reference/platforms.md +51 -51
  284. package/reference/pr-review-integration.md +7 -7
  285. package/reference/prices/antigravity.md +3 -3
  286. package/reference/prices/augment.md +3 -3
  287. package/reference/prices/claude.md +2 -2
  288. package/reference/prices/cline.md +4 -4
  289. package/reference/prices/codebuddy.md +3 -3
  290. package/reference/prices/codex.md +2 -2
  291. package/reference/prices/copilot.md +3 -3
  292. package/reference/prices/cursor.md +3 -3
  293. package/reference/prices/gemini.md +2 -2
  294. package/reference/prices/kilo.md +3 -3
  295. package/reference/prices/opencode.md +4 -4
  296. package/reference/prices/qwen.md +2 -2
  297. package/reference/prices/trae.md +3 -3
  298. package/reference/prices/windsurf.md +3 -3
  299. package/reference/prices.openrouter.md +5 -5
  300. package/reference/print-design.md +36 -36
  301. package/reference/priority-matrix.md +2 -2
  302. package/reference/project-skills-guide.md +3 -3
  303. package/reference/proportion-systems.md +23 -23
  304. package/reference/pseudonymization-rules.md +30 -30
  305. package/reference/retrieval-contract.md +14 -14
  306. package/reference/review-format.md +7 -7
  307. package/reference/rollout-coordination.md +10 -10
  308. package/reference/rtl-cjk-cultural.md +39 -39
  309. package/reference/runtime-models.md +28 -28
  310. package/reference/shared-preamble.md +26 -26
  311. package/reference/skill-authoring-contract.md +16 -16
  312. package/reference/skill-placeholders.md +3 -3
  313. package/reference/start-interview.md +10 -10
  314. package/reference/style-vocabulary.md +25 -25
  315. package/reference/surfaces.md +4 -4
  316. package/reference/ticket-sync.md +9 -9
  317. package/reference/typography.md +64 -64
  318. package/reference/user-research.md +54 -54
  319. package/reference/variable-fonts-loading.md +15 -15
  320. package/reference/visual-hierarchy-layout.md +41 -41
  321. package/scripts/lib/manifest/prose-denylist.json +1 -1
  322. package/skills/add-backlog/SKILL.md +3 -3
  323. package/skills/analyze-dependencies/SKILL.md +10 -10
  324. package/skills/apply-reflections/SKILL.md +13 -13
  325. package/skills/apply-reflections/apply-reflections-procedure.md +20 -20
  326. package/skills/audit/SKILL.md +7 -7
  327. package/skills/bandit-status/SKILL.md +7 -7
  328. package/skills/benchmark/SKILL.md +7 -7
  329. package/skills/bootstrap-ds/SKILL.md +10 -10
  330. package/skills/brief/SKILL.md +20 -20
  331. package/skills/budget/SKILL.md +4 -4
  332. package/skills/cache-manager/SKILL.md +6 -6
  333. package/skills/cache-manager/cache-policy.md +5 -5
  334. package/skills/check-update/SKILL.md +5 -5
  335. package/skills/compare/SKILL.md +15 -15
  336. package/skills/compare/compare-rubric.md +17 -17
  337. package/skills/complete-cycle/SKILL.md +5 -5
  338. package/skills/connections/SKILL.md +11 -11
  339. package/skills/connections/connections-onboarding.md +76 -76
  340. package/skills/continue/SKILL.md +2 -2
  341. package/skills/darkmode/SKILL.md +17 -17
  342. package/skills/darkmode/darkmode-audit-procedure.md +7 -7
  343. package/skills/debug/SKILL.md +3 -3
  344. package/skills/debug/debug-feedback-loops.md +12 -12
  345. package/skills/design/SKILL.md +12 -12
  346. package/skills/design/design-procedure.md +23 -23
  347. package/skills/discover/SKILL.md +7 -7
  348. package/skills/discover/discover-procedure.md +18 -18
  349. package/skills/discuss/SKILL.md +12 -12
  350. package/skills/do/SKILL.md +1 -1
  351. package/skills/explore/SKILL.md +21 -21
  352. package/skills/explore/explore-procedure.md +48 -48
  353. package/skills/export/SKILL.md +9 -9
  354. package/skills/extract-learnings/SKILL.md +5 -5
  355. package/skills/fast/SKILL.md +7 -7
  356. package/skills/figma-extract/SKILL.md +11 -11
  357. package/skills/figma-write/SKILL.md +6 -6
  358. package/skills/graphify/SKILL.md +4 -4
  359. package/skills/health/SKILL.md +16 -16
  360. package/skills/health/health-mcp-detection.md +3 -3
  361. package/skills/health/health-skill-length-report.md +6 -6
  362. package/skills/help/SKILL.md +1 -1
  363. package/skills/list-assumptions/SKILL.md +4 -4
  364. package/skills/map/SKILL.md +12 -12
  365. package/skills/migrate/SKILL.md +5 -5
  366. package/skills/new-cycle/SKILL.md +2 -2
  367. package/skills/new-cycle/milestone-completeness-rubric.md +16 -16
  368. package/skills/new-project/SKILL.md +1 -1
  369. package/skills/next/SKILL.md +5 -5
  370. package/skills/note/SKILL.md +1 -1
  371. package/skills/openrouter-status/SKILL.md +4 -4
  372. package/skills/optimize/SKILL.md +15 -15
  373. package/skills/pause/SKILL.md +5 -5
  374. package/skills/peer-cli-add/SKILL.md +11 -11
  375. package/skills/peer-cli-add/peer-cli-protocol.md +39 -39
  376. package/skills/peer-cli-customize/SKILL.md +14 -14
  377. package/skills/peers/SKILL.md +4 -4
  378. package/skills/plan/SKILL.md +13 -13
  379. package/skills/plan/plan-procedure.md +24 -24
  380. package/skills/plant-seed/SKILL.md +4 -4
  381. package/skills/pr-branch/SKILL.md +2 -2
  382. package/skills/progress/SKILL.md +15 -15
  383. package/skills/quality-gate/SKILL.md +22 -22
  384. package/skills/quality-gate/threat-modeling.md +19 -19
  385. package/skills/quick/SKILL.md +5 -5
  386. package/skills/reapply-patches/SKILL.md +7 -7
  387. package/skills/reflect/SKILL.md +3 -3
  388. package/skills/reflect/procedures/capability-gap-scan.md +11 -11
  389. package/skills/report-issue/SKILL.md +5 -5
  390. package/skills/report-issue/report-issue-procedure.md +27 -27
  391. package/skills/resume/SKILL.md +9 -9
  392. package/skills/review-backlog/SKILL.md +3 -3
  393. package/skills/review-decisions/SKILL.md +3 -3
  394. package/skills/roi/SKILL.md +5 -5
  395. package/skills/rollout-status/SKILL.md +4 -4
  396. package/skills/router/SKILL.md +11 -11
  397. package/skills/router/capability-gap-emitter.md +6 -6
  398. package/skills/router/router-pick-emitter.md +9 -9
  399. package/skills/router/router-rules.md +7 -7
  400. package/skills/scan/SKILL.md +16 -16
  401. package/skills/scan/scan-procedure.md +42 -42
  402. package/skills/settings/SKILL.md +2 -2
  403. package/skills/ship/SKILL.md +7 -7
  404. package/skills/sketch/SKILL.md +10 -10
  405. package/skills/sketch-wrap-up/SKILL.md +12 -12
  406. package/skills/skill-manifest/SKILL.md +5 -5
  407. package/skills/spike/SKILL.md +7 -7
  408. package/skills/spike-wrap-up/SKILL.md +13 -13
  409. package/skills/start/SKILL.md +8 -8
  410. package/skills/start/start-procedure.md +9 -9
  411. package/skills/stats/SKILL.md +5 -5
  412. package/skills/style/SKILL.md +12 -12
  413. package/skills/style/style-doc-procedure.md +12 -12
  414. package/skills/synthesize/SKILL.md +10 -10
  415. package/skills/timeline/SKILL.md +4 -4
  416. package/skills/todo/SKILL.md +3 -3
  417. package/skills/turn-closeout/SKILL.md +10 -10
  418. package/skills/unlock-decision/SKILL.md +3 -3
  419. package/skills/update/SKILL.md +9 -9
  420. package/skills/using-gdd/SKILL.md +17 -17
  421. package/skills/verify/SKILL.md +13 -13
  422. package/skills/verify/verify-procedure.md +34 -34
  423. package/skills/warm-cache/SKILL.md +8 -8
  424. package/skills/watch-authorities/SKILL.md +9 -9
  425. package/skills/zoom-out/SKILL.md +4 -4
@@ -1,4 +1,4 @@
1
- # Tooltip Benchmark Spec
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 Carbon recommends 100ms for toolbars; WAI-ARIA APG recommends ≤500ms. 300ms is the safe default.
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 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)
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"` links the supplemental label
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 https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/ W3C 2024*
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` 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
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 | | CSS `transition-delay` or JS timeout |
115
+ | Delay | 300ms | - | CSS `transition-delay` or JS timeout |
116
116
 
117
- Cross-link: `reference/motion.md` `prefers-reduced-motion`: skip fade, instant show/hide
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 not hover-only *(WAI-ARIA APG, WCAG 2.1.1)*
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 longer content belongs in a popover *(Carbon, Material 3)*
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 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)*
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) Benchmark Spec
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 | | Icon + label; indented by level | |
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 no font-size reduction per level
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` body-sm
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 https://www.w3.org/WAI/ARIA/apg/patterns/treeview/ W3C 2024*
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` CSS-only expand/collapse is invisible to AT
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"` without it, AT cannot perceive the parent-child relationship
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` tree pattern, roving tabindex, aria-busy
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` both changes must happen atomically.
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` disclosure animations
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"` 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)*
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 `reference/anti-patterns.md#ban-04` |
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` 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).
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.
@@ -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 Pre-Gestalt Layout Fundamentals
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 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.
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 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.
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* 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).
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 the natural Z-pattern terminus (see [§Eye-Flow Patterns](#eye-flow-patterns)). The headline anchors the upper-left third where reading begins.
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 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`.
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* 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.
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 √2, √3, √5
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 `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.
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 `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.
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 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.
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 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.
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 image and CTA weight scores within 10%, eye bounces between them.
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 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.
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 what was dual-focal becomes single-focal with a decorative competitor.
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 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.
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 how strongly the eye is pulled to it relative to neighbors. It is the product of four factors, each normalized to 0..1:
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 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.
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 an element with massive size but zero contrast (white text on white) has zero visual weight, regardless of isolation or complexity.
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 3 elements in a landing hero
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" defined numerically
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 the formula declares "not obviously broken", not "definitively good".
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 `display: flex; align-items: center; justify-content: center;` produces a result that *looks* off-center to the eye in three common cases:
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 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.
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 the −1px nudge
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 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".
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 modular scale, x-height ratios per typeface lives in [./typography.md](./typography.md) §Type Scale Systems and §Modular Scale.
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 landing pages, conversion flows
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 same coordinate as the rule-of-thirds example above).
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 content-heavy, scanning surfaces
284
+ ### F-Pattern - content-heavy, scanning surfaces
285
285
 
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.
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 editorial, reading-heavy
306
+ ### Gutenberg Diagram - editorial, reading-heavy
307
307
 
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.
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 a Read More link, a Subscribe CTA, a tip-jar button. Critical content does NOT go in either fallow area.
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) §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.
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 the profile is always injected at spawn time.
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) 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.
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 phase-cumulative enforcement always uses the global per-phase cap regardless of class.
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 defaults are sensible.
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 they are local session state, not committed.
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>` 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.
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` OS-level atomic per line.
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) 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.
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 not append-only. Consumers should treat it as a snapshot.
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` 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.
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 metrics are always at most one spawn stale.
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 keys are SHA-256 hex of the deterministic input-hash, values are entry objects. Schema version 1.
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 the `agents/<name>.md` basename without extension (e.g., `design-verifier`). Human-readable debug aid; not load-bearing for lookup.
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 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.
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 ISO-8601 UTC timestamp at write time. Produced by `new Date().toISOString()`.
344
+ String - ISO-8601 UTC timestamp at write time. Produced by `new Date().toISOString()`.
345
345
 
346
346
  ### `ttl_seconds`
347
347
 
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.
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 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.
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 **not** recomputed on read. Budget.json changes do not retroactively affect existing entries.
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) do not throw.
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 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.
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` 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.
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`) sectional handoff. `designer`
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`** per-section write permissions (`scripts/lib/collab/permissions.cjs`). Permissive
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`** `{ multi_writer_enabled (bool), lock_timeout_ms (int), sync_backend
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` 30 s wait + 100 ms backoff);
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 a live client is not bundled this phase).
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`) overrides the language of GDD's own `--help`,
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