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.
- package/README.md +109 -60
- package/agents/README.md +1 -1
- package/bin/adapters/claude.mjs +8 -1
- package/bin/adapters/codex.mjs +5 -1
- package/bin/adapters/opencode.mjs +7 -1
- package/bin/gsdd.mjs +6 -4
- package/bin/lib/evidence-contract.mjs +112 -0
- package/bin/lib/health-truth.mjs +29 -31
- package/bin/lib/health.mjs +32 -80
- package/bin/lib/init-runtime.mjs +44 -24
- package/bin/lib/init.mjs +3 -7
- package/bin/lib/lifecycle-preflight.mjs +333 -0
- package/bin/lib/lifecycle-state.mjs +293 -0
- package/bin/lib/phase.mjs +81 -26
- package/bin/lib/provenance.mjs +20 -1
- package/bin/lib/rendering.mjs +8 -0
- package/bin/lib/runtime-freshness.mjs +239 -0
- package/bin/lib/session-fingerprint.mjs +106 -0
- package/distilled/DESIGN.md +398 -12
- package/distilled/EVIDENCE-INDEX.md +105 -0
- package/distilled/README.md +44 -28
- package/distilled/SKILL.md +4 -4
- package/distilled/templates/agents.block.md +1 -1
- package/distilled/workflows/audit-milestone.md +50 -0
- package/distilled/workflows/complete-milestone.md +38 -2
- package/distilled/workflows/execute.md +13 -0
- package/distilled/workflows/map-codebase.md +14 -3
- package/distilled/workflows/new-milestone.md +13 -0
- package/distilled/workflows/new-project.md +3 -1
- package/distilled/workflows/plan.md +3 -1
- package/distilled/workflows/progress.md +68 -13
- package/distilled/workflows/quick.md +15 -8
- package/distilled/workflows/resume.md +14 -1
- package/distilled/workflows/verify.md +52 -17
- package/docs/BROWNFIELD-PROOF.md +95 -0
- package/docs/RUNTIME-SUPPORT.md +77 -0
- package/docs/USER-GUIDE.md +439 -0
- package/docs/VERIFICATION-DISCIPLINE.md +59 -0
- package/docs/claude/context-monitor.md +98 -0
- package/docs/proof/consumer-node-cli/README.md +37 -0
- package/docs/proof/consumer-node-cli/ROADMAP.md +14 -0
- package/docs/proof/consumer-node-cli/SPEC.md +17 -0
- package/docs/proof/consumer-node-cli/brief.md +9 -0
- package/docs/proof/consumer-node-cli/phases/01-foundation/01-01-PLAN.md +34 -0
- package/docs/proof/consumer-node-cli/phases/01-foundation/01-01-SUMMARY.md +10 -0
- package/docs/proof/consumer-node-cli/phases/01-foundation/01-VERIFICATION.md +30 -0
- package/package.json +34 -27
package/distilled/DESIGN.md
CHANGED
|
@@ -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 |
|
|
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-
|
|
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
|
-
- `
|
|
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
|