gsdd-cli 0.16.1 → 0.18.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 (47) hide show
  1. package/README.md +109 -60
  2. package/agents/README.md +1 -1
  3. package/bin/adapters/claude.mjs +8 -1
  4. package/bin/adapters/codex.mjs +5 -1
  5. package/bin/adapters/opencode.mjs +7 -1
  6. package/bin/gsdd.mjs +6 -4
  7. package/bin/lib/evidence-contract.mjs +112 -0
  8. package/bin/lib/health-truth.mjs +29 -31
  9. package/bin/lib/health.mjs +32 -80
  10. package/bin/lib/init-runtime.mjs +44 -24
  11. package/bin/lib/init.mjs +3 -7
  12. package/bin/lib/lifecycle-preflight.mjs +333 -0
  13. package/bin/lib/lifecycle-state.mjs +293 -0
  14. package/bin/lib/phase.mjs +81 -26
  15. package/bin/lib/provenance.mjs +20 -1
  16. package/bin/lib/rendering.mjs +8 -0
  17. package/bin/lib/runtime-freshness.mjs +239 -0
  18. package/bin/lib/session-fingerprint.mjs +106 -0
  19. package/distilled/DESIGN.md +398 -12
  20. package/distilled/EVIDENCE-INDEX.md +105 -0
  21. package/distilled/README.md +44 -28
  22. package/distilled/SKILL.md +4 -4
  23. package/distilled/templates/agents.block.md +1 -1
  24. package/distilled/workflows/audit-milestone.md +50 -0
  25. package/distilled/workflows/complete-milestone.md +38 -2
  26. package/distilled/workflows/execute.md +13 -0
  27. package/distilled/workflows/map-codebase.md +14 -3
  28. package/distilled/workflows/new-milestone.md +13 -0
  29. package/distilled/workflows/new-project.md +3 -1
  30. package/distilled/workflows/plan.md +3 -1
  31. package/distilled/workflows/progress.md +68 -13
  32. package/distilled/workflows/quick.md +15 -8
  33. package/distilled/workflows/resume.md +14 -1
  34. package/distilled/workflows/verify.md +52 -17
  35. package/docs/BROWNFIELD-PROOF.md +95 -0
  36. package/docs/RUNTIME-SUPPORT.md +77 -0
  37. package/docs/USER-GUIDE.md +439 -0
  38. package/docs/VERIFICATION-DISCIPLINE.md +59 -0
  39. package/docs/claude/context-monitor.md +98 -0
  40. package/docs/proof/consumer-node-cli/README.md +37 -0
  41. package/docs/proof/consumer-node-cli/ROADMAP.md +14 -0
  42. package/docs/proof/consumer-node-cli/SPEC.md +17 -0
  43. package/docs/proof/consumer-node-cli/brief.md +9 -0
  44. package/docs/proof/consumer-node-cli/phases/01-foundation/01-01-PLAN.md +34 -0
  45. package/docs/proof/consumer-node-cli/phases/01-foundation/01-01-SUMMARY.md +10 -0
  46. package/docs/proof/consumer-node-cli/phases/01-foundation/01-VERIFICATION.md +30 -0
  47. package/package.json +34 -27
