@hegemonart/get-design-done 1.42.0 → 1.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +1126 -1038
  4. package/README.md +159 -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 +9 -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/harness-freshness.cjs +59 -0
  322. package/scripts/lib/health-mirror/index.cjs +27 -0
  323. package/scripts/lib/manifest/harnesses.json +280 -14
  324. package/scripts/lib/manifest/prose-denylist.json +1 -1
  325. package/scripts/lib/manifest/schemas/harnesses.schema.json +32 -0
  326. package/sdk/mcp/gdd-mcp/server.js +125 -0
  327. package/skills/add-backlog/SKILL.md +3 -3
  328. package/skills/analyze-dependencies/SKILL.md +10 -10
  329. package/skills/apply-reflections/SKILL.md +13 -13
  330. package/skills/apply-reflections/apply-reflections-procedure.md +20 -20
  331. package/skills/audit/SKILL.md +7 -7
  332. package/skills/bandit-status/SKILL.md +7 -7
  333. package/skills/benchmark/SKILL.md +7 -7
  334. package/skills/bootstrap-ds/SKILL.md +10 -10
  335. package/skills/brief/SKILL.md +20 -20
  336. package/skills/budget/SKILL.md +4 -4
  337. package/skills/cache-manager/SKILL.md +6 -6
  338. package/skills/cache-manager/cache-policy.md +5 -5
  339. package/skills/check-update/SKILL.md +5 -5
  340. package/skills/compare/SKILL.md +15 -15
  341. package/skills/compare/compare-rubric.md +17 -17
  342. package/skills/complete-cycle/SKILL.md +5 -5
  343. package/skills/connections/SKILL.md +11 -11
  344. package/skills/connections/connections-onboarding.md +76 -76
  345. package/skills/continue/SKILL.md +2 -2
  346. package/skills/darkmode/SKILL.md +17 -17
  347. package/skills/darkmode/darkmode-audit-procedure.md +7 -7
  348. package/skills/debug/SKILL.md +3 -3
  349. package/skills/debug/debug-feedback-loops.md +12 -12
  350. package/skills/design/SKILL.md +12 -12
  351. package/skills/design/design-procedure.md +23 -23
  352. package/skills/discover/SKILL.md +7 -7
  353. package/skills/discover/discover-procedure.md +18 -18
  354. package/skills/discuss/SKILL.md +12 -12
  355. package/skills/do/SKILL.md +1 -1
  356. package/skills/explore/SKILL.md +21 -21
  357. package/skills/explore/explore-procedure.md +48 -48
  358. package/skills/export/SKILL.md +9 -9
  359. package/skills/extract-learnings/SKILL.md +5 -5
  360. package/skills/fast/SKILL.md +7 -7
  361. package/skills/figma-extract/SKILL.md +11 -11
  362. package/skills/figma-write/SKILL.md +6 -6
  363. package/skills/graphify/SKILL.md +4 -4
  364. package/skills/health/SKILL.md +16 -16
  365. package/skills/health/health-mcp-detection.md +3 -3
  366. package/skills/health/health-skill-length-report.md +6 -6
  367. package/skills/help/SKILL.md +1 -1
  368. package/skills/list-assumptions/SKILL.md +4 -4
  369. package/skills/map/SKILL.md +12 -12
  370. package/skills/migrate/SKILL.md +5 -5
  371. package/skills/new-cycle/SKILL.md +2 -2
  372. package/skills/new-cycle/milestone-completeness-rubric.md +16 -16
  373. package/skills/new-project/SKILL.md +1 -1
  374. package/skills/next/SKILL.md +5 -5
  375. package/skills/note/SKILL.md +1 -1
  376. package/skills/openrouter-status/SKILL.md +4 -4
  377. package/skills/optimize/SKILL.md +15 -15
  378. package/skills/pause/SKILL.md +5 -5
  379. package/skills/peer-cli-add/SKILL.md +11 -11
  380. package/skills/peer-cli-add/peer-cli-protocol.md +39 -39
  381. package/skills/peer-cli-customize/SKILL.md +14 -14
  382. package/skills/peers/SKILL.md +4 -4
  383. package/skills/plan/SKILL.md +13 -13
  384. package/skills/plan/plan-procedure.md +24 -24
  385. package/skills/plant-seed/SKILL.md +4 -4
  386. package/skills/pr-branch/SKILL.md +2 -2
  387. package/skills/progress/SKILL.md +15 -15
  388. package/skills/quality-gate/SKILL.md +22 -22
  389. package/skills/quality-gate/threat-modeling.md +19 -19
  390. package/skills/quick/SKILL.md +5 -5
  391. package/skills/reapply-patches/SKILL.md +7 -7
  392. package/skills/reflect/SKILL.md +3 -3
  393. package/skills/reflect/procedures/capability-gap-scan.md +11 -11
  394. package/skills/report-issue/SKILL.md +5 -5
  395. package/skills/report-issue/report-issue-procedure.md +27 -27
  396. package/skills/resume/SKILL.md +9 -9
  397. package/skills/review-backlog/SKILL.md +3 -3
  398. package/skills/review-decisions/SKILL.md +3 -3
  399. package/skills/roi/SKILL.md +5 -5
  400. package/skills/rollout-status/SKILL.md +4 -4
  401. package/skills/router/SKILL.md +11 -11
  402. package/skills/router/capability-gap-emitter.md +6 -6
  403. package/skills/router/router-pick-emitter.md +9 -9
  404. package/skills/router/router-rules.md +7 -7
  405. package/skills/scan/SKILL.md +16 -16
  406. package/skills/scan/scan-procedure.md +42 -42
  407. package/skills/settings/SKILL.md +2 -2
  408. package/skills/ship/SKILL.md +7 -7
  409. package/skills/sketch/SKILL.md +10 -10
  410. package/skills/sketch-wrap-up/SKILL.md +12 -12
  411. package/skills/skill-manifest/SKILL.md +5 -5
  412. package/skills/spike/SKILL.md +7 -7
  413. package/skills/spike-wrap-up/SKILL.md +13 -13
  414. package/skills/start/SKILL.md +8 -8
  415. package/skills/start/start-procedure.md +9 -9
  416. package/skills/stats/SKILL.md +5 -5
  417. package/skills/style/SKILL.md +12 -12
  418. package/skills/style/style-doc-procedure.md +12 -12
  419. package/skills/synthesize/SKILL.md +10 -10
  420. package/skills/timeline/SKILL.md +4 -4
  421. package/skills/todo/SKILL.md +3 -3
  422. package/skills/turn-closeout/SKILL.md +10 -10
  423. package/skills/unlock-decision/SKILL.md +3 -3
  424. package/skills/update/SKILL.md +9 -9
  425. package/skills/using-gdd/SKILL.md +17 -17
  426. package/skills/verify/SKILL.md +13 -13
  427. package/skills/verify/verify-procedure.md +34 -34
  428. package/skills/warm-cache/SKILL.md +8 -8
  429. package/skills/watch-authorities/SKILL.md +9 -9
  430. package/skills/zoom-out/SKILL.md +4 -4
@@ -7,7 +7,7 @@ tags: [context-md, glossary, ubiquitous-language, ddd, project-scoped]
7
7
  last_updated: 2026-05-18
8
8
  ---
9
9
 
10
- Source: mattpocock/skills (MIT) adapted with permission. See `../NOTICE` for the full attribution block.
10
+ Source: mattpocock/skills (MIT) - adapted with permission. See `../NOTICE` for the full attribution block.
11
11
 
12
12
  # CONTEXT.md Format
13
13
 
@@ -15,7 +15,7 @@ Source: mattpocock/skills (MIT) — adapted with permission. See `../NOTICE` for
15
15
  It captures domain terms the user and the agent have agreed upon so the next session does
16
16
  not re-litigate naming. `STATE.md` is cycle-scoped and rotates per pipeline run; `CONTEXT.md`
17
17
  outlives the cycle and compounds across runs. The `discuss` and `brief` skills write to it
