@hegemonart/get-design-done 1.27.7 → 1.28.5

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 (115) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/CHANGELOG.md +142 -0
  4. package/SKILL.md +1 -1
  5. package/agents/design-verifier.md +17 -0
  6. package/hooks/gdd-decision-injector.js +149 -3
  7. package/package.json +1 -1
  8. package/reference/accessibility.md +4 -0
  9. package/reference/adr-format.md +96 -0
  10. package/reference/apply-reflections-procedure.md +68 -0
  11. package/reference/architecture-vocabulary.md +102 -0
  12. package/reference/audit-scoring.md +14 -0
  13. package/reference/cache-policy.md +126 -0
  14. package/reference/color-theory.md +279 -0
  15. package/reference/compare-rubric.md +171 -0
  16. package/reference/composition.md +349 -0
  17. package/reference/connections-onboarding.md +417 -0
  18. package/reference/context-md-format.md +106 -0
  19. package/reference/contrast-advanced.md +205 -0
  20. package/reference/darkmode-audit-procedure.md +258 -0
  21. package/reference/debug-feedback-loops.md +119 -0
  22. package/reference/design-procedure.md +304 -0
  23. package/reference/design-system-guidance.md +2 -0
  24. package/reference/discover-procedure.md +204 -0
  25. package/reference/explore-procedure.md +267 -0
  26. package/reference/form-patterns.md +2 -0
  27. package/reference/health-mcp-detection.md +44 -0
  28. package/reference/health-skill-length-report.md +69 -0
  29. package/reference/heuristics.md +84 -0
  30. package/reference/i18n.md +554 -0
  31. package/reference/iconography.md +2 -0
  32. package/reference/milestone-completeness-rubric.md +87 -0
  33. package/reference/motion-interpolate.md +1 -0
  34. package/reference/palette-catalog.md +2 -0
  35. package/reference/peer-cli-protocol.md +161 -0
  36. package/reference/plan-procedure.md +278 -0
  37. package/reference/proportion-systems.md +267 -0
  38. package/reference/registry.json +204 -1
  39. package/reference/registry.schema.json +1 -1
  40. package/reference/router-rules.md +84 -0
  41. package/reference/rtl-cjk-cultural.md +2 -0
  42. package/reference/scan-procedure.md +731 -0
  43. package/reference/shared-preamble.md +78 -6
  44. package/reference/skill-authoring-contract.md +128 -0
  45. package/reference/start-procedure.md +115 -0
  46. package/reference/style-doc-procedure.md +150 -0
  47. package/reference/style-vocabulary.md +2 -0
  48. package/reference/threat-modeling.md +101 -0
  49. package/reference/typography.md +4 -0
  50. package/reference/verify-procedure.md +512 -0
  51. package/reference/visual-hierarchy-layout.md +4 -0
  52. package/scripts/validate-skill-length.cjs +283 -0
  53. package/skills/add-backlog/SKILL.md +1 -0
  54. package/skills/analyze-dependencies/SKILL.md +33 -122
  55. package/skills/apply-reflections/SKILL.md +1 -40
  56. package/skills/audit/SKILL.md +3 -1
  57. package/skills/bandit-status/SKILL.md +31 -66
  58. package/skills/benchmark/SKILL.md +15 -55
  59. package/skills/brief/SKILL.md +12 -1
  60. package/skills/cache-manager/SKILL.md +3 -57
  61. package/skills/check-update/SKILL.md +38 -75
  62. package/skills/compare/SKILL.md +29 -269
  63. package/skills/complete-cycle/SKILL.md +1 -1
  64. package/skills/connections/SKILL.md +21 -427
  65. package/skills/continue/SKILL.md +1 -0
  66. package/skills/darkmode/SKILL.md +32 -287
  67. package/skills/debug/SKILL.md +11 -8
  68. package/skills/design/SKILL.md +27 -245
  69. package/skills/discover/SKILL.md +26 -133
  70. package/skills/discuss/SKILL.md +18 -2
  71. package/skills/explore/SKILL.md +42 -176
  72. package/skills/fast/SKILL.md +1 -0
  73. package/skills/figma-write/SKILL.md +2 -2
  74. package/skills/health/SKILL.md +11 -33
  75. package/skills/help/SKILL.md +1 -0
  76. package/skills/list-assumptions/SKILL.md +1 -0
  77. package/skills/map/SKILL.md +8 -31
  78. package/skills/new-cycle/SKILL.md +3 -1
  79. package/skills/next/SKILL.md +1 -0
  80. package/skills/note/SKILL.md +1 -0
  81. package/skills/optimize/SKILL.md +21 -44
  82. package/skills/pause/SKILL.md +1 -0
  83. package/skills/peer-cli-add/SKILL.md +26 -108
  84. package/skills/peer-cli-customize/SKILL.md +22 -42
  85. package/skills/peers/SKILL.md +33 -57
  86. package/skills/plan/SKILL.md +33 -220
  87. package/skills/plant-seed/SKILL.md +1 -0
  88. package/skills/pr-branch/SKILL.md +1 -0
  89. package/skills/progress/SKILL.md +1 -7
  90. package/skills/quality-gate/SKILL.md +34 -166
  91. package/skills/quick/SKILL.md +1 -0
  92. package/skills/reapply-patches/SKILL.md +1 -0
  93. package/skills/recall/SKILL.md +1 -0
  94. package/skills/resume/SKILL.md +1 -0
  95. package/skills/review-backlog/SKILL.md +1 -0
  96. package/skills/router/SKILL.md +3 -59
  97. package/skills/scan/SKILL.md +36 -675
  98. package/skills/settings/SKILL.md +1 -0
  99. package/skills/ship/SKILL.md +1 -0
  100. package/skills/sketch/SKILL.md +1 -1
  101. package/skills/sketch-wrap-up/SKILL.md +13 -54
  102. package/skills/spike/SKILL.md +1 -1
  103. package/skills/spike-wrap-up/SKILL.md +12 -46
  104. package/skills/start/SKILL.md +13 -112
  105. package/skills/stats/SKILL.md +1 -0
  106. package/skills/style/SKILL.md +18 -140
  107. package/skills/synthesize/SKILL.md +1 -0
  108. package/skills/timeline/SKILL.md +1 -0
  109. package/skills/todo/SKILL.md +1 -0
  110. package/skills/turn-closeout/SKILL.md +36 -56
  111. package/skills/undo/SKILL.md +1 -0
  112. package/skills/update/SKILL.md +1 -0
  113. package/skills/verify/SKILL.md +42 -457
  114. package/skills/warm-cache/SKILL.md +3 -35
  115. package/skills/zoom-out/SKILL.md +26 -0
@@ -5,14 +5,14 @@
5
5
  },