@@ -50,6 +50,19 @@
50
50
  37. [Mutability-Driven Workflow Classification](#37-mutability-driven-workflow-classification)
51
51
  38. [Retroactive Artifact Enforcement](#38-retroactive-artifact-enforcement)
52
52
  39. [Brownfield Entry Wiring](#39-brownfield-entry-wiring)
53
+ 40. [Three-Layer Continuity Boundary](#d40---three-layer-continuity-boundary)
54
+ 41. [Compressed Judgment Persistence Surface](#d41---compressed-judgment-persistence-surface)
55
+ 42. [Session-Boundary Safety](#d42---session-boundary-safety)
56
+ 43. [Resume Provenance Truth Split](#d43---resume-provenance-truth-split)
57
+ 44. [Warning-First Transition Safety And Fail-Closed Terminal Writes](#d44---warning-first-transition-safety-and-fail-closed-terminal-writes)
58
+ 45. [Fork-Honest Launch Posture Before Identity Migration](#d45---fork-honest-launch-posture-before-identity-migration)
59
+ 46. [Archived Milestone Routing With Retained ROADMAP](#d46---archived-milestone-routing-with-retained-roadmap)
60
+ 47. [Brownfield Quick-Win Repair](#d47---brownfield-quick-win-repair)
61
+ 48. [Shared Lifecycle Evaluator And Dual-Canonical Runtime Boundary](#d48---shared-lifecycle-evaluator-and-dual-canonical-runtime-boundary)
62
+ 49. [Deterministic Lifecycle Preflight Gates](#d49---deterministic-lifecycle-preflight-gates)
63
+ 50. [Evidence-Gated Closure Matrix](#d50---evidence-gated-closure-matrix)
64
+ 51. [Deterministic Runtime Surface Freshness](#d51---deterministic-runtime-surface-freshness)
65
+ 52. [Generic Checkpoint Routing Ownership](#d52---generic-checkpoint-routing-ownership)
53
66
 
54
67
  ---
55
68
 
@@ -841,7 +854,7 @@ Implementation lives under `bin/lib/`:
841
854
 
842
855
  **GSDD (before this decision):** Codex CLI was a skills-first runtime at ~40% parity. It consumed the portable `.agents/skills/gsdd-*/SKILL.md` surface but had no native plan-checker, no orchestration loop, no model control, and no dedicated adapter module. `--tools codex` was deprecated and silently stripped. Every Codex plan ran in silent `reduced_assurance` mode.
843
856
 
844
- **GSDD (after this decision):** Codex CLI is promoted to `native_capable` — same tier as Claude Code and OpenCode. A dedicated `bin/adapters/codex.mjs` generates `.codex/agents/gsdd-plan-checker.toml` (read-only TOML agent with the plan-checker delegate). Codex's entry surface is the portable skill at `.agents/skills/gsdd-plan/SKILL.md` — Codex auto-discovers it via its `.agents/skills/` skill scanning ([developers.openai.com/codex/skills](https://developers.openai.com/codex/skills)). The portable skill now contains vendor-neutral checker invocation instructions (JSON schema, max-3 cycle loop, escalation), so when Codex follows it, it spawns the native `gsdd-plan-checker` agent for fresh-context review. `--tools codex` is reinstated as an active adapter flag.
857
+ **GSDD (after this decision):** Codex CLI is promoted to `native_capable` — same tier as Claude Code and OpenCode. A dedicated `bin/adapters/codex.mjs` generates `.codex/agents/gsdd-plan-checker.toml` (read-only TOML agent with the plan-checker delegate). Codex's entry surface is the portable skill at `.agents/skills/gsdd-plan/SKILL.md` — Codex auto-discovers it via its `.agents/skills/` skill scanning ([developers.openai.com/codex/skills](https://developers.openai.com/codex/skills)). The portable skill now contains vendor-neutral checker invocation instructions (JSON schema, max-3 cycle loop, escalation) plus an explicit plan-only completion lock, so when Codex follows it, it spawns the native `gsdd-plan-checker` agent for fresh-context review and still requires a separate `$gsdd-execute` transition before implementation. `--tools codex` is reinstated as an active adapter flag.
845
858
 
846
859
  **Why:** Codex CLI v0.115.0 (2026-03-16) stabilized its multi-agent system with `.codex/agents/*.toml` definitions, `spawn_agent` fresh-context invocation, per-agent `model` and `model_reasoning_effort` fields, and `sandbox_mode` access control. This provides structural parity with Claude's `.claude/agents/` and OpenCode's `.opencode/agents/`.
847
860
 
@@ -863,6 +876,7 @@ Implementation lives under `bin/lib/`:
863
876
  - No deterministic spawn API — spawning is model-interpreted via natural language, not a programmatic `Task()` call
864
877
  - GitHub issues #14719 (re-spawn failure) and #14841 (spawn loops with weaker models) are documented risks; GSDD's simple spawn-wait-pattern minimizes exposure, and the max-3 loop has escalation
865
878
  - JSON schema duplication — the checker JSON schema is embedded in Claude, OpenCode orchestration prompts and the portable skill; tests guard drift across all surfaces
879
+ - Execution authorization must stay explicit — Codex and other runtimes must not infer implementation permission from generic imperative handoff text after `gsdd-plan`
866
880
  - No Codex CLI in CI — future regressions still require disposable-fixture validation even though local live validation now exists
867
881
  - Entry surface is shared — Codex uses the portable `.agents/skills/gsdd-plan/SKILL.md` as its entry surface (no vendor-specific skill path exists in Codex). The portable skill's checker invocation is vendor-neutral, but routing depends on Codex's implicit skill selection matching the task description
868
882
 
@@ -941,7 +955,9 @@ Implementation lives under `bin/lib/`:
941
955
  | W7 | WARN | `distilled/DESIGN.md` health check table differs from implemented check IDs |
942
956
  | W8 | WARN | `distilled/README.md` workflow inventory differs from `distilled/workflows/` |
943
957
  | W9 | WARN | `.internal-research/gaps.md` references missing repo-local paths |
944
- | W10 | WARN | `.planning/ROADMAP.md` phase status differs from `.planning/SPEC.md` requirement checkboxes |
958
+ | W10 | WARN | ROADMAP/SPEC requirement status drift |
959
+ | W11 | WARN | Installed generated runtime surfaces drift from current render output |
960
+ | W12 | WARN | Planning state drifted since last recorded session (fingerprint mismatch) |
945
961
  | I1 | INFO | Generation manifest `frameworkVersion` differs from current `FRAMEWORK_VERSION` |
946
962
  | I2 | INFO | Phase completion count from ROADMAP |
947
963
  | I3 | INFO | Which adapters are installed |
@@ -971,7 +987,7 @@ Implementation lives under `bin/lib/`:
971
987
 
972
988
  **What was removed vs GSD:**
973
989
  - `--repair` flag and associated repair actions
974
- - Error codes E001-E005/W001-W007 (replaced with simpler E1-E8/W1-W10/I1-I3)
990
+ - Error codes E001-E005/W001-W007 (replaced with simpler E1-E8/W1-W12/I1-I3)
975
991
  - STATE.md checks (GSDD has no STATE.md per D7)
976
992
  - PROJECT.md checks (GSDD uses SPEC.md, not checked by health — it's workflow-authored)
977
993
  - Phase directory naming format checks (GSDD uses flat numbered files, not NN-name directories)
@@ -1245,7 +1261,7 @@ D12 established the session persistence design. D26 mechanically enforces the ro
1245
1261
 
1246
1262
  **Problem:** Consumer testing (2026-03-21) revealed that AI agents completing a GSDD workflow go silent — the user must manually figure out which `/gsdd-*` command to run next. The lifecycle contract (`new-project → plan → execute → verify → [next phase]`) was correct in design but invisible in practice at each step boundary. GSD original solved this with explicit "Next Up" sections at the end of every workflow; GSDD lost this pattern during distillation.
1247
1263
 
1248
- **Decision:** Add `<completion>` sections after `<success_criteria>` in all 9 terminal workflows. Add positional discipline gates (STOP instructions at exact deviation points) and mandatory persistence enforcement for critical artifacts.
1264
+ **Decision:** Add `<completion>` sections after `<success_criteria>` in all 9 terminal workflows. Add positional discipline gates (STOP instructions at exact deviation points) and mandatory persistence enforcement for critical artifacts. Preserve lifecycle order, but for `plan` make the boundary explicit: completion may name `/gsdd-execute` as the next workflow, while the current `gsdd-plan` run remains plan-only and does not authorize implementation.
1249
1265
 
1250
1266
  **Changes:**
1251
1267
 
@@ -1277,7 +1293,7 @@ Consider clearing context before starting the next workflow for best results.
1277
1293
 
1278
1294
  **Routing map (acyclic, complete):**
1279
1295
  - `new-project` → `/gsdd-plan`
1280
- - `plan` → `/gsdd-execute`
1296
+ - `plan` → separate `/gsdd-execute` run (routing only; no same-run execution authorization)
1281
1297
  - `execute` → `/gsdd-verify` (if verifier enabled) or `/gsdd-progress`
1282
1298
  - `verify` → `/gsdd-progress` (passed), `/gsdd-plan` (gaps), `/gsdd-verify` (human_needed)
1283
1299
  - `audit-milestone` → `/gsdd-complete-milestone` (passed), `/gsdd-plan` (gaps/debt)
@@ -1713,18 +1729,20 @@ Sub-gap (b) was closed by D28's `<persistence>` mandate and guarded by G30. Sub-
1713
1729
 
1714
1730
  **Problem:** The brownfield path was structurally incomplete. `map-codebase` generated useful orientation artifacts, but it routed users only toward full project initialization. `quick` remained blind to those same codebase maps, so brownfield users who wanted disciplined feature work without full roadmap ceremony had no first-class lane.
1715
1731
 
1716
- **Decision:** Wire the existing brownfield lane instead of adding a new workflow.
1732
+ **Decision:** Wire the existing secondary brownfield lane instead of adding a new workflow.
1717
1733
 
1718
- - `map-codebase` completion now offers two explicit next steps: `/gsdd-new-project` for full lifecycle setup and `/gsdd-quick` for brownfield feature work.
1719
- - `quick` now reads `.planning/codebase/ARCHITECTURE.md` and `.planning/codebase/STACK.md` when they exist and passes a summarized `$CODEBASE_CONTEXT` into the planner delegate.
1734
+ - `map-codebase` completion now offers two explicit next steps: `/gsdd-new-project` for full lifecycle setup and `/gsdd-quick` for bounded brownfield feature work.
1735
+ - `map-codebase` completion now synthesizes an explicit brownfield routing summary from the existing 4 docs: safest next change lane, highest-risk zones, must-know traps, and the recommended workflow with rationale.
1736
+ - `quick` now reads `.planning/codebase/ARCHITECTURE.md`, `.planning/codebase/STACK.md`, `.planning/codebase/CONVENTIONS.md`, and `.planning/codebase/CONCERNS.md` when they exist and passes a summarized `$CODEBASE_CONTEXT` into the planner delegate.
1737
+ - `quick` stays structurally pure: it gains safer brownfield routing/context, not spec, roadmap, or research-lite behavior.
1720
1738
 
1721
- **Why this shape:** The missing leverage was routing and context reuse, not another onboarding surface. Reusing the existing codebase map artifacts preserves the current workflow set, keeps quick mode lightweight, and gives brownfield users immediate architecture awareness without forcing full milestone ceremony.
1739
+ **Why this shape:** The missing leverage was routing and context reuse, not another onboarding surface. Reusing the existing codebase map artifacts preserves the current workflow set, keeps quick mode lightweight, and gives brownfield users immediate architecture, convention, and risk awareness without forcing full milestone ceremony.
1722
1740
 
1723
- **Tradeoff:** This gives `quick` orientation, not full brownfield inference. It deliberately avoids turning quick mode into a lite `new-project`; the planner receives only a bounded summary from the codebase maps, not a new research phase.
1741
+ **Tradeoff:** This gives `quick` orientation, not full brownfield inference. It deliberately avoids turning quick mode into a lite `new-project`; the planner receives only a bounded summary from the codebase maps, not a new research phase and not a fifth persistent artifact. If the user cannot yet name the bounded change, the workflow should steer back to `new-project`.
1724
1742
 
1725
- **GSD comparison:** GSD's brownfield posture is centered on the full project-initialization flow after mapping. GSDD keeps the full path available, but adds an explicit lighter-weight branch for feature-by-feature brownfield work.
1743
+ **GSD comparison:** GSD's brownfield posture is centered on the full project-initialization flow after mapping. GSDD keeps the full path available, but adds an explicit lighter-weight secondary branch for feature-by-feature brownfield work.
1726
1744
 
1727
- **GSDD implementation:** `distilled/workflows/quick.md` (Step 2 codebase context, planner context), `distilled/workflows/map-codebase.md` (completion routing), `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`
1745
+ **GSDD implementation:** `distilled/workflows/quick.md` (Step 2 codebase context, planner context, bounded-lane hardening), `distilled/workflows/map-codebase.md` (completion routing + brownfield routing summary), `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`
1728
1746
 
1729
1747
  **Evidence:**
1730
1748
 
@@ -1932,6 +1950,374 @@ Sub-gap (b) was closed by D28's `<persistence>` mandate and guarded by G30. Sub-
1932
1950
 
1933
1951
  ---
1934
1952
 
1953
+ ## D45 - Fork-Honest Launch Posture Before Identity Migration
1954
+
1955
+ **Decision (2026-04-15):** GSDD keeps a fork-honest launch posture until package, workspace, help, proof, and release surfaces are migrated together. `Workspine` is the active public-name target in planning truth, but do not present an independent product identity as already complete while the operative contracts remain `gsdd-cli`, `gsdd`, `gsdd-*`, and `.planning/`.
1956
+
1957
+ **Context:**
1958
+ - The v1.1 launch jury split repo truth into two layers: the core delivery kernel is real, but the public release surface still over-relied on internal and gitignored proof.
1959
+ - The next-milestone challenge pass found that `.planning/` is not a cheap cosmetic constant. It is a deep runtime, workflow, template, and test contract across the framework repo.
1960
+ - The same pass also found that a split public-name story layered on top of `gsdd-cli` / `gsdd` / `.planning` made the product look more independent than the install, workspace, and proof surfaces could honestly support.
1961
+
1962
+ **Decision:**
1963
+ - v1.2.0 is scoped as **fork-honest launch hardening**, not as an independent rename milestone.
1964
+ - `Workspine` is the primary public product name in planning truth for v1.2.0, but it is not yet a full package/workspace/help contract migration.
1965
+ - Keep `.planning`, `gsdd-cli`, `gsdd`, and `gsdd-*` intentionally in the active launch contract.
1966
+ - Remove or demote independent-brand assumptions from planning and public-surface truth until a dedicated migration milestone proves the full blast radius is handled.
1967
+ - Treat identity migration as real engineering work across code, docs, help text, generated surfaces, tests, and release packaging — not as copy cleanup.
1968
+ - Keep the release-floor packaging story repo-tracked and inspectable: package metadata, tarball audit, `SECURITY.md`, and repo-owned release automation must align without relying on unpublished release artifacts or broader runtime-parity claims.
1969
+
1970
+ **Why this fits the codebase:**
1971
+ - It preserves the already-shipped repo-native kernel and avoids turning a launch-hardening milestone into a hidden workspace/package migration.
1972
+ - It keeps product truth aligned with what the repo can actually prove today.
1973
+ - It narrows the next milestone to the highest-leverage launch debt: public identity coherence, public proof export, packaging truth, and post-archive routing integrity.
1974
+
1975
+ **Evidence:**
1976
+ - `.planning/SPEC.md` v1.2.0 active requirements and current-state posture
1977
+ - `.planning/ROADMAP.md` v1.2.0 Phase 23-27 ownership
1978
+ - `.internal-research/TODO.md` active milestone notes
1979
+ - `.internal-research/gaps.md` `I39`
1980
+ - `.internal-research/release-jury-verdict-2026-04-15.md`
1981
+ - `.internal-research/release-jury-public-truth-drift-2026-04-15.md`
1982
+ - `.internal-research/public-release-two-layer-brief-2026-04-15.md`
1983
+ - `get-shit-done/workflows/progress.md` (GSD's archived-state heuristic still assumes ROADMAP removal, which is one reason GSDD must be explicit when it diverges)
1984
+
1985
+ **Consequences:**
1986
+ - Public launch work must make proof inspectable from tracked/public artifacts instead of citing `.planning/` or `.internal-research/`.
1987
+ - `Northline` is retired as the default launch-facing brand direction; `Workspine` is the only active public-name target in planning truth until later phases prove the tracked public surface can support it honestly.
1988
+ - If a future session wants independent identity, it should open a dedicated migration milestone rather than sneaking the blast radius into generic launch cleanup.
1989
+ - Release packaging and repo-owner surfaces must stay aligned to current repo truth. If a package/help/release workflow change would reintroduce stale owner residue or parity overstatement, treat that as fork-honest launch drift rather than as harmless metadata cleanup.
1990
+
1991
+ **GSD comparison:** GSD keeps identity and workflow contracts coupled; its archived-state routing still assumes the active roadmap disappears. GSDD is diverging on archive-state persistence, so it must also stay explicit and conservative about identity/proof claims rather than layering a cosmetic product rename on top of unresolved contract differences.
1992
+
1993
+ **GSDD implementation:** `.planning/SPEC.md`, `.planning/ROADMAP.md`, `.internal-research/TODO.md`, `.internal-research/gaps.md`, `.internal-research/lessons-learned.md`
1994
+
1995
+ ---
1996
+
1997
+ ## D46 - Archived Milestone Routing With Retained ROADMAP
1998
+
1999
+ **Decision (2026-04-15):** `gsdd-progress` must treat a retained `ROADMAP.md` as historical archive state when the current roadmap milestone/version has both a shipped ledger entry in `.planning/MILESTONES.md` and the matching archived milestone audit artifact. In that state, the workflow routes to `/gsdd-new-milestone` rather than back to `/gsdd-audit-milestone`.
2000
+
2001
+ **Context:**
2002
+ - GSDD now retains `ROADMAP.md` after milestone completion as a historical shipped-summary surface instead of deleting it at archive time.
2003
+ - The older `progress.md` logic still treated "between milestones" as equivalent to "SPEC exists while ROADMAP is absent", which matched the stricter GSD archive model but no longer matched current repo truth.
2004
+ - That created I39: the same archived milestone could satisfy "all phases complete" and get routed back into audit even though `.planning/SPEC.md` and `.internal-research/TODO.md` already treated the milestone as archived.
2005
+
2006
+ **Decision:**
2007
+ - Keep the audit-ready branch for milestones whose phases are all complete but which do not yet have archive evidence.
2008
+ - Detect the archived-with-`ROADMAP.md` state from the current roadmap milestone/version plus:
2009
+ - a shipped ledger entry for that same milestone in `.planning/MILESTONES.md`
2010
+ - the matching archived milestone audit artifact for that same milestone/version
2011
+ - Only when both pieces of archive evidence exist does `progress.md` route to `/gsdd-new-milestone`.
2012
+ - Earlier archived milestones in the ledger must not satisfy the route for the current roadmap milestone/version.
2013
+
2014
+ **Why this fits the codebase:**
2015
+ - It preserves the retained `ROADMAP.md` design without pretending that "all phases complete" always means "run audit again".
2016
+ - It keeps the routing decision grounded in durable truth surfaces that already exist, rather than inventing a new milestone-state file.
2017
+ - It narrows the change to the high-frequency handoff seam and leaves milestone audit behavior intact for not-yet-archived milestones.
2018
+
2019
+ **Evidence:**
2020
+ - `.internal-research/gaps.md` `I39`
2021
+ - `.planning/MILESTONES.md`
2022
+ - `.planning/v1.1-MILESTONE-AUDIT.md`
2023
+ - `distilled/workflows/progress.md`
2024
+ - `tests/gsdd.guards.test.cjs`
2025
+ - `tests/gsdd.scenarios.test.cjs`
2026
+ - `tests/gsdd.health.test.cjs`
2027
+ - GSD comparison source: `get-shit-done/workflows/progress.md` (between-milestones routing still tied to ROADMAP absence)
2028
+
2029
+ **Consequences:**
2030
+ - Post-archive progress routing now depends on explicit archive evidence, not on `ROADMAP.md` deletion.
2031
+ - Health truth can stay strict: W9/W10 clear because repo truth is aligned, not because the checker semantics were weakened.
2032
+ - Future milestone-lifecycle changes that retain or restore historical roadmap files must preserve the current-milestone archive-evidence check.
2033
+
2034
+ **GSDD implementation:** `distilled/workflows/progress.md`, `.planning/MILESTONES.md`, `.planning/v1.1-MILESTONE-AUDIT.md`, `.internal-research/gaps.md`, `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`, `tests/gsdd.health.test.cjs`
2035
+
2036
+ ---
2037
+
2038
+ ## D47 - Brownfield Quick-Win Repair
2039
+
2040
+ **Decision (2026-04-16):** Keep the existing workflow set, but repair the brownfield contract end to end so the same story holds in docs, workflow routing, and progress reporting.
2041
+
2042
+ **Context:**
2043
+ - The earlier brownfield fix (D39) made `map-codebase -> quick` explicit, but the full user journey still had three contradictions:
2044
+ - public docs still over-taught `new-project` or implied users must always start brownfield work with `map-codebase`
2045
+ - `quick.md` depended on codebase maps when present but had no documented just-enough fallback when maps were absent
2046
+ - `progress.md` still treated codebase-only or quick-only repos as "no artifacts", so `map-codebase -> quick -> progress` was not a coherent lane
2047
+ - The user explicitly chose a quick win over a heavier product redesign: repair the existing lane now, and record the larger enterprise middle-lane question as follow-on work.
2048
+
2049
+ **Decision:**
2050
+ - `gsdd-new-project` remains the full initializer for greenfield work, fuzzy brownfield scope, or milestone-shaped work. It owns brownfield codebase mapping internally when the deeper baseline is needed.
2051
+ - `gsdd-quick` is now the documented bounded brownfield lane. It reuses `.planning/codebase/*` when present and otherwise builds a just-enough inline brownfield baseline from stable repo-root surfaces before planning.
2052
+ - `gsdd-map-codebase` remains the deeper orientation pass for unfamiliar or higher-risk brownfield repos. It is optional before `quick`, not a mandatory first step for every existing repo.
2053
+ - `gsdd-progress` keeps the same six route branches, but Branch F is broadened into a general non-phase state branch that covers:
2054
+ - between milestones
2055
+ - codebase-only brownfield state
2056
+ - quick-lane-only brownfield state
2057
+ - The heavier "durable enterprise middle lane" problem is explicitly deferred rather than being smuggled into `quick`.
2058
+
2059
+ **Why this shape:** The highest-leverage failure was contract drift, not missing workflow count. Repairing the existing lane preserves the current architecture, minimizes new surface area, and removes the onboarding contradiction without prematurely inventing a durable change-management workflow.
2060
+
2061
+ **Tradeoff:** This is intentionally not the full middle-lane redesign. `quick` is stronger and clearer now, but it still stays optimized for bounded work. Long-lived ticket/PBI continuity remains an explicit deferred product decision instead of silent scope creep inside `quick`.
2062
+
2063
+ **Evidence:**
2064
+ - `.planning/SPEC.md` `DX-03` and `BROWNFIELD-01`
2065
+ - `distilled/workflows/quick.md`
2066
+ - `distilled/workflows/progress.md`
2067
+ - `distilled/workflows/new-project.md`
2068
+ - `distilled/workflows/map-codebase.md`
2069
+ - `README.md`
2070
+ - `docs/USER-GUIDE.md`
2071
+ - `distilled/README.md`
2072
+ - `tests/gsdd.guards.test.cjs`
2073
+ - `tests/gsdd.scenarios.test.cjs`
2074
+ - `.internal-research/gaps.md` (`I43`)
2075
+
2076
+ **Consequences:**
2077
+ - New consumers no longer need to be told "always start with new-project, then maybe map-codebase, then maybe quick" for bounded brownfield work.
2078
+ - Brownfield onboarding, workflow routing, and status reporting now move together as one contract.
2079
+ - Any future change to brownfield entry must update the docs, workflow contracts, and status routing together instead of treating them as separate concerns.
2080
+
2081
+ **GSD comparison:** GSD keeps brownfield posture closer to the full initialization flow after mapping. GSDD now preserves that full path, but also treats bounded-change brownfield work as a first-class documented lane without adding a new workflow surface.
2082
+
2083
+ **GSDD implementation:** `distilled/workflows/quick.md`, `distilled/workflows/progress.md`, `distilled/workflows/new-project.md`, `distilled/workflows/map-codebase.md`, `README.md`, `docs/USER-GUIDE.md`, `distilled/README.md`, `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`, `.planning/SPEC.md`, `.internal-research/TODO.md`, `.internal-research/gaps.md`, `.internal-research/lessons-learned.md`
2084
+
2085
+ ---
2086
+
2087
+ ## D48 - Shared Lifecycle Evaluator And Dual-Canonical Runtime Boundary
2088
+
2089
+ **Decision (2026-04-16):** Phase and milestone posture should be derived through one shared evaluator over existing repo artifacts, while runtime-surface truth should use a dual-canonical contract that explicitly separates authored workflow source from the generated Codex-consumed surface until deterministic freshness checks exist.
2090
+
2091
+ **Context:**
2092
+ - v1.3.0 Phase 29 audited two different claim seams that had been conflated in planning truth:
2093
+ - lifecycle-state derivation from `SPEC.md`, `ROADMAP.md`, `MILESTONES.md`, phase artifacts, audit artifacts, and provenance
2094
+ - Codex/runtime-surface truth across `distilled/workflows/*` and generated `.agents/skills/*`
2095
+ - `bin/lib/health.mjs` and `bin/lib/health-truth.mjs` both carried overlapping lifecycle parsing logic, which made ENGINE-02 weaker than the docs suggested.
2096
+ - At the same time, the repo could not honestly keep saying there was one tracked canonical Codex/runtime surface, because `.agents/` is still ignored and the consumed runtime boundary can drift from the authored source boundary.
2097
+
2098
+ **Decision:**
2099
+ - Introduce one shared lifecycle evaluator seam for phase and milestone posture and make downstream health/reporting code consume it instead of maintaining competing parsers.
2100
+ - Keep lifecycle evaluation repo-truth-only: it reads existing planning artifacts plus provenance inputs and does not introduce a new project-scoped state file.
2101
+ - Narrow the runtime story to a **dual-canonical** contract:
2102
+ - `distilled/workflows/*` is the authored source contract
2103
+ - generated `.agents/skills/*` is the consumed Codex runtime surface
2104
+ - Treat deterministic freshness enforcement across authored and generated surfaces as later work, not as something Phase 29 can imply without proof.
2105
+
2106
+ **Why this fits the codebase:**
2107
+ - It matches the repo's existing architecture bias toward file-backed truth and shared helper enforcement instead of workflow-local prose.
2108
+ - It separates two different hardening seams cleanly: state derivation and runtime freshness.
2109
+ - It preserves the portable-core model without pretending generated runtime surfaces are already tracked or freshness-enforced when repo truth cannot prove that yet.
2110
+
2111
+ **Evidence:**
2112
+ - `.planning/SPEC.md` `ENGINE-01`, `ENGINE-02`, and `ENGINE-05`
2113
+ - `.planning/ROADMAP.md` Phases 29 and 32
2114
+ - `.internal-research/TODO.md`
2115
+ - `.internal-research/gaps.md` `I42`
2116
+ - `bin/lib/lifecycle-state.mjs`
2117
+ - `bin/lib/health.mjs`
2118
+ - `bin/lib/health-truth.mjs`
2119
+ - `tests/phase.test.cjs`
2120
+ - `tests/gsdd.health.test.cjs`
2121
+ - `tests/gsdd.guards.test.cjs`
2122
+ - GSD comparison source: `get-shit-done/workflows/progress.md` still assumes workflow-local routing logic rather than a shared lifecycle evaluator seam, so this is an intentional GSDD tightening.
2123
+
2124
+ **Consequences:**
2125
+ - Phase/milestone posture is now an engine seam with one evaluator, which later lifecycle gates can reuse directly.
2126
+ - Runtime-surface claims are more conservative immediately: the repo no longer needs to pretend one tracked canonical Codex surface exists before deterministic freshness enforcement is real.
2127
+ - Phase 32 now owns authored/generated freshness enforcement explicitly instead of inheriting that work as vague follow-through from Phase 29.
2128
+
2129
+ **GSDD implementation:** `bin/lib/lifecycle-state.mjs`, `bin/lib/health.mjs`, `bin/lib/health-truth.mjs`, `.planning/SPEC.md`, `.planning/ROADMAP.md`, `.internal-research/TODO.md`, `.internal-research/gaps.md`, `tests/phase.test.cjs`, `tests/gsdd.health.test.cjs`, `tests/gsdd.guards.test.cjs`
2130
+
2131
+ ---
2132
+
2133
+ ## D49 - Deterministic Lifecycle Preflight Gates
2134
+
2135
+ **Decision (2026-04-16):** Transition-sensitive lifecycle surfaces must derive eligibility from one deterministic preflight seam layered over the shared lifecycle evaluator, while `gsdd phase-status` remains the only explicit ROADMAP mutator and `progress` remains read-only.
2136
+
2137
+ **Context:**
2138
+ - Phase 29 centralized lifecycle posture into `bin/lib/lifecycle-state.mjs`, but the transition-sensitive workflows still described eligibility in workflow-local prose.
2139
+ - That left three risks open:
2140
+ - command entrypoints could grow a second lifecycle parser
2141
+ - transition-sensitive workflows could silently drift into inconsistent blockers or mutation rules
2142
+ - the read-only / owned-write / explicit-lifecycle-mutation split could blur again in docs or helpers
2143
+ - Phase 30 was explicitly scoped to turn the shared evaluator seam into deterministic preflight enforcement without widening into Phase 31 evidence typing or Phase 32 freshness enforcement.
2144
+
2145
+ **Decision:**
2146
+ - Add `bin/lib/lifecycle-preflight.mjs` as the single deterministic gate for lifecycle-sensitive workflow entry surfaces.
2147
+ - Keep the preflight seam descriptive and repo-truth-based:
2148
+ - it consumes the shared lifecycle evaluator
2149
+ - it reports blockers, owned writes, mutation expectations, and lifecycle posture
2150
+ - it does not mutate ROADMAP or milestone state itself
2151
+ - Keep `gsdd phase-status` as the only explicit ROADMAP mutator for phase-state transitions.
2152
+ - Require transition-sensitive workflow contracts to call the shared preflight seam instead of narrating their own lifecycle inference.
2153
+ - Preserve `progress` as read-only and make it explicitly defer any recommended transition back to the downstream workflow's own preflight gate.
2154
+
2155
+ **Why this fits the codebase:**
2156
+ - It extends the existing file-backed engine model rather than adding a new state artifact or hidden control plane.
2157
+ - It reuses the shared evaluator introduced in D48 instead of tolerating another lifecycle interpretation seam.
2158
+ - It keeps mutation boundaries honest: descriptive evaluation, owned artifact writes, and explicit lifecycle mutation remain separate responsibilities.
2159
+
2160
+ **Evidence:**
2161
+ - `.planning/SPEC.md` (`ENGINE-01`, `ENGINE-02`, `ENGINE-03`)
2162
+ - `.planning/ROADMAP.md` (Phase 30 success criteria)
2163
+ - `bin/lib/lifecycle-preflight.mjs`
2164
+ - `bin/lib/lifecycle-state.mjs`
2165
+ - `bin/gsdd.mjs`
2166
+ - `distilled/workflows/execute.md`
2167
+ - `distilled/workflows/verify.md`
2168
+ - `distilled/workflows/audit-milestone.md`
2169
+ - `distilled/workflows/complete-milestone.md`
2170
+ - `distilled/workflows/new-milestone.md`
2171
+ - `distilled/workflows/resume.md`
2172
+ - `distilled/workflows/progress.md`
2173
+ - `tests/phase.test.cjs`
2174
+ - `tests/gsdd.guards.test.cjs`
2175
+ - `tests/gsdd.scenarios.test.cjs`
2176
+ - GSD comparison source: `get-shit-done/workflows/progress.md` still keeps lifecycle routing inside the workflow surface rather than through a shared helper seam, so this is an intentional GSDD tightening.
2177
+
2178
+ **Consequences:**
2179
+ - Illegal transitions and missing prerequisite artifacts can now fail closed from one helper seam instead of from drifting prompt-local logic.
2180
+ - `progress` can continue reporting lifecycle posture without inheriting write authority or becoming a hidden transition surface.
2181
+ - Phase 31 can build evidence-gated closure on top of a stable deterministic preflight contract instead of competing lifecycle entry logic.
2182
+
2183
+ **GSDD implementation:** `bin/lib/lifecycle-preflight.mjs`, `bin/lib/lifecycle-state.mjs`, `bin/gsdd.mjs`, `bin/lib/init.mjs`, `distilled/workflows/execute.md`, `distilled/workflows/verify.md`, `distilled/workflows/audit-milestone.md`, `distilled/workflows/complete-milestone.md`, `distilled/workflows/new-milestone.md`, `distilled/workflows/resume.md`, `distilled/workflows/progress.md`, `tests/phase.test.cjs`, `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`
2184
+
2185
+ ---
2186
+
2187
+ ## D50 - Evidence-Gated Closure Matrix
2188
+
2189
+ **Decision (2026-04-17):** Closure-sensitive lifecycle surfaces must share one compact evidence matrix keyed by workflow surface and delivery posture, using the fixed evidence kinds `code`, `test`, `runtime`, `delivery`, and `human`.
2190
+
2191
+ **Context:**
2192
+ - Phase 30 hardened lifecycle eligibility, but the closure surfaces still described proof in mismatched ways:
2193
+ - `verify.md` still used the older four-proof vocabulary
2194
+ - `audit-milestone.md` aggregated phase outcomes but did not record a shared closure posture
2195
+ - `complete-milestone.md` trusted a passed audit without checking whether the audit had actually proven the right kind of evidence for repo-only versus delivery-sensitive closeout
2196
+ - That created two opposite failure modes:
2197
+ - repo-only work could feel pressured to fabricate runtime or delivery proof just to satisfy prose
2198
+ - delivery-sensitive closure could pass on code inspection, tests, or human commentary alone even when the claim required runtime and delivery proof
2199
+
2200
+ **Decision:**
2201
+ - Add `bin/lib/evidence-contract.mjs` as the shared internal closure-evidence seam.
2202
+ - Fix the stable evidence kinds to `code`, `test`, `runtime`, `delivery`, and `human`.
2203
+ - Key the matrix by both:
2204
+ - closure surface (`verify`, `audit-milestone`, `complete-milestone`)
2205
+ - delivery posture (`repo_only`, `delivery_sensitive`)
2206
+ - Make `verify` record the selected delivery posture plus required, observed, and missing evidence kinds in its report contract.
2207
+ - Make `audit-milestone` aggregate the same evidence posture and fail closed when required kinds remain missing.
2208
+ - Make `complete-milestone` consume the audit's evidence contract instead of silently trusting a passed audit that lacks the required closure evidence.
2209
+
2210
+ **Why this fits the codebase:**
2211
+ - It follows the repo's existing pattern of small shared helpers plus file-backed workflow contracts instead of adding another freeform prompt convention.
2212
+ - It keeps repo-only work honest without pretending every closure needs runtime or delivery proof.
2213
+ - It raises the bar only where the claim itself is stronger: shipped or externally consumed outcomes now pay the stronger evidence cost explicitly.
2214
+ - It keeps the matrix internal and compact rather than inventing a second public mini-language for closure semantics.
2215
+
2216
+ **Evidence:**
2217
+ - `.planning/SPEC.md` (`ENGINE-04`, `VERIFY-01`)
2218
+ - `.planning/ROADMAP.md` (Phase 31 success criteria)
2219
+ - `bin/lib/evidence-contract.mjs`
2220
+ - `bin/lib/lifecycle-preflight.mjs`
2221
+ - `distilled/workflows/verify.md`
2222
+ - `distilled/workflows/audit-milestone.md`
2223
+ - `distilled/workflows/complete-milestone.md`
2224
+ - `tests/phase.test.cjs`
2225
+ - `tests/gsdd.guards.test.cjs`
2226
+ - `tests/gsdd.scenarios.test.cjs`
2227
+ - GSD comparison sources: `agents/_archive/gsd-verifier.md` and `agents/_archive/gsd-integration-checker.md` preserve outcome verification and integration audit, but they do not expose one typed closure matrix shared across phase verification, milestone audit, and milestone completion.
2228
+
2229
+ **Consequences:**
2230
+ - Closure-sensitive workflows now share one stable evidence vocabulary instead of drifting between proof synonyms.
2231
+ - Repo-only closures can stay repo-only without invented runtime theatrics.
2232
+ - Delivery-sensitive closure now has an explicit fail-closed bar: missing `runtime` or `delivery` evidence cannot be papered over by prose, code-only review, or human confirmation alone.
2233
+ - Milestone completion inherits the same evidence posture proven by audit, which reduces false-positive closure on technically incomplete release claims.
2234
+
2235
+ **GSDD implementation:** `bin/lib/evidence-contract.mjs`, `bin/lib/lifecycle-preflight.mjs`, `distilled/workflows/verify.md`, `distilled/workflows/audit-milestone.md`, `distilled/workflows/complete-milestone.md`, `.planning/SPEC.md`, `tests/phase.test.cjs`, `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`
2236
+
2237
+ ---
2238
+
2239
+ ## D51 - Deterministic Runtime Surface Freshness
2240
+ **Decision (2026-04-17):** Installed generated runtime-facing surfaces are trustworthy only through deterministic rendering from the authored workflow and delegate sources. When .agents/skills/, .claude/, .opencode/, or .codex/ exist locally, gsdd health must compare those generated files against current render output and route any drift back through gsdd update.
2241
+ **Context:**
2242
+ - Phase 29 narrowed the runtime story to a dual-canonical boundary: distilled/workflows/* is the authored source contract and generated runtime-facing files are the consumed local surfaces.
2243
+ - That narrowing was honest but still left I42 open because the repo could not yet prove that installed generated files stayed aligned with the current authored source without reviewer memory.
2244
+ - The framework repo also cannot fail closed on missing generated surfaces, because those directories are intentionally gitignored and may be absent even when the authored source is healthy.
2245
+ **Decision:**
2246
+ - Add one shared renderer-backed helper for runtime-surface freshness rather than per-test or per-runtime drift logic.
2247
+ - Compare only installed runtime surfaces; absent generated roots stay non-issues until the runtime surface actually exists locally.
2248
+ - Route drift through deterministic repair (gsdd update or a targeted gsdd update --tools <runtime>) instead of treating the fix as a manual review exercise.
2249
+ - Keep the public/runtime-facing wording brief: the authored source stays canonical, generated files are trusted because they are rendered and checked, and parity language remains narrow where live validation still does not exist.
2250
+ **Why this fits the codebase:**
2251
+ - It extends the existing render/update/health pattern instead of inventing a new state file or hidden synchronization layer.
2252
+ - It keeps the dual-canonical runtime contract honest: authored source and consumed generated files are distinct surfaces, but the boundary is now mechanically checked where the generated surface is actually installed.
2253
+ - It preserves framework-source honesty by warning only on installed drift, not on intentionally absent generated directories.
2254
+ **Evidence:**
2255
+ - .planning/SPEC.md (ENGINE-05)
2256
+ - .planning/ROADMAP.md (Phase 32)
2257
+ - .internal-research/gaps.md (I42 closure)
2258
+ - in/lib/runtime-freshness.mjs
2259
+ - in/lib/health.mjs
2260
+ - in/lib/health-truth.mjs
2261
+ - in/lib/rendering.mjs
2262
+ - in/adapters/claude.mjs, in/adapters/opencode.mjs, in/adapters/codex.mjs
2263
+ - README.md, docs/RUNTIME-SUPPORT.md, distilled/README.md
2264
+ - ests/phase.test.cjs, ests/gsdd.health.test.cjs, ests/gsdd.plan.adapters.test.cjs, ests/gsdd.guards.test.cjs, ests/gsdd.scenarios.test.cjs
2265
+ **Consequences:**
2266
+ - gsdd health can now surface installed generated-surface drift as deterministic workspace truth instead of relying on review discipline.
2267
+ - gsdd update becomes the explicit repair path for authored/generated runtime-surface drift.
2268
+ - Public support wording can stay compact without implying that generated files are trustworthy merely because they were generated once.
2269
+ - Claude Code and Codex CLI remain the mandatory live/native validation floor for the hardened runtime boundary, while other runtimes stay honest about their proof level.
2270
+ **GSD comparison:** GSD keeps runtime-facing workflow surfaces closer to the Claude-authored source and does not have to model a generated multi-runtime freshness boundary explicitly. GSDD does, because authored workflow source and consumed runtime surfaces are intentionally separated.
2271
+ **GSDD implementation:** in/lib/runtime-freshness.mjs, in/lib/health.mjs, in/lib/health-truth.mjs, in/lib/rendering.mjs, in/adapters/claude.mjs, in/adapters/opencode.mjs, in/adapters/codex.mjs, README.md, docs/RUNTIME-SUPPORT.md, distilled/README.md, .planning/SPEC.md, .internal-research/TODO.md, .internal-research/gaps.md, ests/phase.test.cjs, ests/gsdd.health.test.cjs, ests/gsdd.plan.adapters.test.cjs, ests/gsdd.guards.test.cjs, ests/gsdd.scenarios.test.cjs
2272
+
2273
+ ---
2274
+
2275
+ ## D52 - Generic Checkpoint Routing Ownership
2276
+
2277
+ **Decision (2026-04-17):** Generic checkpoints remain visible continuity artifacts, but they do not block read-only `progress` routing. `resume` owns checkpoint cleanup only when the user explicitly resumes from the checkpoint, while `progress` treats a surviving generic checkpoint as informational context and continues routing toward the real next lifecycle action.
2278
+
2279
+ **Context:**
2280
+ - Phase 19 intentionally allowed `resume` to preserve a generic checkpoint when the user chose a different path, because generic checkpoints can carry real context without pretending to be an active phase or quick-task execution surface.
2281
+ - That same flexibility exposed a later contradiction: `progress` still treated any `.continue-here.md` as a Branch A reroute back to `/gsdd-resume`, so a generic checkpoint could create a `resume -> progress -> resume` loop even after `resume` had already surfaced the checkpoint and routed the user onward.
2282
+ - Phase 33 was scoped narrowly to repair that control-plane seam without inventing a new checkpoint artifact, a broader checkpoint-consumption protocol, or a heavier brownfield/middle-lane redesign.
2283
+
2284
+ **Decision:**
2285
+ - Add one shared checkpoint-routing classification seam in `bin/lib/provenance.mjs`:
2286
+ - `phase` and `quick` checkpoints are routing blockers
2287
+ - `generic` checkpoints are informational for read-only `progress` routing
2288
+ - checkpoint cleanup remains resume-owned when the user explicitly resumes from the checkpoint
2289
+ - Keep `resume` behavior unchanged in one important respect: generic checkpoints still surface their `next_action` and let the user decide whether to resume from them.
2290
+ - Change `progress` behavior explicitly:
2291
+ - show a generic checkpoint in the status block
2292
+ - surface its `next_action`
2293
+ - continue evaluating Branch B-F for the primary recommendation instead of routing back through Branch A
2294
+ - Regenerate the consumed skill surfaces from the authored workflow source so the portable contract and local runtime surface stay aligned.
2295
+
2296
+ **Why this fits the codebase:**
2297
+ - It preserves the existing checkpoint artifact model and the three-layer continuity boundary instead of inventing another state file or destructive auto-cleanup step.
2298
+ - It keeps `progress` read-only and avoids pushing reporting semantics into lifecycle preflight, which would blur the distinction between routing/reporting and mutation authorization.
2299
+ - It moves the ownership split into one small shared seam plus tests, so the rule is no longer dependent on remembering two different workflow wordings.
2300
+
2301
+ **Evidence:**
2302
+ - `.planning/SPEC.md` (`ENGINE-01`, `ENGINE-03`)
2303
+ - `.internal-research/gaps.md` (`I45`)
2304
+ - `bin/lib/provenance.mjs`
2305
+ - `distilled/workflows/resume.md`
2306
+ - `distilled/workflows/progress.md`
2307
+ - `.agents/skills/gsdd-resume/SKILL.md`
2308
+ - `.agents/skills/gsdd-progress/SKILL.md`
2309
+ - `tests/phase.test.cjs`
2310
+ - `tests/gsdd.guards.test.cjs`
2311
+ - `tests/gsdd.scenarios.test.cjs`
2312
+ - GSD comparison source: GSD session-routing surfaces assume the checkpoint itself is the dominant continuity signal. GSDD now keeps that behavior only for real execution checkpoints (`phase`, `quick`) and treats generic checkpoints as context once the user has already been routed onward.
2313
+
2314
+ **Consequences:**
2315
+ - A surviving generic checkpoint can coexist with milestone-close or next-phase guidance without forcing the user back into `/gsdd-resume`.
2316
+ - `resume` still owns the destructive checkpoint-cleanup step, which keeps cleanup tied to an explicit user choice rather than to a read-only reporter.
2317
+ - Future checkpoint lifecycle edits must update the shared provenance helper, the authored workflow contracts, the regenerated skill surfaces, and the regression suites together or the repo truth will drift immediately.
2318
+
2319
+ **GSDD implementation:** `bin/lib/provenance.mjs`, `distilled/workflows/resume.md`, `distilled/workflows/progress.md`, `.agents/skills/gsdd-resume/SKILL.md`, `.agents/skills/gsdd-progress/SKILL.md`, `.planning/SPEC.md`, `.internal-research/TODO.md`, `.internal-research/gaps.md`, `tests/phase.test.cjs`, `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`
2320
+
1935
2321
  ## Maintenance
1936
2322
 
1937
2323
  This document is updated when:
@@ -286,6 +286,111 @@
286
286
  - `distilled/workflows/map-codebase.md` (completion offers `/gsdd-quick` as the brownfield lane)
287
287
  - `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`
288
288
 
289
+ ## D40 — Three-Layer Continuity Boundary
290
+ - Phase 7 continuity review across all 14 workflow files: durable artifacts and live-state artifacts were present, but compressed judgment was not explicitly modeled
291
+ - D12 and D26: artifact/state continuity existed already, but without a named three-layer boundary
292
+ - `.planning/SPEC.md` (Continuity Layers constraint, Key Decisions row)
293
+ - `distilled/workflows/resume.md` (first workflow adopting the boundary directly)
294
+
295
+ ## D41 — Compressed Judgment Persistence Surface
296
+ - Phase 8 review of `plan.md`, `execute.md`, `verify.md`, and `resume.md` as the four judgment-recovery entry points
297
+ - `distilled/workflows/pause.md` (checkpoint `<judgment>` write)
298
+ - `distilled/workflows/execute.md` (`SUMMARY.md` `<judgment>` write and prior-summary read)
299
+ - `distilled/workflows/plan.md`, `distilled/workflows/verify.md`, `distilled/workflows/resume.md` (judgment reads)
300
+ - `.planning/SPEC.md` (Key Decisions row)
301
+
302
+ ## D42 — Session-Boundary Safety
303
+ - `distilled/workflows/resume.md` (`.continue-here.bak` retained across dispatch)
304
+ - `distilled/workflows/plan.md`, `distilled/workflows/execute.md`, `distilled/workflows/verify.md`, `distilled/workflows/quick.md` (fallback `.bak` judgment reads)
305
+ - `distilled/workflows/pause.md` (stale `.bak` crash-cleanup path)
306
+ - `tests/gsdd.guards.test.cjs`, `tests/gsdd.invariants.test.cjs`
307
+
308
+ ## D43 — Resume Provenance Truth Split
309
+ - `.internal-research/gaps.md` (`I29`, `I30`)
310
+ - `.internal-research/TODO.md` (stale checkpoint/worktree drift notes)
311
+ - `.internal-research/consumer-audits/worktree-provenance-and-checkpoint-drift-2026-04-12.md`
312
+ - `distilled/workflows/pause.md`, `distilled/workflows/resume.md`
313
+ - `bin/lib/provenance.mjs`
314
+ - `tests/phase.test.cjs`, `tests/gsdd.guards.test.cjs`, `tests/gsdd.invariants.test.cjs`
315
+
316
+ ## D44 — Warning-First Transition Safety And Fail-Closed Terminal Writes
317
+ - `.planning/SPEC.md` (`LAUNCH-12`, `LAUNCH-13`)
318
+ - `.planning/ROADMAP.md` (Phase 20 and Phase 22 scope notes)
319
+ - `distilled/workflows/plan.md`, `execute.md`, `quick.md`, `new-milestone.md`, `complete-milestone.md`
320
+ - `distilled/workflows/verify.md`, `distilled/workflows/audit-milestone.md`
321
+ - `bin/lib/provenance.mjs`
322
+ - `tests/gsdd.guards.test.cjs`, `tests/gsdd.invariants.test.cjs`, `tests/gsdd.scenarios.test.cjs`
323
+
324
+ ## D45 — Fork-Honest Launch Posture Before Identity Migration
325
+ - `.planning/SPEC.md` (v1.2.0 active requirements and posture)
326
+ - `.planning/ROADMAP.md` (Phase 23-27 ownership)
327
+ - `.internal-research/TODO.md`, `.internal-research/gaps.md` (`I39`), `.internal-research/lessons-learned.md`
328
+ - `.internal-research/release-jury-verdict-2026-04-15.md`
329
+ - `.internal-research/release-jury-public-truth-drift-2026-04-15.md`
330
+ - `.internal-research/public-release-two-layer-brief-2026-04-15.md`
331
+ - `get-shit-done/workflows/progress.md`
332
+
333
+ ## D46 — Archived Milestone Routing With Retained ROADMAP
334
+ - `.internal-research/gaps.md` (`I39`)
335
+ - `.planning/MILESTONES.md`
336
+ - `.planning/v1.1-MILESTONE-AUDIT.md`
337
+ - `distilled/workflows/progress.md`
338
+ - `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`, `tests/gsdd.health.test.cjs`
339
+ - `get-shit-done/workflows/progress.md`
340
+
341
+ ## D47 — Brownfield Quick-Win Repair
342
+ - `.planning/SPEC.md` (`DX-03`, `BROWNFIELD-01`)
343
+ - `distilled/workflows/quick.md`, `distilled/workflows/progress.md`
344
+ - `distilled/workflows/new-project.md`, `distilled/workflows/map-codebase.md`
345
+ - `README.md`, `docs/USER-GUIDE.md`, `distilled/README.md`
346
+ - `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`, `tests/gsdd.invariants.test.cjs`
347
+
348
+ ## D48 — Shared Lifecycle Evaluator And Dual-Canonical Runtime Boundary
349
+ - `.planning/SPEC.md` (`ENGINE-01`, `ENGINE-02`, `ENGINE-05`)
350
+ - `.planning/ROADMAP.md` (Phases 29 and 32)
351
+ - `.internal-research/TODO.md`, `.internal-research/gaps.md` (`I42`)
352
+ - `bin/lib/lifecycle-state.mjs`, `bin/lib/health.mjs`, `bin/lib/health-truth.mjs`
353
+ - `tests/phase.test.cjs`, `tests/gsdd.health.test.cjs`, `tests/gsdd.guards.test.cjs`
354
+ - `get-shit-done/workflows/progress.md`
355
+
356
+ ## D49 — Deterministic Lifecycle Preflight Gates
357
+ - `.planning/SPEC.md` (`ENGINE-01`, `ENGINE-02`, `ENGINE-03`)
358
+ - `.planning/ROADMAP.md` (Phase 30)
359
+ - `bin/lib/lifecycle-preflight.mjs`, `bin/lib/lifecycle-state.mjs`
360
+ - `bin/gsdd.mjs`, `bin/lib/init.mjs`
361
+ - `distilled/workflows/execute.md`, `distilled/workflows/verify.md`
362
+ - `distilled/workflows/audit-milestone.md`, `distilled/workflows/complete-milestone.md`
363
+ - `distilled/workflows/new-milestone.md`, `distilled/workflows/resume.md`, `distilled/workflows/progress.md`
364
+ - `tests/phase.test.cjs`, `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`
365
+ - `get-shit-done/workflows/progress.md`
366
+
367
+ ## D50 — Evidence-Gated Closure Matrix
368
+ - `.planning/SPEC.md` (`ENGINE-04`, `VERIFY-01`)
369
+ - `.planning/ROADMAP.md` (Phase 31)
370
+ - `bin/lib/evidence-contract.mjs`, `bin/lib/lifecycle-preflight.mjs`
371
+ - `distilled/workflows/verify.md`, `distilled/workflows/audit-milestone.md`, `distilled/workflows/complete-milestone.md`
372
+ - `tests/phase.test.cjs`, `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`
373
+ - `agents/_archive/gsd-verifier.md`, `agents/_archive/gsd-integration-checker.md`
374
+
375
+ ## D51 — Deterministic Runtime Surface Freshness
376
+ - `.planning/SPEC.md` (`ENGINE-05`)
377
+ - `.planning/ROADMAP.md` (Phase 32)
378
+ - `.internal-research/gaps.md` (`I42`)
379
+ - `bin/lib/runtime-freshness.mjs`, `bin/lib/health.mjs`, `bin/lib/health-truth.mjs`, `bin/lib/rendering.mjs`
380
+ - `bin/adapters/claude.mjs`, `bin/adapters/opencode.mjs`, `bin/adapters/codex.mjs`
381
+ - `README.md`, `docs/RUNTIME-SUPPORT.md`, `distilled/README.md`
382
+ - `tests/phase.test.cjs`, `tests/gsdd.health.test.cjs`, `tests/gsdd.plan.adapters.test.cjs`, `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`
383
+ - `get-shit-done/workflows/progress.md`
384
+
385
+ ## D52 — Generic Checkpoint Routing Ownership
386
+ - `.planning/SPEC.md` (`ENGINE-01`, `ENGINE-03`)
387
+ - `.internal-research/gaps.md` (`I45`)
388
+ - `bin/lib/provenance.mjs`
389
+ - `distilled/workflows/resume.md`, `distilled/workflows/progress.md`
390
+ - `.agents/skills/gsdd-resume/SKILL.md`, `.agents/skills/gsdd-progress/SKILL.md`
391
+ - `tests/phase.test.cjs`, `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`
392
+ - `get-shit-done/workflows/progress.md`
393
+
289
394
  ---
290
395
 
291
396
  ## Maintenance