18
- inline during interviews (no batching) see Phase 28.5 plan `28.5-08` for the writer
18
+ inline during interviews (no batching) - see Phase 28.5 plan `28.5-08` for the writer
19
19
  behavior. See `./adr-format.md` for the heavier project-scoped artifact (decisions that meet
20
20
  the 3-criteria gate).
21
21
 
@@ -41,26 +41,26 @@ definitions).>
41
41
  ```
42
42
 
43
43
  - **Required fields.** The heading (term name) and the definition paragraph.
44
- - **Optional fields.** `**First seen:**`, `**Aliases:**`, `**Examples:**` added by
44
+ - **Optional fields.** `**First seen:**`, `**Aliases:**`, `**Examples:**` - added by
45
45
  `discuss` / `brief` skills as ergonomic. `first-seen` ties the term to an originating
46
46
  cycle's `STATE.md`; `aliases` enables term-merging; examples concretize usage.
47
47
 
48
48
  ## Lazy creation
49
49
 
50
50
  `CONTEXT.md` is created on the FIRST term resolution and never batched. The writing skill
51
- just appends no precondition prompts, no "should we create CONTEXT.md?" question (D-04).
51
+ just appends - no precondition prompts, no "should we create CONTEXT.md?" question (D-04).
52
52
 
53
53
  - **Trigger.** A fuzzy phrase becomes a sharpened term (e.g., "thingy" → "materialization
54
54
  cascade"), a new noun gets named, or two phrases collapse to one.
55
55
  - **Location.** Project root: `./CONTEXT.md`. Repos that span multiple bounded contexts use
56
- `CONTEXT-MAP.md` plus per-area `<area>/CONTEXT.md` see `## Multi-context`.
56
+ `CONTEXT-MAP.md` plus per-area `<area>/CONTEXT.md` - see `## Multi-context`.
57
57
  - **No batching.** Do NOT wait to gather "enough" terms. Each resolved term lands
58
58
  immediately so the file reflects the conversation at every checkpoint.
59
59
 
60
60
  ## Aliases
61
61
 
62
62
  When two terms collapse to one canonical name, the loser becomes an entry in the winner's
63
- `**Aliases:**` line. The agent never silently drops a term the alias preserves the prior
63
+ `**Aliases:**` line. The agent never silently drops a term - the alias preserves the prior
64
64
  vocabulary for grep, for the `decision-injector` hook, and for the user's mental model.
65
65
 
66
66
  ```markdown
@@ -100,7 +100,7 @@ paths in the conversation against the map. When no map exists, the single-file d
100
100
  ## Cross-references
101
101
 
102
102
  - Decisions that outlive the cycle AND meet the 3-criteria gate (hard-to-reverse AND
103
- surprising-without-context AND real-tradeoff) become ADRs see `./adr-format.md`.
104
- - Cycle-scoped decisions stay in `STATE.md` see `./STATE-TEMPLATE.md`.
105
- - Skill structural rules (length cap, frontmatter, progressive disclosure) see
103
+ surprising-without-context AND real-tradeoff) become ADRs - see `./adr-format.md`.
104
+ - Cycle-scoped decisions stay in `STATE.md` - see `./STATE-TEMPLATE.md`.
105
+ - Skill structural rules (length cap, frontmatter, progressive disclosure) - see
106
106
  `./skill-authoring-contract.md`.
@@ -7,17 +7,17 @@ tags: [contrast, apca, wcag-3, accessibility]
7
7
  last_updated: 2026-05-18
8
8
  ---
9
9
 
10
- # Contrast Advanced APCA (WCAG 3 Draft)
10
+ # Contrast Advanced - APCA (WCAG 3 Draft)
11
11
 
12
- WCAG 2.1 / 2.2 contrast (4.5:1 body, 3:1 large text and non-text UI) is owned by [`./accessibility.md`](./accessibility.md) §WCAG 2.1 AA Required Thresholds. This file owns APCA the WCAG 3 draft perceptual contrast model which materially misranks WCAG 2.1 verdicts on thin, large, and colored text. APCA is currently part of the WCAG 3 draft (Silver), not yet at candidate-recommendation stage; threshold values and the math can shift before ratification. Treat APCA as a **design-quality layer** that you stack on top of WCAG 2.1 AA certification, not as a replacement for it.
12
+ WCAG 2.1 / 2.2 contrast (4.5:1 body, 3:1 large text and non-text UI) is owned by [`./accessibility.md`](./accessibility.md) §WCAG 2.1 AA - Required Thresholds. This file owns APCA - the WCAG 3 draft perceptual contrast model - which materially misranks WCAG 2.1 verdicts on thin, large, and colored text. APCA is currently part of the WCAG 3 draft (Silver), not yet at candidate-recommendation stage; threshold values and the math can shift before ratification. Treat APCA as a **design-quality layer** that you stack on top of WCAG 2.1 AA certification, not as a replacement for it.
13
13
 
14
- This is the file an agent should consult any time it is auditing a contrast pair that fails perceptually despite passing WCAG 2.1, or passes WCAG 2.1 with a margin that "feels wrong" almost always one of: thin body text in a mid-gray, large colored text on white, or saturated text on a saturated background. Where WCAG 2.1 says "compute the luminance ratio and check the threshold", this file replaces that hand-wave with explicit perceptual thresholds, three worked misrank cases, and a heuristic mapping back to the legacy ratio so a single audit can satisfy both standards.
14
+ This is the file an agent should consult any time it is auditing a contrast pair that fails perceptually despite passing WCAG 2.1, or passes WCAG 2.1 with a margin that "feels wrong" - almost always one of: thin body text in a mid-gray, large colored text on white, or saturated text on a saturated background. Where WCAG 2.1 says "compute the luminance ratio and check the threshold", this file replaces that hand-wave with explicit perceptual thresholds, three worked misrank cases, and a heuristic mapping back to the legacy ratio so a single audit can satisfy both standards.
15
15
 
16
16
  ---
17
17
 
18
18
  ## APCA Lc Thresholds
19
19
 
20
- APCA reports contrast as **Lc** a perceptual lightness-contrast score on a scale that runs roughly **−108 to +106**. The sign carries directional meaning: a **positive Lc** denotes darker text on a lighter background (the common case for body copy), and a **negative Lc** denotes lighter text on a darker background (the common case for white-on-dark UI). Many practitioners report the **absolute value** `|Lc|` against the threshold that is the convention this file uses below. Always confirm whether a calculator reports signed or unsigned Lc before comparing to a threshold.
20
+ APCA reports contrast as **Lc** - a perceptual lightness-contrast score on a scale that runs roughly **−108 to +106**. The sign carries directional meaning: a **positive Lc** denotes darker text on a lighter background (the common case for body copy), and a **negative Lc** denotes lighter text on a darker background (the common case for white-on-dark UI). Many practitioners report the **absolute value** `|Lc|` against the threshold - that is the convention this file uses below. Always confirm whether a calculator reports signed or unsigned Lc before comparing to a threshold.
21
21
 
22
22
  The threshold ladder mirrors the WCAG-2.1 floor-by-use-case structure, but the breakpoints are set against perceptual contrast rather than luminance ratio, so the rank ordering between pairs sometimes flips relative to a WCAG-2.1 audit.
23
23
 
@@ -30,13 +30,13 @@ The threshold ladder mirrors the WCAG-2.1 floor-by-use-case structure, but the b
30
30
 
31
31
  A few practical notes on reading the ladder:
32
32
 
33
- - **Sign convention.** `|Lc 75|` is the standard target whether the pair is dark-on-light (positive) or light-on-dark (negative). Do not confuse a calculator that returns `Lc −75` with one returning `Lc 75` the magnitude is the same; only the polarity differs.
33
+ - **Sign convention.** `|Lc 75|` is the standard target whether the pair is dark-on-light (positive) or light-on-dark (negative). Do not confuse a calculator that returns `Lc −75` with one returning `Lc 75` - the magnitude is the same; only the polarity differs.
34
34
  - **Weight and size sensitivity.** APCA's body-text threshold (`Lc 75`) is calibrated for small text at regular weight. Larger or heavier glyphs may legitimately pass at lower magnitudes; APCA's published lookup tables map exact weight × size cells to minimum Lc, with `Lc 60` and `Lc 45` covering the common "large text" and "non-text UI" buckets respectively.
35
35
  - **Decorative is not "exempt".** `Lc 30` is the floor for elements where comprehension is not required (a brand watermark, a divider hairline). Anything a user must read or interact with belongs at `Lc 45` or above.
36
36
 
37
37
  ### Worked anchor pairs at each threshold
38
38
 
39
- Holding the threshold ladder in mind is easier with one canonical pair anchoring each row. These pairs are reference points only the calculator should always be consulted before shipping:
39
+ Holding the threshold ladder in mind is easier with one canonical pair anchoring each row. These pairs are reference points only - the calculator should always be consulted before shipping:
40
40
 
41
41
  ```txt