6
6
  "metadata": {
7
7
  "description": "Get Design Done — 5-stage agent-orchestrated design pipeline with 9 connections, handoff-first workflow, bidirectional Figma write-back, 22+ specialized agents, queryable knowledge layer (intel store, dependency analysis, learnings extraction), and a self-improvement loop (reflector, frontmatter + budget feedback, global-skills layer). v1.20.0 ships the SDK foundation: gdd-state MCP server (11 typed tools), lockfile-safe STATE.md mutations, event stream, and resilience primitives (jittered-backoff, rate-guard, error-classifier, iteration-budget) for rate-limit + 429 + context-overflow recovery. Full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows) and release automation (auto-tag + GitHub Release + release-time smoke test).",
8
- "version": "1.27.7"
8
+ "version": "1.28.5"
9
9
  },
10
10
  "plugins": [
11
11
  {
12
12
  "name": "get-design-done",
13
13
  "source": "./",
14
14
  "description": "Agent-orchestrated 5-stage design pipeline: Brief → Explore → Plan → Design → Verify. 22+ specialized agents, 9 connections (Figma, Refero, Preview, Storybook, Chromatic, Figma Writer, Graphify, Pinterest, Claude Design), Claude Design handoff, bidirectional Figma write-back, and a queryable intel store (.design/intel/) for dependency and learnings queries. Standalone commands: style, darkmode, compare, figma-write, graphify, handoff, analyze-dependencies, skill-manifest, extract-learnings. Embeds NNG heuristics, WCAG thresholds, typographic systems, motion framework, and anti-pattern catalog. Ships with a full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows) and release automation. Optimization layer (v1.0.4.1, retroactive): gdd-router + gdd-cache-manager skills, PreToolUse budget-enforcer hook, tier-aware agent frontmatter, lazy checker gates, streaming synthesizer, /gdd:warm-cache + /gdd:optimize commands, and cost telemetry at .design/telemetry/costs.jsonl — targeting 50-70% per-task token-cost reduction with no quality-floor regression. v1.20.0 SDK foundation: gdd-state MCP server (11 typed tools), lockfile-safe STATE.md mutations, event stream at .design/telemetry/events.jsonl, resilience primitives (jittered-backoff, rate-guard, error-classifier, iteration-budget) with rate-limit + 429 + context-overflow recovery, and TypeScript toolchain.",
15
- "version": "1.27.7",
15
+ "version": "1.28.5",
16
16
  "author": {
17
17
  "name": "hegemonart"
18
18
  },
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "get-design-done",
3
3
  "short_name": "gdd",
4
- "version": "1.27.7",
5
- "description": "Agent-orchestrated 5-stage design pipeline: Brief → Explore → Plan → Design → Verify. 22+ specialized agents, 9 connections (Figma, Refero, Preview, Storybook, Chromatic, Figma Writer, Graphify, Pinterest, Claude Design), handoff-first workflow via Claude Design bundles, bidirectional Figma write-back (annotations, Code Connect), queryable intel store (`.design/intel/`) for O(1) design surface lookups, and self-improvement loop (reflector agent, frontmatter + budget feedback, global-skills layer at `~/.claude/gdd/global-skills/`). Standalone commands: style, darkmode, compare, figma-write, graphify, handoff, analyze-dependencies, skill-manifest, extract-learnings, reflect, apply-reflections. Embeds NNG heuristics, WCAG thresholds, typographic systems, motion framework, and anti-pattern catalog. Ships with a full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows, lint + schema + frontmatter + stale-ref + shellcheck + gitleaks + injection-scan + blocking size-budget) and release automation (auto-tag + GitHub Release + release-time smoke test). Optimization layer (v1.0.4.1, retroactive): gdd-router + gdd-cache-manager skills, PreToolUse budget-enforcer hook, tier-aware agent frontmatter, lazy checker gates, streaming synthesizer, /gdd:warm-cache + /gdd:optimize commands, and cost telemetry at .design/telemetry/costs.jsonl — targeting 50-70% per-task token-cost reduction with no quality-floor regression. v1.20.0 SDK foundation: gdd-state MCP server (11 typed tools), lockfile-safe STATE.md mutations, event stream at .design/telemetry/events.jsonl, resilience primitives (jittered-backoff, rate-guard, error-classifier, iteration-budget) with rate-limit + 429 + context-overflow recovery, and TypeScript toolchain. v1.27.7 ships gdd-mcp (Phase 27.7): 12 read-only MCP tools for sub-3s priming.",
4
+ "version": "1.28.5",
5
+ "description": "Agent-orchestrated 5-stage design pipeline: Brief → Explore → Plan → Design → Verify. 22+ specialized agents, 9 connections (Figma, Refero, Preview, Storybook, Chromatic, Figma Writer, Graphify, Pinterest, Claude Design), handoff-first workflow via Claude Design bundles, bidirectional Figma write-back (annotations, Code Connect), queryable intel store (`.design/intel/`) for O(1) design surface lookups, and self-improvement loop (reflector agent, frontmatter + budget feedback, global-skills layer at `~/.claude/gdd/global-skills/`). Standalone commands: style, darkmode, compare, figma-write, graphify, handoff, analyze-dependencies, skill-manifest, extract-learnings, reflect, apply-reflections. Embeds NNG heuristics, WCAG thresholds, typographic systems, motion framework, and anti-pattern catalog. Ships with a full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows, lint + schema + frontmatter + stale-ref + shellcheck + gitleaks + injection-scan + blocking size-budget) and release automation (auto-tag + GitHub Release + release-time smoke test). Optimization layer (v1.0.4.1, retroactive): gdd-router + gdd-cache-manager skills, PreToolUse budget-enforcer hook, tier-aware agent frontmatter, lazy checker gates, streaming synthesizer, /gdd:warm-cache + /gdd:optimize commands, and cost telemetry at .design/telemetry/costs.jsonl — targeting 50-70% per-task token-cost reduction with no quality-floor regression. v1.20.0 SDK foundation: gdd-state MCP server (11 typed tools), lockfile-safe STATE.md mutations, event stream at .design/telemetry/events.jsonl, resilience primitives (jittered-backoff, rate-guard, error-classifier, iteration-budget) with rate-limit + 429 + context-overflow recovery, and TypeScript toolchain. v1.27.7 ships gdd-mcp (Phase 27.7): 12 read-only MCP tools for sub-3s priming. v1.28.0 (Phase 28): Foundational References Tier 2 — 5 new reference files (color-theory, composition, proportion-systems, i18n, contrast-advanced), 2 verifier i18n probes + 1 explore i18n-readiness probe, 12 additive cross-link insertions across 10 existing references, 2 orthogonal audit-scoring lens-tags (composition_alignment + i18n_readiness).",
6
6
  "author": {
7
7
  "name": "hegemonart",
8
8
  "url": "https://github.com/hegemonart"
package/CHANGELOG.md CHANGED
@@ -4,6 +4,148 @@ All notable changes to get-design-done are documented here. Versions follow [sem
4
4
 
5
5
  ---
6
6
 
7
+ ## [1.28.5] — 2026-05-18
8
+
9
+ ### Phase 28.5 — Skill Authoring Contract + Skill Rework + Project Artifacts
10
+
11
+ Adopts the mattpocock/skills (MIT) authoring contract and applies it retroactively across the entire shipped skill set. Closes the authoring-discipline gap surfaced by the 2026-05-02 comparison audit. 12 plans across 4 waves; off-cadence decimal patch from v1.28.0 parent (CONTEXT.md D-12 convention).
12
+
13
+ #### New reference files
14
+
15
+ - `reference/skill-authoring-contract.md` (28.5-01) — 100-line `SKILL.md` cap (warn >=100, block >=250 in CI), 1024-char description cap, required `<what>. Use when <triggers>.` form, frontmatter required fields, progressive-disclosure one-level-deep rule, when to add `scripts/`, per-skill domain-specific files allowed only when content is single-skill-private.
16
+ - `reference/context-md-format.md` (28.5-02) — DDD-style ubiquitous-language glossary schema with optional `first-seen` + `aliases` GDD additions; CONTEXT-MAP.md multi-context pattern; inline-write-on-resolution trigger.
17
+ - `reference/adr-format.md` (28.5-02) — 3-criteria offer gate (hard-to-reverse AND surprising-without-context AND real-tradeoff), 4-state status lifecycle, optional `cycle-id` + `phase-id` cross-refs back to STATE.md (GDD addition).
18
+ - `reference/architecture-vocabulary.md` (28.5-03) — Ousterhout's 8 core terms (Module / Interface / Implementation / Depth / Seam / Adapter / Leverage / Locality) + 3 principles (deletion test, interface-is-test-surface, two-adapters-rule).
19
+ - `reference/scan-procedure.md`, `verify-procedure.md`, `design-procedure.md`, `plan-procedure.md`, `explore-procedure.md`, `discover-procedure.md` (28.5-04) — 6 procedure references extracted from pipeline-stage skills as progressive-disclosure satellites.
20
+ - `reference/shared-preamble.md` (28.5-05, extended), `style-doc-procedure.md`, `compare-rubric.md`, `darkmode-audit-procedure.md`, `connections-onboarding.md` (28.5-05) — 4 new + 1 extended (Bucket 2 design-family rework).
21
+ - `reference/health-mcp-detection.md`, `apply-reflections-procedure.md`, `cache-policy.md`, `router-rules.md`, `start-procedure.md` (28.5-06) — 5 references extracted from Bucket 3 orchestrator + utility skills.
22
+ - `reference/debug-feedback-loops.md` (28.5-07 scaffold + 28.5-09 fill) — 10 construction paths in priority order, iterate-on-loop sub-discipline, non-determinism reproduction-rate branch.
23
+ - `reference/threat-modeling.md`, `milestone-completeness-rubric.md`, `peer-cli-protocol.md` (28.5-07) — 3 additional Bucket 4 extraction targets (analysis + audit skills).
24
+ - `reference/health-skill-length-report.md` (28.5-11) — health-skill subsection contract documenting validator JSON shape + threshold rationale.
25
+
26
+ #### Skill rework
27
+
28
+ - Bucket 1 (28.5-04) — 11 pipeline-stage skills (`brief`, `discuss`, `plan`, `design`, `verify`, `explore`, `discover`, `scan`, `sketch`, `spike`, `new-cycle`, `complete-cycle`) reworked to <=100 lines.
29
+ - Bucket 2 (28.5-05) — 7 design-family skills (`audit`, `style`, `darkmode`, `compare`, `design`, `figma-write`, `connections`, `benchmark`) cross-link cleanup + description standardization.
30
+ - Bucket 3 (28.5-06) — 34 orchestrator + utility skills (`help`, `stats`, `note`, `add-backlog`, `todo`, `progress`, `health`, `update`, `undo`, `fast`, `quick`, `next`, `do`, `resume`, `pause`, etc.) `disable-model-invocation: true` whitelist applied; targeted trims on the offenders.
31
+ - Bucket 4 (28.5-07) — 17 analysis + audit skills (`scan`, `map`, `analyze-dependencies`, `sketch-wrap-up`, `spike-wrap-up`, `skill-manifest`, `debug`, `peers`, `peer-cli-add`, `peer-cli-customize`, `quality-gate`, `turn-closeout`, `start`, `check-update`, `optimize`, etc.) extraction-then-link pattern; new refs created where content qualified as proper reference material.
32
+ - All 70 skills under 100 lines post-rework (`scripts/validate-skill-length.cjs --quiet --json` summary: 70 total / 70 clean / 0 warn / 0 block).
33
+
34
+ #### Skill patches + new skill
35
+
36
+ - `discuss` + `brief` skill patches (28.5-08) — inline `CONTEXT.md` glossary maintenance (no batching) + ADR-offer 3-criteria gate at session end.
37
+ - `hooks/gdd-decision-injector.js` extended (28.5-08) — reads `CONTEXT.md` + `docs/adr/*` additively alongside STATE.md cycle-scoped decisions.
38
+ - `debug` skill Phase 1 patch (28.5-09) — explicit feedback-loop gate before any hypothesizing; cross-link to `reference/debug-feedback-loops.md` one level deep.
39
+ - New `/gdd:zoom-out` micro-skill (28.5-10) at `skills/zoom-out/SKILL.md` — ~10 lines body, frontmatter `disable-model-invocation: true`. Direct port from mattpocock/skills (MIT). Total shipped skills: 69 -> 70.
40
+
41
+ #### CI gate + health reporting (28.5-11)
42
+
43
+ - `.github/workflows/ci.yml` lint job invokes `node scripts/validate-skill-length.cjs --quiet --json`. Block-level errors (>=250 lines, missing required frontmatter, description out of 1024-char range, unauthorized `disable-model-invocation: true`) fail the build. Warn-level findings (>=100 lines) are advisory.
44
+ - `skills/health/SKILL.md` gains a "Skill-length report" subsection rendering validator summary post-health-table.
45
+ - Regression baseline at `test-fixture/baselines/phase-28.5/` snapshots current line-count distribution + validator summary + 4-manifest version + cross-link integrity + registry diff.
46
+ - `tests/phase-28.5-baseline.test.cjs` (9 assertions) locks the baseline; future PRs cannot regress without regenerating the fixture.
47
+
48
+ #### Closeout (28.5-12)
49
+
50
+ - 4-manifest lockstep at v1.28.5: `package.json`, `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json` (metadata.version + plugins[0].version), `test-fixture/baselines/phase-28/manifests-version.txt` (Phase 28 baseline propagates forward per closeout discipline).
51
+ - `tests/semver-compare.test.cjs`: `OFF_CADENCE_VERSIONS.add('1.28.5')`.
52
+ - `NOTICE` extended with Phase 28.5 MIT attribution block for mattpocock/skills (covers 5 reference ports + zoom-out direct port + debug Phase 1 ordering).
53
+ - `reference/registry.json` += 24 new Phase 28.5 entries; `reference/registry.schema.json` aligned to `"phase": { "type": "number" }` (precedent already established by phase 19.6 / 27.5 / 27.6 / 27.7 entries).
54
+ - `test-fixture/baselines/phase-20/skill-list.txt` += `zoom-out` (now 70 skills).
55
+ - `.planning/ROADMAP.md` Phase 28.5 plan checkboxes (28.5-01..28.5-12) flipped to `[x]`; top-level overview entry flipped.
56
+
57
+ ### Decisions locked
58
+
59
+ - D-01: SKILL.md hard cap = 100 lines (warn), 250 lines (block). Strict description-format off by default — validator regex stays open until Phase 33's A/B evidence lands.
60
+ - D-02: Description format follows `<what>. Use when <triggers>.` shape (lax-mode default; Phase 33 A/B will tighten or relax).
61
+ - D-03: NOTICE MIT attribution covers 5 reference ports + zoom-out direct port + debug Phase 1 ordering.
62
+ - D-04: `reference/debug-feedback-loops.md` ships as a proper reference, not inline in the debug SKILL — per progressive-disclosure rule.
63
+ - D-05: `gdd-zoom-out` skill ships with `disable-model-invocation: true` (user-invoked-only shortcut).
64
+ - D-06: CI gate is two-tier — warn-level advisory, block-level fails the build.
65
+ - D-07: `hooks/gdd-decision-injector.js` reads CONTEXT.md + `docs/adr/*` additively alongside STATE.md (no replacement, no precedence change).
66
+ - D-08: ADR-offer fires only when ALL three criteria hold (hard-to-reverse AND surprising-without-context AND real-tradeoff). Routine decisions are explicitly skipped.
67
+ - D-09: 28 skills marked `disable-model-invocation: true` (27 from Bucket 3 + new zoom-out).
68
+ - D-10: Health-MCP detection procedure extracted to `reference/health-mcp-detection.md`; SKILL links one level deep.
69
+ - D-11: `gdd-health` SKILL gains skill-length report subsection — validator JSON shape documented in `reference/health-skill-length-report.md`.
70
+ - D-12: 4-manifest lockstep at v1.28.5; off-cadence decimal patch from v1.28.0 parent. `OFF_CADENCE_VERSIONS.add('1.28.5')` per Phase 27.5/27.6/27.7 closeout discipline.
71
+
72
+ ### Out of scope (deferred or rejected)
73
+
74
+ - Description-format regex tightening — deferred until Phase 33 A/B evidence on `<what>` clause shortcut behavior lands at `.design/research/description-format-ab.md`.
75
+ - Generating SKILL.md from a frontmatter-only spec (DSL) — keeps SKILL.md authorable by humans; reject machine-only generation per first-class-prose principle.
76
+ - Auto-fixer for over-limit skills — validator is read-only; manual rework preserves authorial intent.
77
+ - Cross-skill description deduplication — accept some triggering overlap; D-02 form is a soft cap, not a uniqueness invariant.
78
+
79
+ ### Attribution
80
+
81
+ See `NOTICE` Phase 28.5 block for the mattpocock/skills (MIT) attribution covering ported content. License remains MIT (compatible with mattpocock's MIT) — see `LICENSE`.
82
+
83
+ ---
84
+
85
+ ## [1.28.0] — 2026-05-18
86
+
87
+ ### Phase 28 — Foundational References Tier 2 — Color, Composition, Proportion, i18n
88
+
89
+ Closes 4 foundational-fundamentals gaps + 1 contrast layer surfaced by the 2026-05-01 huashu-design comparison audit + parallel i18n-coverage audit. Pure content + light agent wiring; no architectural change, no new pillar, no breaking consumer contract.
90
+
91
+ #### New reference files (Wave A + B)
92
+
93
+ - `reference/color-theory.md` (28-01) — color spaces (sRGB / HSL / OKLCH / LCH), 6 harmonies in OKLCH, simultaneous contrast, color-blindness palettes, color interpolation in animation (closes the sRGB muddy-mid-transition problem).
94
+ - `reference/composition.md` (28-02) — rule of thirds, phi / sqrt(2) / sqrt(3) / sqrt(5) root rectangles, Fibonacci, focal-point construction, visual-weight calculus (size x contrast x isolation x complexity), optical-vs-mathematical centering, Z/F/Gutenberg eye-flow patterns.
95
+ - `reference/proportion-systems.md` (28-03) — 4pt / 8pt / sqrt(2) baseline grids, baseline-grid lock, vertical rhythm, modular relationships across type + spacing + sizing + radius.
96
+ - `reference/i18n.md` (28-04) — text expansion per locale, CSS logical properties, RTL mirroring + directional-icon flip catalog, bidi isolation, full `Intl.*` family (DateTimeFormat / NumberFormat / PluralRules / RelativeTimeFormat / ListFormat / Collator / Segmenter), ICU MessageFormat, Unicode hygiene, multi-script font stacks, WCAG i18n; spec source for design-verifier + explore probes.
97
+ - `reference/contrast-advanced.md` (28-05) — APCA (WCAG 3 draft) Lc 75/60/45/30 thresholds, why 4.5:1 misranks thin/large/colored text (3 worked examples), dual-target pattern with WCAG 2.1 AA, Lc-to-WCAG conversion table. **Ships at v1.28.0 (D-02 — not deferred).**
98
+
99
+ #### Consumer integration (Wave C — 28-06)
100
+
101
+ - `agents/design-verifier.md` gains `### i18n probes` subsection with 2 probes: hardcoded-string scan (regex catalog matches react-intl / next-intl / i18next / vue-i18n patterns per D-10) + +40% text-overflow simulation (`scrollWidth > clientWidth` check per D-03). Findings tagged `i18n_readiness` (orthogonal lens, NOT a new pillar).
102
+ - `skills/explore/SKILL.md` gains i18n-readiness probe under Step 2 — informational 3-state classification (`framework-managed` / `partial` / `none`) per D-04 + D-11. NO gate, NO blocking.
103
+ - `reference/registry.json` gains 5 new entries (D-05) — round-trip schema enforced.
104
+ - `reference/audit-scoring.md` gains 2 orthogonal lens-tags (D-07) — `composition_alignment` + `i18n_readiness`. NO new pillar, NO weight change.
105
+ - 12 additive cross-link insertions across 10 existing reference files (D-06): `palette-catalog.md` Step 4 -> `color-theory.md`; `motion-interpolate.md` -> `color-theory.md`; `visual-hierarchy-layout.md` (Compositional Grids + Asymmetry) -> `composition.md`; `design-system-guidance.md` -> `proportion-systems.md`; `typography.md` (Type Scale Systems + Variable Fonts) -> `proportion-systems.md` + `i18n.md`; `rtl-cjk-cultural.md` (top-of-file) -> `i18n.md`; `form-patterns.md` -> `i18n.md`; `accessibility.md` (x2) -> `i18n.md` + `contrast-advanced.md`; `iconography.md` -> `composition.md`; `style-vocabulary.md` -> `proportion-systems.md`.
106
+
107
+ #### Decisions locked
108
+
109
+ - D-01 (rejection): No net-new audit pillar — orthogonal lens-tags only on existing pillars.
110
+ - D-02: `contrast-advanced.md` ships at v1.28.0 (not deferred).
111
+ - D-03: Verifier overflow probe uses `scrollWidth > clientWidth` after +40% text expansion (cheap synchronous DOM check, no headless-browser dependency).
112
+ - D-04: Explore i18n probe is informational only — 3-state output (`framework-managed` / `partial` / `none`), no gate, no blocking.
113
+ - D-05: 5 new `reference/registry.json` entries with phase=28.
114
+ - D-06: All 12 cross-link insertions are additive (no removals, no rewordings of existing content).
115
+ - D-07: 2 audit-scoring lens-tags (`composition_alignment` + `i18n_readiness`) — orthogonal to existing pillars, not new pillars.
116
+ - D-08: 4-manifest lockstep at 1.28.0 — `package.json#version`, `.claude-plugin/plugin.json#version`, `.claude-plugin/marketplace.json#metadata.version`, `.claude-plugin/marketplace.json#plugins[0].version` all align. `OFF_CADENCE_VERSIONS.add('1.28.0')` added to `tests/semver-compare.test.cjs`.
117
+ - D-09: Phase 20 baselines unchanged (no new agents/skills/hooks introduced in Phase 28).
118
+ - D-10: Hardcoded-string scan covers react-intl / next-intl / i18next / vue-i18n call-site patterns; false-positive tightening is reflector carry-forward debt.
119
+ - D-11: Explore probe is single-shot per run (no caching, no telemetry pinning).
120
+ - D-12: ROADMAP scoped flip — 7 inline plan checkboxes (28-01..28-07) + 1 top-level overview entry. STRICTLY bounded to Phase 28; other phases' `[ ]` markers untouched.
121
+
122
+ #### Tests added
123
+
124
+ - `tests/phase-28-probes.test.cjs` — 21 tests (28-06): verifier i18n probes, explore i18n-readiness probe, 5 registry entries, cross-link integrity across 12 insertions, audit-scoring lens-tags.
125
+ - `tests/phase-28-baseline.test.cjs` — 8 tests (28-07): 4-manifest alignment, baseline file presence, reference file presence, registry round-trip, cross-link integrity, verifier + explore probe markers, CHANGELOG block at top, OFF_CADENCE recognition. Version-agnostic (reads `package.json#version` dynamically — D-08 lesson).
126
+ - `test-fixture/baselines/phase-28/` — 6 baseline text files: `reference-files-presence.txt`, `registry-diff.txt`, `cross-link-integrity.txt`, `verifier-probes-presence.txt`, `explore-probe-presence.txt`, `manifests-version.txt`.
127
+
128
+ #### Out of scope (deferred or rejected)
129
+
130
+ - 20 designer-school philosophies catalog (huashu-design license unresolved).
131
+ - Brand asset acquisition protocol (5-10-2-8 curation rule — separate phase).
132
+ - Color-management profiles (Display-P3 / Rec.2020 / BT.2100 — video/print only).
133
+ - Generative color systems (Material You algorithm — already in `style-vocabulary.md`).
134
+ - Net-new audit pillar (lens-tags instead, per D-07).
135
+ - Translation-management workflows (Crowdin / Lokalise / Phrase — ops concern).
136
+ - Locale-pack bundling / lazy-loading (production tuning concern).
137
+ - Pseudolocalization tooling (+40% overflow at verifier layer covers same QA goal).
138
+ - RTL typography subtleties beyond mirroring (Arabic kashida, vertical CJK — `rtl-cjk-cultural.md` already touches).
139
+
140
+ #### Carry-forward debt
141
+
142
+ - Verifier hardcoded-string scan false-positive rate (D-10) — reflector measures over first N runs; tightens regex per Phase 11 self-improvement loop.
143
+ - APCA spec ratification — currently WCAG 3 draft; if it advances to candidate-recommendation, `contrast-advanced.md` becomes more authoritative.
144
+ - ICU MessageFormat 2.0 status — currently Stage 3 / draft at TC39; if it lands, `i18n.md` ICU section may add 2.0 examples in a follow-up.
145
+ - `Intl.Segmenter` browser-support drift — Safari shipped late; polyfill/fallback note may need adding to `i18n.md` Unicode Hygiene section.
146
+
147
+ ---
148
+
7
149
  ## [1.27.7] — 2026-05-18
8
150
 
9
151
  ### Added
package/SKILL.md CHANGED
@@ -2,7 +2,7 @@
2
2
  name: get-design-done
3
3
  short_name: gdd
4
4
  description: "Master design pipeline for Claude Code. 5-stage workflow: Brief → Explore → Plan → Design → Verify. Run 'brief' first in any new project to capture the design problem, then 'explore' to inventory the codebase and interview for context. Invoke without arguments for status and auto-routing."
5
- argument-hint: "[brief|explore|plan|design|verify|handoff|map|next|help|status|style|darkmode|compare|figma-write|graphify|discuss|list-assumptions|progress|health|todo|stats|note|plant-seed|add-backlog|review-backlog|scan|discover|settings|update|reapply-patches|audit|pause|resume|new-cycle|debug|quick|new-project|complete-cycle|fast|do|ship|undo|pr-branch|sketch|sketch-wrap-up|spike|spike-wrap-up|reflect|apply-reflections|analyze-dependencies|extract-learnings|skill-manifest|warm-cache|optimize|cache-manager|watch-authorities|check-update|benchmark|recall|timeline|continue]"
5
+ argument-hint: "[brief|explore|plan|design|verify|handoff|map|next|help|status|style|darkmode|compare|figma-write|graphify|discuss|list-assumptions|progress|health|todo|stats|note|plant-seed|add-backlog|review-backlog|scan|discover|settings|update|reapply-patches|audit|pause|resume|new-cycle|debug|quick|new-project|complete-cycle|fast|do|ship|undo|pr-branch|sketch|sketch-wrap-up|spike|spike-wrap-up|reflect|apply-reflections|analyze-dependencies|extract-learnings|skill-manifest|warm-cache|optimize|cache-manager|watch-authorities|check-update|benchmark|recall|timeline|continue|zoom-out]"
6
6
  user-invocable: true
7
7
  ---
8
8
 
@@ -161,6 +161,23 @@ Before → After
161
161
  ━━━━━━━━━━━━━━━━━━━━━
162
162
  ```
163
163
 
164
+ ### i18n probes
165
+
166
+ Two additive probes (Phase 28, D-03 — orthogonal `i18n_readiness` lens-tag, NOT a new pillar). Full spec: `./reference/i18n.md` §Verifier Integration Spec; severity rules: `./reference/audit-scoring.md` §Lens-Tags.
167
+
168
+ **Probe 1 — Hardcoded-string scan.** Regex catalog (D-10 patterns):
169
+
170
+ ```txt
171
+ react-intl: <FormattedMessage\s+id="[^"]+"
172
+ next-intl: \bt\(\s*['"][a-zA-Z][\w.]*['"]
173
+ i18next: \bt\(\s*['"][a-zA-Z][\w.]*['"]\s*,\s*\{
174
+ vue-i18n: \$t\(\s*['"][a-zA-Z][\w.]*['"]
175
+ ```
176
+
177
+ Allow-list seed (skip): `console\.(log|error|warn|info|debug)`, dev-only `/* */` comments, `data-testid=`, `className=`, `import … from` paths. Severity: `MINOR` per file; `MAJOR` if violating files > 10. Output: `i18n_readiness: <N> hardcoded strings in <M> files`.
178
+
179
+ **Probe 2 — +40% text-overflow simulation.** Worst-case LTR expansion (RU/FI/PL family — `./reference/i18n.md` §Text Expansion). Per text node `T`: pad `T.textContent` to `length × 1.4`, measure `T.parentElement.scrollWidth > clientWidth`, restore original. Prefer Preview MCP screenshot-diff when available; fall back to in-process DOM measurement headless. Severity `MINOR` per finding; `MAJOR` if overflowing components > 10. Output: `i18n_readiness: <N> components overflow at +40% expansion`.
180
+
164
181
  ---
165
182
 
166
183
  ## Phase 2 — Must-Have Check
@@ -280,6 +280,128 @@ function buildPrototypingBlock(stateFile, basename, relPath) {
280
280
  return lines.join('\n');
281
281
  }
282
282
 
283
+ /**
284
+ * Phase 28.5 plan 08 (D-04) — additive CONTEXT.md / ADR context.
285
+ *
286
+ * `CONTEXT.md` is a project-scoped ubiquitous-language glossary (schema:
287
+ * reference/context-md-format.md). Each entry is an `## Term` heading + body
288
+ * paragraph; optional `**Aliases:** [...]` line enables term-merging. The hook
289
+ * surfaces entries whose name or aliases match the opened file's tokens.
290
+ *
291
+ * ADRs live at `docs/adr/NNNN-<slug>.md` (schema: reference/adr-format.md). The
292
+ * hook surfaces matching titles as one-line cross-references.
293
+ *
294
+ * All file reads are defensive: missing or malformed files yield [] silently so
295
+ * the hook NEVER crashes (T-28.5-08-01 mitigation). Output is bounded by
296
+ * PROTOTYPING_TOP_N to prevent DoS (T-28.5-08-03).
297
+ */
298
+ function readContextMd(repoRoot) {
299
+ const ctxPath = path.join(repoRoot, 'CONTEXT.md');
300
+ if (!fs.existsSync(ctxPath)) return [];
301
+ let content;
302
+ try { content = fs.readFileSync(ctxPath, 'utf8'); } catch { return []; }
303
+ const entries = [];
304
+ // Split on `## ` only when it is the start of a line. The first segment is
305
+ // preamble (everything before the first ## heading) — discard it.
306
+ const sections = content.split(/^## /m).slice(1);
307
+ for (const sec of sections) {
308
+ const lines = sec.split(/\r?\n/);
309
+ const term = (lines[0] || '').trim();
310
+ if (!term) continue;
311
+ const body = lines.slice(1).join('\n');
312
+ let aliases = [];
313
+ const aliasMatch = body.match(/\*\*Aliases:\*\*\s*\[([^\]]+)\]/);
314
+ if (aliasMatch) {
315
+ aliases = aliasMatch[1]
316
+ .split(',')
317
+ .map((s) => s.trim().replace(/^["']|["']$/g, ''))
318
+ .filter(Boolean);
319
+ }
320
+ entries.push({ term, body, aliases });
321
+ }
322
+ return entries;
323
+ }
324
+
325
+ function readAdrs(repoRoot) {
326
+ const adrDir = path.join(repoRoot, 'docs', 'adr');
327
+ if (!fs.existsSync(adrDir)) return [];
328
+ let files;
329
+ try { files = fs.readdirSync(adrDir); } catch { return []; }
330
+ const entries = [];
331
+ for (const f of files) {
332
+ if (!/^\d{4}-.*\.md$/.test(f)) continue;
333
+ let content;
334
+ try { content = fs.readFileSync(path.join(adrDir, f), 'utf8'); } catch { continue; }
335
+ // Title from frontmatter `title:` line, else first H1, else filename.
336
+ const titleMatch = content.match(/^title:\s*(.+)$/m) || content.match(/^# (.+)$/m);
337
+ const title = titleMatch
338
+ ? titleMatch[1].trim().replace(/^["']|["']$/g, '')
339
+ : f.replace(/\.md$/, '');
340
+ entries.push({ path: `docs/adr/${f}`, title, body: content.slice(0, 500) });
341
+ }
342
+ return entries;
343
+ }
344
+
345
+ function matchContextEntries(entries, tokens) {
346
+ if (!entries.length || !tokens.length) return [];
347
+ const lcTokens = tokens.map((t) => String(t).toLowerCase()).filter(Boolean);
348
+ const out = [];
349
+ for (const e of entries) {
350
+ const candidates = [e.term, ...e.aliases].map((s) => String(s).toLowerCase());
351
+ const hit = candidates.some((cand) =>
352
+ lcTokens.some((tok) => cand.includes(tok) || tok.includes(cand))
353
+ );
354
+ if (hit) out.push(e);
355
+ }
356
+ return out;
357
+ }
358
+
359
+ function matchAdrEntries(entries, tokens) {
360
+ if (!entries.length || !tokens.length) return [];
361
+ const lcTokens = tokens.map((t) => String(t).toLowerCase()).filter(Boolean);
362
+ return entries.filter((a) => {
363
+ const t = a.title.toLowerCase();
364
+ return lcTokens.some((tok) => t.includes(tok));
365
+ });
366
+ }
367
+
368
+ function buildGlossaryBlock(matched) {
369
+ if (!matched.length) return null;
370
+ const lines = [];
371
+ lines.push('');
372
+ lines.push('### Project glossary (CONTEXT.md)');
373
+ for (const e of matched.slice(0, PROTOTYPING_TOP_N)) {
374
+ const snippet = e.body
375
+ .split(/\r?\n/)
376
+ .filter((l) => l.trim() && !l.startsWith('**'))
377
+ .slice(0, 2)
378
+ .join(' ')
379
+ .trim();
380
+ const trimmed = snippet.length > 200 ? snippet.slice(0, 197) + '…' : snippet;
381
+ lines.push(`> - **${e.term}** — ${trimmed}`);
382
+ }
383
+ if (matched.length > PROTOTYPING_TOP_N) {
384
+ lines.push(`> … (${matched.length - PROTOTYPING_TOP_N} more glossary entr${matched.length - PROTOTYPING_TOP_N === 1 ? 'y' : 'ies'})`);
385
+ }
386
+ lines.push('');
387
+ return lines.join('\n');
388
+ }
389
+
390
+ function buildAdrBlock(matched) {
391
+ if (!matched.length) return null;
392
+ const lines = [];
393
+ lines.push('');
394
+ lines.push('### Architecture Decision Records (ADRs)');
395
+ for (const a of matched.slice(0, PROTOTYPING_TOP_N)) {
396
+ lines.push(`> - [${a.title}](${a.path})`);
397
+ }
398
+ if (matched.length > PROTOTYPING_TOP_N) {
399
+ lines.push(`> … (${matched.length - PROTOTYPING_TOP_N} more ADR${matched.length - PROTOTYPING_TOP_N === 1 ? '' : 's'})`);
400
+ }
401
+ lines.push('');
402
+ return lines.join('\n');
403
+ }
404
+
283
405
  function buildRecallBlock(matches, basename, backendLabel) {
284
406
  if (!matches.length) return null;
285
407
  const uniq = [];
@@ -380,15 +502,39 @@ async function main() {
380
502
  const stateFile = sources.find((p) => p.endsWith(path.sep + 'STATE.md') || p.endsWith('/STATE.md'));
381
503
  const protoBlock = buildPrototypingBlock(stateFile, basename, relPath);
382
504
 
383
- if (!block && !protoBlock) {
505
+ // Phase 28.5 plan 08 (D-04): additive CONTEXT.md + ADR context. Tokens used
506
+ // for matching are derived from the opened file's basename + relPath, split
507
+ // on kebab/snake/path separators and filtered down to substantive tokens.
508
+ // The match is intentionally loose (substring both ways) so an alias like
509
+ // "heuristics" surfaces when opening reference/heuristics.md.
510
+ const matchTokens = Array.from(new Set([
511
+ basename.replace(/\.md$/i, ''),
512
+ ...basename.replace(/\.md$/i, '').split(/[-_./\\]/),
513
+ ...relPath.split(/[-_./\\]/),
514
+ ].filter((t) => t && t.length > 2)));
515
+
516
+ let glossaryBlock = null;
517
+ let adrBlock = null;
518
+ try {
519
+ const ctxEntries = readContextMd(cwd);
520
+ const matchedCtx = matchContextEntries(ctxEntries, matchTokens);
521
+ glossaryBlock = buildGlossaryBlock(matchedCtx);
522
+ } catch { /* defensive: never crash on CONTEXT.md issues */ }
523
+ try {
524
+ const adrEntries = readAdrs(cwd);
525
+ const matchedAdrs = matchAdrEntries(adrEntries, matchTokens);
526
+ adrBlock = buildAdrBlock(matchedAdrs);
527
+ } catch { /* defensive: never crash on ADR issues */ }
528
+
529
+ if (!block && !protoBlock && !glossaryBlock && !adrBlock) {
384
530
  try { require('./_hook-emit.js').emitHookFired('gdd-decision-injector', 'no-hits', { backend: backendLabel }); } catch { /* swallow */ }
385
531
  process.stdout.write(JSON.stringify({ continue: true }));
386
532
  return;
387
533
  }
388
534
 
389
- const additionalContext = [block, protoBlock].filter(Boolean).join('\n');
535
+ const additionalContext = [block, protoBlock, glossaryBlock, adrBlock].filter(Boolean).join('\n');
390
536
 
391
- try { require('./_hook-emit.js').emitHookFired('gdd-decision-injector', 'inject', { backend: backendLabel, hit_count: hits.length, prototyping: !!protoBlock }); } catch { /* swallow */ }
537
+ try { require('./_hook-emit.js').emitHookFired('gdd-decision-injector', 'inject', { backend: backendLabel, hit_count: hits.length, prototyping: !!protoBlock, glossary: !!glossaryBlock, adr: !!adrBlock }); } catch { /* swallow */ }
392
538
  process.stdout.write(JSON.stringify({
393
539
  continue: true,
394
540
  hookSpecificOutput: { hookEventName: 'PreToolUse', additionalContext },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hegemonart/get-design-done",
3
- "version": "1.27.7",
3
+ "version": "1.28.5",
4
4
  "description": "A design-quality pipeline for AI coding agents: brief, plan, implement, and verify UI work against your design system.",
5
5
  "author": "Hegemon",
6
6
  "homepage": "https://github.com/hegemonart/get-design-done",
@@ -25,6 +25,8 @@ Common pitfalls:
25
25
 
26
26
  Tools: Use browser DevTools > Accessibility tab, or pass hex values through contrast calculation.
27
27
 
28
+ **See also:** [`./contrast-advanced.md`](./contrast-advanced.md) — APCA (WCAG 3 draft) for perceptual contrast when WCAG 2.1 4.5:1 misranks thin/large/colored text. Recommended dual-target pattern: enforce WCAG 2.1 AA as a floor + APCA Lc-thresholds (75 / 60 / 45 / 30) for perceptual accuracy.
29
+
28
30
  ### Touch Target Size
29
31
 
30
32
  | Platform | Minimum tap target |
@@ -75,6 +77,8 @@ Recommended focus ring: **3px solid**, `2px offset`, brand primary or `#2563eb`.
75
77
  - Images have descriptive `alt=""` for meaningful images; `alt=""` for decorative.
76
78
  - Icon-only buttons have `aria-label`: `<button aria-label="Close dialog">×</button>`.
77
79
 
80
+ **See:** [`./i18n.md`](./i18n.md) §WCAG i18n for SC 3.1.1 (`<html lang>`) and SC 3.1.2 (`<span lang="…">` language-of-parts) patterns — screen readers select voice/pronunciation packs from these attributes; a missing or wrong `lang` value forces the user to hear French announced in an English accent.
81
+
78
82
  ### Color Must Not Be The Only Differentiator
79
83
 
80
84
  Error states: red color + error icon + text message (not just red border).
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: adr-format
3
+ type: meta-rules
4
+ version: 1.0.0
5
+ phase: 28.5
6
+ tags: [adr, decision, project-scoped, architecture, offer-gate]
7
+ last_updated: 2026-05-18
8
+ ---
9
+
10
+ Source: mattpocock/skills (MIT) — adapted with permission. See `../NOTICE` for the full attribution block.
11
+
12
+ # ADR Format
13
+
14
+ An Architecture Decision Record (ADR) is a project-scoped record of a decision that
15
+ outlives the current cycle. ADRs live at `docs/adr/NNNN-<slug>.md` (zero-padded sequence,
16
+ kebab-case slug) and are offered SPARINGLY — only when all three criteria of the offer
17
+ gate hold (D-04). Most decisions stay in `STATE.md` and roll over with the cycle; ADRs
18
+ are the rare exception. See `./context-md-format.md` for the lighter glossary form that
19
+ shares the same project-scoped lifetime.
20
+
21
+ ## 3-criteria offer gate
22
+
23
+ ALL THREE criteria must hold for the agent to offer an ADR. If ANY criterion fails, keep
24
+ the decision in `STATE.md` instead.
25
+
26
+ - **hard-to-reverse.** Undoing this decision requires migrating data, breaking APIs, or
27
+ coordinating across multiple teams or agents. Routine code changes do not qualify.
28
+ - **surprising-without-context.** A reader six months from now, given only the codebase,
29
+ would be confused. The rationale must be NON-OBVIOUS from the result.
30
+ - **real-tradeoff.** At least one credible alternative was considered and rejected for
31
+ stated reasons. Decisions with no plausible alternative (e.g., "use HTTPS") do not
32
+ qualify.
33
+
34
+ Worked example — **qualifier:** "Switch from REST to GraphQL for the public API."
35
+ Hard-to-reverse (clients integrate against the schema), surprising-without-context (most
36
+ greenfield APIs default to REST), real-tradeoff (tRPC and gRPC were rejected for stated
37
+ reasons). Ship an ADR.
38
+
39
+ Worked example — **disqualifier:** "Rename the `users` table to `accounts`." Hard-to-reverse,
40
+ but the rationale is obvious from the rename and there is no real alternative once the
41
+ domain has settled on the word. Log in `STATE.md`, not an ADR.
42
+
43
+ ## Frontmatter
44
+
45
+ ```yaml
46
+ ---
47
+ title: <Active-voice imperative — e.g., "Adopt OKLCH for design tokens">
48
+ status: Proposed | Accepted | Superseded | Deprecated
49
+ date: <ISO 8601, YYYY-MM-DD>
50
+ cycle-id: <optional GDD addition — originating cycle slug, e.g., "v1.28.5">
51
+ phase-id: <optional GDD addition — originating phase, e.g., "28.5">
52
+ supersedes: <optional — ADR number this one replaces, e.g., "0042">
53
+ ---
54
+ ```
55
+
56
+ - **Required.** `title`, `status`, `date`.
57
+ - **Optional (GDD additions per D-04).** `cycle-id` and `phase-id` back-link to the
58
+ originating cycle's `STATE.md` and the phase that produced the decision. `supersedes`
59
+ points at the prior ADR number when this ADR replaces one.
60
+ - **Path convention.** `docs/adr/NNNN-<slug>.md` where `NNNN` is zero-padded (`0001`,
61
+ `0042`, etc.) and the slug is kebab-case.
62
+
63
+ ## Body structure
64
+
65
+ The ADR body uses four `##` sections in the following order. Each section is a thin
66
+ paragraph or short bullet list — ADRs are decision records, not design docs.
67
+
68
+ - `## Context` — what situation made this decision necessary; cite the originating
69
+ cycle's `BRIEF.md` or `STATE.md` if relevant.
70
+ - `## Decision` — what was chosen, stated as an imperative.
71
+ - `## Alternatives` — what was considered and rejected, with brief rationale per
72
+ alternative.
73
+ - `## Consequences` — what this enables, what it costs, what it constrains downstream.
74
+
75
+ ## Status lifecycle
76
+
77
+ ADRs progress through four states. The status field in frontmatter is the source of
78
+ truth; transitions are explicit, never silent.
79
+
80
+ - **Proposed.** Drafted but not yet decided; reviewer pass pending. Downstream work
81
+ does not cite Proposed ADRs.
82
+ - **Accepted.** Decision active; downstream work cites this ADR by number.
83
+ - **Superseded.** Replaced by a later ADR. The later ADR's `supersedes:` field points
84
+ here, and this ADR's status is flipped to Superseded. NEVER delete a Superseded ADR —
85
+ the audit trail is the point.
86
+ - **Deprecated.** No longer relevant (e.g., the system the ADR governed was removed).
87
+ Kept for history.
88
+
89
+ ## Cross-references
90
+
91
+ - Domain terms used in the ADR body should already appear in `CONTEXT.md` — see
92
+ `./context-md-format.md`. If a term is missing, the writer adds it before referencing it.
93
+ - Cycle-scoped decisions (most routine choices) stay in `STATE.md` — see
94
+ `./STATE-TEMPLATE.md`.
95
+ - Skill structural rules (length cap, frontmatter, progressive disclosure) — see
96
+ `./skill-authoring-contract.md`.
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: apply-reflections-procedure
3
+ type: heuristic
4
+ version: 1.0.0
5
+ phase: 28.5
6
+ tags: [apply-reflections, proposal, frontmatter, reference, budget, question, global-skill]
7
+ last_updated: 2026-05-18
8
+ ---
9
+
10
+ # Apply-Reflections — Per-Type Procedure
11
+
12
+ Extracted from `skills/apply-reflections/SKILL.md` per Phase 28.5 D-10 (extract-then-link,
13
+ never delete content). The orchestrator loop in `apply-reflections` (resolve file → parse →
14
+ review loop → summary) stays in the SKILL. The per-proposal-type apply logic below moves
15
+ here because it is content-class methodology, not workflow.
16
+
17
+ ## Apply Logic by Proposal Type
18
+
19
+ After the user chooses `a` (apply) or `e` (edit-then-apply) in the review loop, branch by
20
+ the proposal's bracketed type tag.
21
+
22
+ ### [FRONTMATTER]
23
+
24
+ 1. Extract agent name from Change field (e.g., `agents/design-verifier.md`)
25
+ 2. Read the agent file
26
+ 3. Find the frontmatter line matching the field being changed
27
+ 4. Use Edit tool to update the specific line
28
+ 5. Append `**Applied**: <date>` to the proposal in reflections file
29
+
30
+ ### [REFERENCE]
31
+
32
+ 1. Extract target file path from Change field (e.g., `reference/heuristics.md`)
33
+ 2. If file exists: append the drafted text using Edit tool
34
+ 3. If file doesn't exist: create it with a minimal header + the drafted text using Write tool
35
+ 4. Append `**Applied**: <date>` to proposal in reflections file
36
+
37
+ ### [BUDGET]
38
+
39
+ 1. Read `.design/budget.json`
40
+ 2. Locate the key path from the Change field (e.g., `design-verifier.per_run_cap_usd`)
41
+ 3. Update the value
42
+ 4. Write updated JSON back to `.design/budget.json`
43
+ 5. Append `**Applied**: <date>` to proposal in reflections file
44
+
45
+ ### [QUESTION]
46
+
47
+ 1. Read `agents/design-discussant.md`
48
+ 2. Find the question text specified in the Change field
49
+ 3. If pruning: remove the question lines using Edit tool
50
+ 4. If rewording: replace the question text using Edit tool
51
+ 5. Append `**Applied**: <date>` to proposal in reflections file
52
+
53
+ ### [GLOBAL-SKILL]
54
+
55
+ 1. Extract target filename from Change field (e.g., `design-color-conventions.md`)
56
+ 2. Ensure `~/.claude/gdd/global-skills/` directory exists (create with `mkdir -p` if not)
57
+ 3. If target file exists: append new content using Edit tool (add a `---` separator first)
58
+ 4. If target file doesn't exist: create with header + content using Write tool:
59
+
60
+ ```markdown
61
+ # <Topic> Conventions (Global)
62
+ *Promoted from project: <project-name>, cycle: <cycle-slug>*
63
+
64
+ <content>
65
+ ```
66
+
67
+ 5. Print: "Global skill written to ~/.claude/gdd/global-skills/<name>.md — auto-loads in all future gdd sessions"
68
+ 6. Append `**Applied**: <date>` to proposal in reflections file