42
42
  Lc 75 body: #1A1A1A on #FFFFFF → APCA ~|95|, WCAG ~17:1 (over-clears both standards)
@@ -45,7 +45,7 @@ Lc 45 non-text UI: #5C5C5C on #FFFFFF → APCA ~|68|, WCAG ~7:1 (clears bot
45
45
  Lc 30 decorative: #888888 on #FFFFFF → APCA ~|48|, WCAG ~4.5:1 (clears WCAG body; APCA-decorative only)
46
46
  ```
47
47
 
48
- The pattern is monotonic on neutral pairs darker foregrounds raise both WCAG ratio and APCA Lc together. The interesting divergences only appear once color, weight, or size enters the comparison, which is the subject of the next section.
48
+ The pattern is monotonic on neutral pairs - darker foregrounds raise both WCAG ratio and APCA Lc together. The interesting divergences only appear once color, weight, or size enters the comparison, which is the subject of the next section.
49
49
 
50
50
  ---
51
51
 
@@ -53,7 +53,7 @@ The pattern is monotonic on neutral pairs — darker foregrounds raise both WCAG
53
53
 
54
54
  WCAG 2.1's `4.5:1` is a **luminance contrast ratio**: a log-based ratio of the relative luminances of the lighter and darker pixels, calibrated against a perfectly white-vs-perfectly-black comparison. The formula is `(L1 + 0.05) / (L2 + 0.05)` where `L1`/`L2` are sRGB relative luminances, and it knows nothing about font weight, glyph size, or the hue of either side of the pair.
55
55
 
56
- APCA models perceptual contrast: lightness on a perceptually uniform scale, with adjustments for font weight, glyph area, and the directional bias of human contrast sensitivity (we read dark-on-light differently from light-on-dark). The two models agree most of the time on solid black-on-white body copy. They **disagree** in three predictable failure modes and in each case it is APCA that tracks the human-readable reality:
56
+ APCA models perceptual contrast: lightness on a perceptually uniform scale, with adjustments for font weight, glyph area, and the directional bias of human contrast sensitivity (we read dark-on-light differently from light-on-dark). The two models agree most of the time on solid black-on-white body copy. They **disagree** in three predictable failure modes - and in each case it is APCA that tracks the human-readable reality:
57
57
 
58
58
  - **Thin mid-grays on white** read worse than the ratio suggests (APCA flags; WCAG passes).
59
59
  - **Large saturated text on white** reads better than the ratio suggests (WCAG passes by a wide margin; APCA still passes but the margin is much narrower).
@@ -61,7 +61,7 @@ APCA models perceptual contrast: lightness on a perceptually uniform scale, with
61
61
 
62
62
  Three worked examples make the math concrete. Ratios and Lc values below are **illustrative reference points** from the published APCA calculator at `apcacontrast.com` and a standard WCAG 2.1 contrast checker; production audits MUST recompute against a maintained calculator (APCA's tables update as the WCAG 3 draft advances) and MUST cite the calculator version + spec snapshot date for reproducibility.
63
63
 
64
- ### Example 1 Thin mid-gray on white
64
+ ### Example 1 - Thin mid-gray on white
65
65
 
66
66
  ```txt
67
67
  Foreground: #666666 (rgb 102, 102, 102)
@@ -74,7 +74,7 @@ APCA Lc: ~|62| → FAILS Lc 75 (body)
74
74
 
75
75
  The luminance ratio crosses the 4.5:1 floor comfortably; on paper this pair is compliant. Perceptually, mid-gray body text on white runs out of lift well before the ratio would predict: the dark side is too light to anchor the glyph edges, and at body weight the strokes are thin enough that the eye loses crisp edge contrast. APCA's `Lc 75` body threshold catches this; WCAG 2.1's flat ratio does not. The fix is to darken the foreground (toward `#5A5A5A` or lower) or thicken the weight; both raise Lc.
76
76
 
77
- ### Example 2 Large colored text on white
77
+ ### Example 2 - Large colored text on white
78
78
 
79
79
  ```txt
80
80
  Foreground: #0066CC (rgb 0, 102, 204)
@@ -86,9 +86,9 @@ APCA Lc: ~|78| → PASSES Lc 60 (large)
86
86
  Disagreement: margin direction
87
87
  ```
88
88
 
89
- Both standards pass this pair, but they disagree on **how much margin** the design has. WCAG 2.1 reports a comfortable 6.72:1 well above the 3:1 large-text floor and even above the 4.5:1 body floor which encourages the designer to read this as "high contrast, plenty of headroom". APCA reports `|Lc 78|`, which clears the large-text threshold (`Lc 60`) but is only marginally above the body threshold (`Lc 75`). The simple luminance ratio over-rates saturated blue against white because the formula collapses chroma into luminance; APCA tracks the perceptual reality that the blue glyph edges read with less crispness than a pure black would at the same ratio. The audit lesson is: WCAG ratios on saturated colored text systematically overstate available contrast, and a designer who reduces saturation or shifts the hue trusting the ratio will erode legibility before the ratio reports a problem.
89
+ Both standards pass this pair, but they disagree on **how much margin** the design has. WCAG 2.1 reports a comfortable 6.72:1 - well above the 3:1 large-text floor and even above the 4.5:1 body floor - which encourages the designer to read this as "high contrast, plenty of headroom". APCA reports `|Lc 78|`, which clears the large-text threshold (`Lc 60`) but is only marginally above the body threshold (`Lc 75`). The simple luminance ratio over-rates saturated blue against white because the formula collapses chroma into luminance; APCA tracks the perceptual reality that the blue glyph edges read with less crispness than a pure black would at the same ratio. The audit lesson is: WCAG ratios on saturated colored text systematically overstate available contrast, and a designer who reduces saturation or shifts the hue trusting the ratio will erode legibility before the ratio reports a problem.
90
90
 
91
- ### Example 3 Saturated text on saturated background
91
+ ### Example 3 - Saturated text on saturated background
92
92
 
93
93
  ```txt
94
94
  Foreground: #FF6600 (rgb 255, 102, 0)
@@ -99,7 +99,7 @@ WCAG 2.1 ratio: ~3.39:1 → FAILS 4.5:1; marginally PASSES 3:1 (large/UI)
99
99
  APCA Lc: ~|42| → FAILS Lc 45 (non-text UI)
100
100
  ```
101
101
 
102
- The luminance ratio sits in the ambiguous gap: it fails body but marginally clears the large-text/UI floor. A WCAG-2.1-only audit might accept this for a button label or a chip. APCA reports `|Lc 42|`, below the `Lc 45` non-text UI threshold and well below the `Lc 60` large-text threshold the pair is **not** safe for either use. The simple ratio over-rates this pair because two highly saturated colors at similar perceived lightness produce strong chromatic difference but weak lightness contrast; human contrast sensitivity for reading depends primarily on lightness, so the eye reads the boundary as fuzzier than the ratio suggests. APCA exposes the perceptual deficit; WCAG 2.1 hides it.
102
+ The luminance ratio sits in the ambiguous gap: it fails body but marginally clears the large-text/UI floor. A WCAG-2.1-only audit might accept this for a button label or a chip. APCA reports `|Lc 42|`, below the `Lc 45` non-text UI threshold and well below the `Lc 60` large-text threshold - the pair is **not** safe for either use. The simple ratio over-rates this pair because two highly saturated colors at similar perceived lightness produce strong chromatic difference but weak lightness contrast; human contrast sensitivity for reading depends primarily on lightness, so the eye reads the boundary as fuzzier than the ratio suggests. APCA exposes the perceptual deficit; WCAG 2.1 hides it.
103
103
 
104
104
  The three examples generalise to a heuristic an auditor can apply by hand: **when a pair involves thin text, large colored text, or saturated-on-saturated, distrust the WCAG ratio and re-check with APCA.** When both standards agree (solid black on white, dark navy on white, white on solid black) the ratio is reliable.
105
105
 
@@ -108,9 +108,9 @@ The three examples generalise to a heuristic an auditor can apply by hand: **whe
108
108
  The structural reason the two models disagree on the three failure modes above is worth naming explicitly, because it explains why the disagreement is **predictable**, not random.
109
109
 
110
110
  - **WCAG 2.1 uses sRGB relative luminance.** The ratio formula collapses each color's R/G/B channels into a single luminance value via a fixed gamma-decoded weighting (`0.2126·R + 0.7152·G + 0.0722·B` after sRGB-to-linear). That luminance is then compared as a log ratio with the `+0.05` offset. The formula is hue-blind: a saturated blue and a mid-gray of equal luminance produce the same ratio against any background. It is also weight-blind and size-blind: a 4.5:1 pair is reported as 4.5:1 whether the text is 8px hairline or 96px black.
111
- - **APCA uses perceptually weighted lightness.** It first transforms both colors into a perceptually uniform lightness space, then computes a signed contrast that accounts for the directional bias (dark-on-light vs light-on-dark) of human contrast sensitivity. Critically, the **threshold** APCA compares to is not a single number it is a lookup keyed on the font weight × glyph size at which the pair will be rendered. A 16px regular-weight body pair targets `Lc 75`; a 24px bold pair targets `Lc 60`; a 14px hairline pair targets a value higher than `Lc 75` because the strokes are thinner.
111
+ - **APCA uses perceptually weighted lightness.** It first transforms both colors into a perceptually uniform lightness space, then computes a signed contrast that accounts for the directional bias (dark-on-light vs light-on-dark) of human contrast sensitivity. Critically, the **threshold** APCA compares to is not a single number - it is a lookup keyed on the font weight × glyph size at which the pair will be rendered. A 16px regular-weight body pair targets `Lc 75`; a 24px bold pair targets `Lc 60`; a 14px hairline pair targets a value higher than `Lc 75` because the strokes are thinner.
112
112
 
113
- The three failure modes line up against this structural difference: thin text fails because WCAG is weight-blind, large colored text passes-with-overstated-margin because WCAG is hue-blind, and saturated-on-saturated fails because the simple luminance ratio aliases strong chromatic contrast with lightness contrast. These are not edge cases the spec authors missed they are the cost of the simpler 2.1 model in exchange for cheaper computation and easier hand-audit. APCA pays the perceptual cost; WCAG 2.1 pays the simplicity dividend.
113
+ The three failure modes line up against this structural difference: thin text fails because WCAG is weight-blind, large colored text passes-with-overstated-margin because WCAG is hue-blind, and saturated-on-saturated fails because the simple luminance ratio aliases strong chromatic contrast with lightness contrast. These are not edge cases the spec authors missed - they are the cost of the simpler 2.1 model in exchange for cheaper computation and easier hand-audit. APCA pays the perceptual cost; WCAG 2.1 pays the simplicity dividend.
114
114
 
115
115
  ---
116
116
 
@@ -122,7 +122,7 @@ The two standards are **not** an either/or choice for production work. APCA is i
122
122
 
123
123
  1. **Default audit floor: WCAG 2.1 AA.** Body text ≥ 4.5:1, large text and non-text UI ≥ 3:1. This is the floor for accessibility certification, procurement contracts, public-sector compliance, and any audit a third party will run.
124
124
  2. **Design-quality layer: APCA Lc thresholds.** Body `Lc 75`, large `Lc 60`, non-text UI `Lc 45`, decorative `Lc 30`. This is the floor for perceptual quality and for the three misrank cases above (thin, large-colored, colored-on-colored).
125
- 3. **Tiebreaker when the two disagree.** Prefer **satisfying both** almost every pair has a small foreground or background adjustment that clears both simultaneously. When forced to choose, prefer APCA for **body text** (perceptual legibility matters more than the legacy ratio when a user is reading) and prefer WCAG 2.1 AA for **non-text UI** (focus rings, button borders, icon glyphs where contractual certification matters more than the perceptual edge case).
125
+ 3. **Tiebreaker when the two disagree.** Prefer **satisfying both** - almost every pair has a small foreground or background adjustment that clears both simultaneously. When forced to choose, prefer APCA for **body text** (perceptual legibility matters more than the legacy ratio when a user is reading) and prefer WCAG 2.1 AA for **non-text UI** (focus rings, button borders, icon glyphs - where contractual certification matters more than the perceptual edge case).
126
126
 
127
127
  The order is intentional. The WCAG 2.1 AA floor is the legally and contractually defensible baseline; treating APCA as a *replacement* would shrink the compliance surface and break audits run by third parties using legacy tools. Treating APCA as an *additive* design-quality layer expands the design surface without breaking compliance.
128
128
 
@@ -130,11 +130,11 @@ The order is intentional. The WCAG 2.1 AA floor is the legally and contractually
130
130
 
131
131
  When the dual-target pattern is applied in practice, a small set of finding patterns surfaces repeatedly. Naming them lets an audit triage the result rather than re-deriving the verdict from raw numbers each time.
132
132
 
133
- - **`apca-flags-thin-body`** WCAG 2.1 body passes (≥ 4.5:1), APCA fails `Lc 75`. Mid-gray body copy on white; the dominant fix is darkening the foreground by 1-2 modular steps on the lightness axis.
134
- - **`wcag-margin-overstated`** both standards pass, but APCA reports a margin substantially narrower than the WCAG ratio implies. Common on saturated colored text on white. Action: do not lean further into the apparent WCAG headroom (e.g., by lowering chroma or shifting hue toward background); the perceptual margin is already thinner than the ratio reports.
135
- - **`saturated-on-saturated-trap`** WCAG 2.1 sits ambiguously in the 3:1-to-4.5:1 band, APCA fails clearly. High-saturation color-on-color pairs. The dominant fix is widening the lightness gap (push foreground darker or background lighter), not adjusting the hue choice.
136
- - **`focus-ring-wcag-pass-apca-borderline`** non-text UI pair clears WCAG 2.1 `3:1` but sits at or just below APCA `Lc 45`. Common on light-gray focus rings around white inputs. Action: APCA-aware designers raise the ring contrast even though WCAG would let it ship.
137
- - **`light-on-dark-asymmetry`** same `|Lc|` magnitude reads differently dark-on-light vs light-on-dark; pairs that pass dark-mode body can fail when polarity-flipped to light-mode body. Audit both polarities independently rather than assuming symmetry.
133
+ - **`apca-flags-thin-body`** - WCAG 2.1 body passes (≥ 4.5:1), APCA fails `Lc 75`. Mid-gray body copy on white; the dominant fix is darkening the foreground by 1-2 modular steps on the lightness axis.
134
+ - **`wcag-margin-overstated`** - both standards pass, but APCA reports a margin substantially narrower than the WCAG ratio implies. Common on saturated colored text on white. Action: do not lean further into the apparent WCAG headroom (e.g., by lowering chroma or shifting hue toward background); the perceptual margin is already thinner than the ratio reports.
135
+ - **`saturated-on-saturated-trap`** - WCAG 2.1 sits ambiguously in the 3:1-to-4.5:1 band, APCA fails clearly. High-saturation color-on-color pairs. The dominant fix is widening the lightness gap (push foreground darker or background lighter), not adjusting the hue choice.
136
+ - **`focus-ring-wcag-pass-apca-borderline`** - non-text UI pair clears WCAG 2.1 `3:1` but sits at or just below APCA `Lc 45`. Common on light-gray focus rings around white inputs. Action: APCA-aware designers raise the ring contrast even though WCAG would let it ship.
137
+ - **`light-on-dark-asymmetry`** - same `|Lc|` magnitude reads differently dark-on-light vs light-on-dark; pairs that pass dark-mode body can fail when polarity-flipped to light-mode body. Audit both polarities independently rather than assuming symmetry.
138
138
 
139
139
  These patterns are useful labels for the dual-target dashboard view: an audit can report "3 `apca-flags-thin-body` findings, 1 `saturated-on-saturated-trap` finding, 0 hard WCAG 2.1 fails" and the design team immediately knows the corrective work concentrates on the body-text color choice, not on the WCAG-side certification.
140
140
 
@@ -146,13 +146,13 @@ APCA is currently in the WCAG 3 draft. The threshold values cited above (`Lc 75
146
146
  - The WCAG 3 draft snapshot date used as the spec reference
147
147
  - The conversion table version used (the table in the next section is heuristic and approximate)
148
148
 
149
- Any audit that does not cite these is not reproducible a re-audit six months later may produce different verdicts on the same pairs, not because the design changed but because the underlying spec advanced.
149
+ Any audit that does not cite these is not reproducible - a re-audit six months later may produce different verdicts on the same pairs, not because the design changed but because the underlying spec advanced.
150
150
 
151
151
  ---
152
152
 
153
153
  ## Lc ↔ WCAG 2.1 Conversion Table
154
154
 
155
- The table below is an **approximate heuristic** for legacy interop it lets an auditor running a WCAG 2.1 contrast checker spot which pairs are likely to satisfy APCA-equivalent perceptual contrast and which are likely to fall short. APCA and WCAG 2.1 measure fundamentally different things (perceptual lightness contrast vs luminance ratio), so a precise one-to-one mapping does not exist; the table is calibrated against the common case of solid neutral text on a solid neutral background, and drifts in either direction once saturated hue enters the pair.
155
+ The table below is an **approximate heuristic** for legacy interop - it lets an auditor running a WCAG 2.1 contrast checker spot which pairs are likely to satisfy APCA-equivalent perceptual contrast and which are likely to fall short. APCA and WCAG 2.1 measure fundamentally different things (perceptual lightness contrast vs luminance ratio), so a precise one-to-one mapping does not exist; the table is calibrated against the common case of solid neutral text on a solid neutral background, and drifts in either direction once saturated hue enters the pair.
156
156
 
157
157
  | APCA Lc threshold | WCAG 2.1 ratio (approx) | Common case |
158
158
  | ----------------- | ----------------------- | --------------------------------- |
@@ -163,12 +163,12 @@ The table below is an **approximate heuristic** for legacy interop — it lets a
163
163
 
164
164
  Use this table in two directions:
165
165
 
166
- - **WCAG-pass-to-APCA check.** A pair that satisfies WCAG 2.1 AA body (`4.5:1`) maps to roughly `Lc 60` which is APCA's *large text* floor, not its body floor. A WCAG-2.1 body-compliant design is **not** automatically APCA body-compliant. Re-check body text against `Lc 75`.
167
- - **APCA-pass-to-WCAG check.** A pair that satisfies APCA body (`Lc 75`) maps to roughly `7:1` well above WCAG 2.1 AA's `4.5:1` floor. APCA body-compliant designs are almost always WCAG 2.1 AA body-compliant; the reverse is not true.
166
+ - **WCAG-pass-to-APCA check.** A pair that satisfies WCAG 2.1 AA body (`4.5:1`) maps to roughly `Lc 60` - which is APCA's *large text* floor, not its body floor. A WCAG-2.1 body-compliant design is **not** automatically APCA body-compliant. Re-check body text against `Lc 75`.
167
+ - **APCA-pass-to-WCAG check.** A pair that satisfies APCA body (`Lc 75`) maps to roughly `7:1` - well above WCAG 2.1 AA's `4.5:1` floor. APCA body-compliant designs are almost always WCAG 2.1 AA body-compliant; the reverse is not true.
168
168
 
169
- The asymmetry is the practical lesson: **APCA is the stricter floor for body text.** A design that targets APCA body and ships through a WCAG 2.1 AA audit will pass both with margin. A design that targets WCAG 2.1 AA body and is then APCA-audited will frequently surface "passes WCAG, fails APCA Lc 75" findings on thin and colored text those findings are real, not noise.
169
+ The asymmetry is the practical lesson: **APCA is the stricter floor for body text.** A design that targets APCA body and ships through a WCAG 2.1 AA audit will pass both with margin. A design that targets WCAG 2.1 AA body and is then APCA-audited will frequently surface "passes WCAG, fails APCA Lc 75" findings on thin and colored text - those findings are real, not noise.
170
170
 
171
- The conversion drifts at the saturated-hue edges. On saturated-on-saturated pairs (Example 3 above), the WCAG ratio over-rates contrast relative to APCA Lc; the heuristic ratio in the table reads optimistic. On thin gray body text (Example 1), the WCAG ratio also over-rates `5.74:1` maps to `~Lc 62` in the table-extrapolated direction, but the measured Lc was `~62` and the threshold was `75`, so the pair still fails APCA body despite passing the table-implied WCAG-equivalent. **Treat the table as a screening tool, not as a substitute for re-running the actual APCA calculator on the actual pair.**
171
+ The conversion drifts at the saturated-hue edges. On saturated-on-saturated pairs (Example 3 above), the WCAG ratio over-rates contrast relative to APCA Lc; the heuristic ratio in the table reads optimistic. On thin gray body text (Example 1), the WCAG ratio also over-rates - `5.74:1` maps to `~Lc 62` in the table-extrapolated direction, but the measured Lc was `~62` and the threshold was `75`, so the pair still fails APCA body despite passing the table-implied WCAG-equivalent. **Treat the table as a screening tool, not as a substitute for re-running the actual APCA calculator on the actual pair.**
172
172
 
173
173
  ### Applying the table to the three worked examples
174
174
 
@@ -194,12 +194,12 @@ Example 3 — #FF6600 on #0033AA (saturated-on-saturated)
194
194
  Reading: table screening flags this as risky; direct APCA confirms
195
195
  ```
196
196
 
197
- In two of the three cases the table screening converges on the same verdict the direct APCA calculator produces. In the third (large colored text), the table screening *would* have caught the tight margin had the target been body text rather than large text exactly the kind of design-quality consideration the dual-target pattern is designed to surface. The table is therefore a useful first-pass filter for designers working in a WCAG-2.1-centric tool stack, with the explicit understanding that any pair the screening surfaces as borderline must be re-run against the actual APCA calculator before a decision ships.
197
+ In two of the three cases the table screening converges on the same verdict the direct APCA calculator produces. In the third (large colored text), the table screening *would* have caught the tight margin had the target been body text rather than large text - exactly the kind of design-quality consideration the dual-target pattern is designed to surface. The table is therefore a useful first-pass filter for designers working in a WCAG-2.1-centric tool stack, with the explicit understanding that any pair the screening surfaces as borderline must be re-run against the actual APCA calculator before a decision ships.
198
198
 
199
199
  ---
200
200
 
201
201
  ## Cross-References
202
202
 
203
- - [`./accessibility.md`](./accessibility.md) §WCAG 2.1 AA Required Thresholds: legacy luminance-ratio floor; pair with APCA Lc for dual-target compliance.
203
+ - [`./accessibility.md`](./accessibility.md) §WCAG 2.1 AA - Required Thresholds: legacy luminance-ratio floor; pair with APCA Lc for dual-target compliance.
204
204
 
205
205
  > The reciprocal inbound cross-link from [`./accessibility.md`](./accessibility.md) (a "see also: APCA / WCAG 3 draft" pointer into the §WCAG 2.1 / 2.2 section) lands in Phase 28-06 (additive-only, per D-06) and is not present at the time this file ships.
@@ -1,6 +1,6 @@
1
1
  # Conversational UI Design Patterns
2
2
 
3
- This pack covers conversational interfaces in two modes: **voice flows** (IVR, smart-speaker skills/actions, voice assistants) and **chatbot / text assistants** (in-app chat, support bots, LLM-backed copilots). GDD's design-context-builder loads this reference when it detects a conversational or voice project so downstream design and audit stages share a vocabulary. CLI / REPL / terminal UX is explicitly out of scope for this pack those follow a different interaction model and have their own conventions.
3
+ This pack covers conversational interfaces in two modes: **voice flows** (IVR, smart-speaker skills/actions, voice assistants) and **chatbot / text assistants** (in-app chat, support bots, LLM-backed copilots). GDD's design-context-builder loads this reference when it detects a conversational or voice project so downstream design and audit stages share a vocabulary. CLI / REPL / terminal UX is explicitly out of scope for this pack - those follow a different interaction model and have their own conventions.
4
4
 
5
5
  The guidance below leans on established authorities: Google's Conversation Design guidelines, the Amazon Alexa Design Guide, and Nielsen Norman Group's research on chatbots and conversational interfaces.
6
6
 
@@ -13,22 +13,22 @@ A voice flow is more than its happy path. The happy path is the shortest success
13
13
  | No-input (NID) | User says nothing within the listen window | Escalating reprompts: 1st is a light nudge ("Which city?"), 2nd adds an example ("For example, say Berlin."), 3rd offers help or hands off. Never repeat the same words. |
14
14
  | No-match (NM) | Speech recognized but no intent matched | Reflect what was heard, narrow the ask, give an example. After repeated NM, escalate to options or a human. |
15
15
  | Confirmation | Action is risky, costly, or irreversible | See implicit vs explicit below. |
16
- | Barge-in | User speaks over the prompt | Allow it stop TTS immediately and listen. Disable only for legally required disclosures. |
16
+ | Barge-in | User speaks over the prompt | Allow it - stop TTS immediately and listen. Disable only for legally required disclosures. |
17
17
  | Hand-off | N consecutive failures (typically 2-3) | Route to a human, a visual fallback, or a clear "let's try later." Track the failure count across turns. |
18
18
 
19
- **One-breath confirmation.** Confirm in a single short clause that the user can absorb in one breath: "Two tickets for Friday booking now." Avoid reading back every slot verbatim; that is robotic and slow.
19
+ **One-breath confirmation.** Confirm in a single short clause that the user can absorb in one breath: "Two tickets for Friday - booking now." Avoid reading back every slot verbatim; that is robotic and slow.
20
20
 
21
21
  **Implicit vs explicit confirmation.**
22
- - *Implicit* fold the understood value into the next prompt ("Friday what time?"). Use for low-risk, easily-reversed actions. It keeps the dialogue moving.
23
- - *Explicit* require a yes/no ("Send $200 to Sam confirm?"). Reserve for irreversible, costly, or destructive actions (payments, deletes, sends).
22
+ - *Implicit* - fold the understood value into the next prompt ("Friday - what time?"). Use for low-risk, easily-reversed actions. It keeps the dialogue moving.
23
+ - *Explicit* - require a yes/no ("Send $200 to Sam - confirm?"). Reserve for irreversible, costly, or destructive actions (payments, deletes, sends).
24
24
 
25
- **Failure escalation.** Each successive reprompt should add information (an example, then a menu, then a human). Three strikes is a common ceiling after that, stop asking and offer an exit. A dead end ("Sorry, goodbye.") is a design failure.
25
+ **Failure escalation.** Each successive reprompt should add information (an example, then a menu, then a human). Three strikes is a common ceiling - after that, stop asking and offer an exit. A dead end ("Sorry, goodbye.") is a design failure.
26
26
 
27
27
  ## Multi-turn dialogue rules
28
28
 
29
29
  Multi-turn dialogue is where conversational UIs earn their name. The core obligation: remember context so the user speaks like a human, not a form.
30
30
 
31
- - **Context carryover (anaphora).** Resolve references to prior turns. After "Weather in Paris?", the user says "What about tomorrow?" or "And Rome?" carry the unstated slots (location, intent) forward. Failing this forces the user to repeat themselves and breaks the illusion of conversation.
31
+ - **Context carryover (anaphora).** Resolve references to prior turns. After "Weather in Paris?", the user says "What about tomorrow?" or "And Rome?" - carry the unstated slots (location, intent) forward. Failing this forces the user to repeat themselves and breaks the illusion of conversation.
32
32
  - **Turn-taking.** Make it unambiguous whose turn it is. In voice, an earcon or a brief pause signals "your turn." In chat, a typing indicator signals the assistant is composing. Never leave the user unsure whether to speak/type.
33
33
  - **Disambiguation.** When input matches more than one intent or entity, ask a tight either/or ("Did you mean the 9am or the 9pm flight?") rather than restarting. Offer at most 2-3 options by voice.
34
34
  - **Slot-filling + validation.** Collect required slots one at a time when missing, but accept them all at once when volunteered ("Book a 7pm table for four" fills time + party size in one turn). Validate each slot against real constraints (date in the future, party size within limits) and reprompt only the invalid slot, not the whole request.
@@ -37,10 +37,10 @@ Multi-turn dialogue is where conversational UIs earn their name. The core obliga
37
37
 
38
38
  ## Prompt-as-UX (system prompts as design artifacts)
39
39
 
40
- For LLM-backed assistants, the `system-prompt` is a design artifact, not config. It defines the assistant's persona, tone, scope, and boundaries and those ARE the user experience. Treat it accordingly.
40
+ For LLM-backed assistants, the `system-prompt` is a design artifact, not config. It defines the assistant's persona, tone, scope, and boundaries - and those ARE the user experience. Treat it accordingly.
41
41
 
42
- - **Persona and voice are design decisions.** Warmth, formality, verbosity, use of humor, first-person vs neutral these are chosen, documented, and kept consistent across every turn. A persona that drifts mid-conversation reads as broken.
43
- - **The prompt is the spec for behavior.** What the assistant will and won't do, how it greets, how it refuses, how it asks for clarification all of it is specified in the prompt. Downstream copy and flows must match it.
42
+ - **Persona and voice are design decisions.** Warmth, formality, verbosity, use of humor, first-person vs neutral - these are chosen, documented, and kept consistent across every turn. A persona that drifts mid-conversation reads as broken.
43
+ - **The prompt is the spec for behavior.** What the assistant will and won't do, how it greets, how it refuses, how it asks for clarification - all of it is specified in the prompt. Downstream copy and flows must match it.
44
44
  - **Version and review it like production copy.** The `system-prompt` belongs in source control, with diffs reviewed by design/content the same way UI strings are. A wording change to a refusal message is a UX change.
45
45
  - **Refusal and limits messaging.** When the assistant can't or won't help, the decline should be in-voice, specific, and ideally redirect ("I can't process refunds here, but I can show you the refund form."). A blunt "I cannot do that" is a UX bug.
46
46
  - **Consistency of voice.** Error states, confirmations, empty states, and refusals must all sound like the same persona. Audit them together, not in isolation.
@@ -49,11 +49,11 @@ For LLM-backed assistants, the `system-prompt` is a design artifact, not config.
49
49
 
50
50
  The opening message is the chatbot's most important screen. It does the work an empty form can't: it sets scope and teaches capability.
51
51
 
52
- - **The opener states scope + capability.** "Hi I can track orders, start a return, or check store hours. What do you need?" tells the user what's in bounds before they guess wrong. Vague openers ("How can I help?") invite out-of-scope requests the bot then fails.
52
+ - **The opener states scope + capability.** "Hi - I can track orders, start a return, or check store hours. What do you need?" tells the user what's in bounds before they guess wrong. Vague openers ("How can I help?") invite out-of-scope requests the bot then fails.
53
53
  - **Suggested-reply chips.** Offer 2-4 tappable starter prompts that double as a capability menu. They remove the cold-start guess and demonstrate the input format.
54
54
  - **Discoverability of commands.** If the bot supports commands or shortcuts, surface them (a menu, a persistent "Help" affordance, or a slash-command hint). Hidden capabilities don't exist to users.
55
55
  - **Avoid the blank-box-no-affordance trap.** A bare text input with a blinking cursor and no guidance is the #1 chatbot empty-state failure (NN/g). Always pair the input with scope-setting copy and/or chips.
56
- - **Re-entry and history.** On return, remind the user where they left off or what the bot does don't assume they remember the opener from last session.
56
+ - **Re-entry and history.** On return, remind the user where they left off or what the bot does - don't assume they remember the opener from last session.
57
57
 
58
58
  ## Voice-first onboarding
59
59
 
@@ -62,18 +62,18 @@ Voice-first surfaces (smart speakers, headless assistants) onboard without a scr
62
62
  - **Teach invocation.** Make the wake phrase / invocation name explicit early ("Just say 'Ask Acme to…'"). Users can't use what they can't name.
63
63
  - **Teach capability by example.** Replace abstract menus with concrete sample utterances: "You can say 'add milk to my list' or 'what's on my list?'" The "you can say…" pattern is the canonical voice-discoverability tool.
64
64
  - **Progressive disclosure.** Don't dump every feature in the first session. Reveal capabilities over time, contextually, as the user's needs surface.
65
- - **Earcons and audio feedback.** Use short, distinct audio cues to mark state listening, processing, success, error. Audio is the only "UI" the user has; consistent earcons replace visual affordances.
65
+ - **Earcons and audio feedback.** Use short, distinct audio cues to mark state - listening, processing, success, error. Audio is the only "UI" the user has; consistent earcons replace visual affordances.
66
66
  - **Confirm understanding audibly.** Because there's no screen to glance at, brief spoken confirmations carry the load that visual feedback would in a GUI.
67
67
 
68
68
  ## Error recovery in voice flows
69
69
 
70
70
  Recovery is the difference between a usable voice product and an abandoned one. The guiding rule: **never a dead end.**
71
71
 
72
- - **Graceful degradation.** When confidence is low, narrow rather than fail fall back from open prompt to a menu, from a menu to yes/no, from voice to a visual/text fallback if a screen is available.
72
+ - **Graceful degradation.** When confidence is low, narrow rather than fail - fall back from open prompt to a menu, from a menu to yes/no, from voice to a visual/text fallback if a screen is available.
73
73
  - **Rapid, varied reprompts.** Reprompt quickly and change the wording each time. Repeating the identical prompt is the fastest way to frustrate.
74
74
  - **Offer alternatives.** "I couldn't find that. Want me to search nearby instead?" keeps momentum and gives the user a next move.
75
75
  - **Escalate to human / visual fallback.** After N failed turns, route to a person, send a link to a phone/companion screen, or switch channels. Honor explicit "talk to a person" requests immediately.
76
- - **Accessibility.** Provide captions and transcripts for voice interactions; ensure chat is screen-reader-friendly with proper roles, focus management, and announced new messages. Don't gate critical actions behind audio-only or visual-only cues offer both paths.
76
+ - **Accessibility.** Provide captions and transcripts for voice interactions; ensure chat is screen-reader-friendly with proper roles, focus management, and announced new messages. Don't gate critical actions behind audio-only or visual-only cues - offer both paths.
77
77
 
78
78
  ## Detection signals
79
79
 
@@ -96,13 +96,13 @@ Presence of any of these deps is a strong signal; keyword matches add weight. A
96
96
 
97
97
  ## Audit checklist
98
98
 
99
- 1. Every voice flow handles **no-input (NID)** and **no-match (NM)** with escalating reprompts that add help each time never a dead end.
99
+ 1. Every voice flow handles **no-input (NID)** and **no-match (NM)** with escalating reprompts that add help each time - never a dead end.
100
100
  2. Risky, costly, or irreversible actions use **explicit confirmation**; low-risk actions use implicit confirmation and don't over-confirm.
101
101
  3. **Barge-in** is allowed on standard prompts (TTS stops and listening resumes immediately), disabled only where legally required.
102
102
  4. Voice flows offer a **human / visual fallback after N failed turns** (typically 2-3) and honor explicit "talk to a person" requests.
103
103
  5. **Multi-turn context carries over** (anaphora resolved) so the user isn't forced to repeat slots already provided.
104
104
  6. **Slot validation** reprompts only the invalid slot and accepts multiple slots when volunteered in one turn.
105
- 7. **Repair** is supported corrections ("no, I said…") overwrite the targeted slot without losing surrounding context.
105
+ 7. **Repair** is supported - corrections ("no, I said…") overwrite the targeted slot without losing surrounding context.
106
106
  8. The **`system-prompt` persona** (tone, scope, boundaries) is versioned and reviewed like production copy, and its voice is consistent across confirmations, errors, and refusals.
107
107
  9. **Refusal / limits messaging** is in-voice, specific, and redirects to an alternative rather than a blunt decline.
108
108
  10. The **chatbot opener states scope + capability** and offers suggested-reply chips; no blank-box-without-affordance entry state.
@@ -1,20 +1,20 @@
1
- # Cost Governance Forecast, Project Cap, and ROI
1
+ # Cost Governance - Forecast, Project Cap, and ROI
2
2
 
3
3
  Phase 39.2 contract. GDD already tracks cost (Phase 10.1 per-task caps, Phase 26 per-runtime
4
- telemetry, Phase 27.5 bandit cost-arbitrage) but it never *forecasts* spend, never imposes a
4
+ telemetry, Phase 27.5 bandit cost-arbitrage) - but it never *forecasts* spend, never imposes a
5
5
  *project-level* hard cap, and never shows whether the spend actually *shipped* anything. This file is
6
6
  the contract for the three pieces that close those gaps: the **forecast model**, the **`project_cap`
7
7
  hard-halt**, and the **ROI dashboard**. All three are read-only/report-only except the hook, which
8
- only ever *blocks* a spawn it never spends, edits config, or mutates telemetry.
8
+ only ever *blocks* a spawn - it never spends, edits config, or mutates telemetry.
9
9
 
10
10
  ## Telemetry inputs
11
11
 
12
- - **`.design/telemetry/costs.jsonl`** (OPT-09) one row per agent spawn:
12
+ - **`.design/telemetry/costs.jsonl`** (OPT-09) - one row per agent spawn:
13
13
  `{ ts, agent, tier, tokens_in, tokens_out, cache_hit, est_cost_usd, cycle, phase }`.
14
14
  The **`cycle`** field is the join key: grouping `est_cost_usd` by `cycle` gives per-cycle USD totals.
15
- - **`.design/telemetry/events.jsonl`** the event stream; this phase appends three new `type`s
15
+ - **`.design/telemetry/events.jsonl`** - the event stream; this phase appends three new `type`s
16
16
  (below).
17
- - **Cycle identity** `.design/STATE.md` frontmatter `cycle:`. There is no `CYCLES.md`; per-cycle
17
+ - **Cycle identity** - `.design/STATE.md` frontmatter `cycle:`. There is no `CYCLES.md`; per-cycle
18
18
  commit counts are computed on demand from `git log` (the `/gdd:stats` precedent).
19
19
 
20
20
  ## Forecast model (`scripts/lib/budget/cost-forecast.cjs`, pure)
@@ -30,10 +30,10 @@ Group `costs.jsonl` by `cycle` → an array of per-cycle USD totals. From the **
30
30
 
31
31
  `k = 1` by default. The projection over the next `N` cycles is linear: `projectedTotal = rate · N`.
32
32
  `cyclesToCap(currentSpend, cap, rate)` returns the integer number of cycles until `currentSpend`
33
- reaches `cap` at that rate `Infinity` when `rate ≤ 0`, `0` when already at/over the cap. This powers
33
+ reaches `cap` at that rate - `Infinity` when `rate ≤ 0`, `0` when already at/over the cap. This powers
34
34
  the `/gdd:budget` warning **"at the current rate you'll hit cap $X in Y cycles."**
35
35
 
36
- The math is a pure, dep-free, deterministic core (no fs, no clock, no randomness) `agents/cost-forecaster.md`
36
+ The math is a pure, dep-free, deterministic core (no fs, no clock, no randomness) - `agents/cost-forecaster.md`
37
37
  and `/gdd:budget` read the telemetry and hand the grouped totals in. `--scenario best|typical|worst`
38
38
  selects the rate.
39
39
 
@@ -47,7 +47,7 @@ A **project-level** hard cap, distinct from the existing per-task and per-phase
47
47
  | `project_cap_usd` | number ≥ 0 | `0` (disabled) | Total project spend ceiling (USD). |
48
48
  | `project_cap_enforcement_mode` | `enforce` \| `warn` \| `log` | falls back to `enforcement_mode` | How a breach is handled. |
49
49
 
50
- **Disabled by default.** A cap of `0` (or absent / non-finite) means *no project cap* existing
50
+ **Disabled by default.** A cap of `0` (or absent / non-finite) means *no project cap* - existing
51
51
  users see zero behavior change. The classifier `classifyProjectBudget(spend, cap)` returns a level:
52
52
 
53
53
  | Running spend vs cap | Level | Hook behavior |
@@ -66,15 +66,15 @@ breach prints/records but still allows the spawn (advisory). Running project spe
66
66
  ## ROI dashboard (`scripts/lib/budget/roi.cjs`, pure + `/gdd:roi`)
67
67
 
68
68
  Joins per-cycle cost with what actually shipped. **"Shipped"** = a commit that **survived ≥ 14 days**
69
- in `main` (the ROADMAP default a longer window catches revert-after-bug-discovery); a commit
69
+ in `main` (the ROADMAP default - a longer window catches revert-after-bug-discovery); a commit
70
70
  reverted inside that window counts as `reverted`. `/gdd:roi` shells `git log` per cycle for the
71
71
  shipped/reverted counts and reads per-cycle cost from `costs.jsonl`; `roi.cjs` computes:
72
72
 
73
- - `costPerShipped = costUsd / max(shipped, 1)` USD per commit that stuck.
74
- - `stickRate = shipped / max(shipped + reverted, 1)` fraction of commits that survived.
73
+ - `costPerShipped = costUsd / max(shipped, 1)` - USD per commit that stuck.
74
+ - `stickRate = shipped / max(shipped + reverted, 1)` - fraction of commits that survived.
75
75
 
76
76
  Output is a markdown table (cycle · cost · shipped · reverted · $/shipped · stick rate) plus a TOTAL
77
- row. Markdown only no GUI.
77
+ row. Markdown only - no GUI.
78
78
 
79
79
  ## Events
80
80
 
@@ -89,5 +89,5 @@ Three new free-form `type`s on `.design/telemetry/events.jsonl`:
89
89
  ## Boundaries
90
90
 
91
91
  Forecast is **cycle-scoped** (not per-agent-call). The cap **halts**, it never spends or auto-tunes.
92
- ROI is **markdown**, not a GUI. Nothing here writes `budget.json` the user sets the cap; GDD only
92
+ ROI is **markdown**, not a GUI. Nothing here writes `budget.json` - the user sets the cap; GDD only
93
93
  reads, forecasts, warns, and (at 100% under `enforce`) blocks the next spawn.
@@ -1,6 +1,6 @@
1
1
  <!-- Source: Phase 18 — get-design-done -->
2
2
 
3
- # CSS Grid Layout Advanced Craft Reference
3
+ # CSS Grid Layout - Advanced Craft Reference
4
4
 
5
5
  ## 1. CSS Grid Template Patterns
6
6
 
@@ -27,7 +27,7 @@ Classic five-area layout: header, nav, main, aside, footer.
27
27
  .footer { grid-area: footer; }
28
28
  ```
29
29
 
30
- Responsive collapse stack columns below 768px:
30
+ Responsive collapse - stack columns below 768px:
31
31
 
32
32
  ```css
33
33
  @media (max-width: 768px) {
@@ -86,7 +86,7 @@ Auto-fit bento with minimum card size:
86
86
 
87
87
  ### Masonry via `grid-template-rows: masonry`
88
88
 
89
- Native CSS masonry items pack into shortest column, no JavaScript.
89
+ Native CSS masonry - items pack into shortest column, no JavaScript.
90
90
 
91
91
  ```css
92
92
  .masonry {
@@ -125,7 +125,7 @@ Native CSS masonry — items pack into shortest column, no JavaScript.
125
125
 
126
126
  ### What It Is
127
127
 
128
- `subgrid` lets a nested grid inherit track definitions from its parent grid. Without subgrid, inner grids define their own tracks independently card headers and footers cannot align across sibling cards.
128
+ `subgrid` lets a nested grid inherit track definitions from its parent grid. Without subgrid, inner grids define their own tracks independently - card headers and footers cannot align across sibling cards.
129
129
 
130
130
  ```css
131
131
  /* Parent defines the tracks */
@@ -293,7 +293,7 @@ R = f_min - V × (v_min / 100) (convert back to rem ÷ 16)
293
293
 
294
294
  ### Real Examples
295
295
 
296
- **Body text 16px at 320px viewport → 20px at 1440px:**
296
+ **Body text - 16px at 320px viewport → 20px at 1440px:**
297
297
 
298
298
  ```
299
299
  V = (20 - 16) / (1440 - 320) × 100 = 0.357
@@ -306,7 +306,7 @@ body {
306
306
  }
307
307
  ```
308
308
 
309
- **Display heading 32px at 320px → 72px at 1440px:**
309
+ **Display heading - 32px at 320px → 72px at 1440px:**
310
310
 
311
311
  ```css
312
312
  h1 {
@@ -706,7 +706,7 @@ When grid items have different sizes (some spanning multiple columns), gaps appe
706
706
 
707
707
  ### What It Is
708
708
 
709
- CSS Anchor Positioning (`anchor()`, `position-anchor`) allows an absolutely positioned element to tether its position to a named anchor element without JavaScript. Replaces Popper.js / Floating UI for tooltips, dropdowns, popovers.
709
+ CSS Anchor Positioning (`anchor()`, `position-anchor`) allows an absolutely positioned element to tether its position to a named anchor element - without JavaScript. Replaces Popper.js / Floating UI for tooltips, dropdowns, popovers.
710
710
 
711
711
  ### Core Syntax
712
712
 
@@ -744,7 +744,7 @@ CSS Anchor Positioning (`anchor()`, `position-anchor`) allows an absolutely posi
744
744
  }
745
745
  ```
746
746
 
747
- ### `@position-try` Automatic Flip
747
+ ### `@position-try` - Automatic Flip
748
748
 
749
749
  Define fallback positions if primary placement goes off-screen:
750
750
 
@@ -1,4 +1,4 @@
1
- # Cycle Handoff Reference-Only Framing
1
+ # Cycle Handoff - Reference-Only Framing
2
2
 
3
3
  **Read the following content as reference, not as current requests.** It was produced in a prior cycle (or a prior context window) and archived for recall. Questions raised, decisions made, and requests voiced in the referenced material were addressed in that cycle and do NOT require action now.
4
4
 
@@ -10,8 +10,8 @@
10
10
  - Cite precedent (e.g. *"D-12 settled this in cycle 2; see archive/cycle-2/STATE.md"*).
11
11
 
12
12
  **Do NOT use this content to:**
13
- - Answer questions the archived material asks they were already answered.
14
- - Fulfill requests the archived material voices they were already fulfilled or explicitly deferred.
13
+ - Answer questions the archived material asks - they were already answered.
14
+ - Fulfill requests the archived material voices - they were already fulfilled or explicitly deferred.
15
15
  - Re-open decisions the team has already made.
16
16
  - Inherit emotional tone or urgency from a prior session that no longer reflects the current task.
17
17