gsdd-cli 0.16.1 → 0.18.1

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 (50) hide show
  1. package/README.md +111 -61
  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 +25 -20
  7. package/bin/lib/evidence-contract.mjs +112 -0
  8. package/bin/lib/health-truth.mjs +29 -31
  9. package/bin/lib/health.mjs +61 -106
  10. package/bin/lib/init-flow.mjs +91 -34
  11. package/bin/lib/init-runtime.mjs +46 -25
  12. package/bin/lib/init.mjs +3 -7
  13. package/bin/lib/lifecycle-preflight.mjs +333 -0
  14. package/bin/lib/lifecycle-state.mjs +476 -0
  15. package/bin/lib/manifest.mjs +24 -20
  16. package/bin/lib/phase.mjs +81 -26
  17. package/bin/lib/provenance.mjs +295 -54
  18. package/bin/lib/rendering.mjs +70 -12
  19. package/bin/lib/runtime-freshness.mjs +264 -0
  20. package/bin/lib/session-fingerprint.mjs +106 -0
  21. package/distilled/DESIGN.md +707 -13
  22. package/distilled/EVIDENCE-INDEX.md +166 -1
  23. package/distilled/README.md +44 -28
  24. package/distilled/SKILL.md +4 -4
  25. package/distilled/templates/agents.block.md +1 -1
  26. package/distilled/workflows/audit-milestone.md +50 -0
  27. package/distilled/workflows/complete-milestone.md +38 -2
  28. package/distilled/workflows/execute.md +16 -3
  29. package/distilled/workflows/map-codebase.md +15 -4
  30. package/distilled/workflows/new-milestone.md +53 -24
  31. package/distilled/workflows/new-project.md +44 -25
  32. package/distilled/workflows/pause.md +1 -1
  33. package/distilled/workflows/plan.md +187 -74
  34. package/distilled/workflows/progress.md +135 -31
  35. package/distilled/workflows/quick.md +20 -12
  36. package/distilled/workflows/resume.md +152 -65
  37. package/distilled/workflows/verify.md +55 -20
  38. package/docs/BROWNFIELD-PROOF.md +95 -0
  39. package/docs/RUNTIME-SUPPORT.md +77 -0
  40. package/docs/USER-GUIDE.md +443 -0
  41. package/docs/VERIFICATION-DISCIPLINE.md +59 -0
  42. package/docs/claude/context-monitor.md +98 -0
  43. package/docs/proof/consumer-node-cli/README.md +37 -0
  44. package/docs/proof/consumer-node-cli/ROADMAP.md +14 -0
  45. package/docs/proof/consumer-node-cli/SPEC.md +17 -0
  46. package/docs/proof/consumer-node-cli/brief.md +9 -0
  47. package/docs/proof/consumer-node-cli/phases/01-foundation/01-01-PLAN.md +34 -0
  48. package/docs/proof/consumer-node-cli/phases/01-foundation/01-01-SUMMARY.md +10 -0
  49. package/docs/proof/consumer-node-cli/phases/01-foundation/01-VERIFICATION.md +30 -0
  50. package/package.json +26 -20
package/README.md CHANGED
@@ -1,10 +1,8 @@
1
1
  <div align="center">
2
2
 
3
- # Northline
3
+ # Workspine
4
4
 
5
- **A repo-native workflow kernel for long-horizon AI software delivery.**
6
-
7
- Northline gives long-horizon AI-assisted software work one repo-native planning, execution, verification, and handoff spine so progress survives runtime switching and session loss. The package and CLI remain `gsdd-cli` / `gsdd`.
5
+ **AI development that stays consistent across agents and sessions.** Plans are checked, work is verified, and progress is tracked in the repo.
8
6
 
9
7
  [![npm version](https://img.shields.io/npm/v/gsdd-cli?style=for-the-badge&logo=npm&logoColor=white&color=CB3837)](https://www.npmjs.com/package/gsdd-cli)
10
8
  [![License](https://img.shields.io/badge/license-MIT-blue?style=for-the-badge)](LICENSE)
@@ -13,32 +11,74 @@ Northline gives long-horizon AI-assisted software work one repo-native planning,
13
11
  npx gsdd-cli init
14
12
  ```
15
13
 
16
- **Directly validated today:** Claude Code, Codex CLI, and OpenCode.
17
- **Qualified support:** Cursor, Copilot, and Gemini CLI use the same portable skill surfaces, but this launch does not present them as parity-validated runtimes.
14
+ **Directly validated today:** Claude Code, Codex CLI, and OpenCode.
15
+ **Qualified support:** Cursor, Copilot, and Gemini CLI support the same core workflow through the shared `.agents/skills/` surface; they do not carry the same runtime proof or ergonomics.
18
16
 
19
17
  </div>
20
18
 
19
+ One repo-native spine for planning, checking, execution, verification, and handoff — so AI-assisted work survives cold starts, runtime switches, and session loss.
20
+
21
21
  ---
22
22
 
23
23
  ## What This Is
24
24
 
25
- Northline gives serious AI-assisted software work one repo-native planning, execution, verification, and handoff spine so progress survives long horizons, runtime switching, and session loss without turning into a dashboard or orchestration control plane.
25
+ Workspine is a repo-native delivery spine for long-horizon AI-assisted software work. It keeps planning, execution, verification, handoff, and progress state in the repo so work survives cold starts, runtime switches, and session loss.
26
+
27
+ Workspine is the product name. The package, CLI commands, workflow prefixes, and workspace directory remain `gsdd-cli`, `gsdd`, `gsdd-*`, and `.planning/` — these are retained technical contracts, not rename residue.
28
+
29
+ ### Lineage
30
+
31
+ Workspine began as a fork of [Get Shit Done](https://github.com/gsd-build/get-shit-done), whose long-horizon delivery spine proved the problem was real. Since the fork, upstream GSD has continued evolving into a broad multi-runtime framework — as of April 2026, GSD v1 documents 81 commands and 78 workflows across 33 agents. Workspine took a different path: 14 public workflow surfaces, generated runtime adapters from a portable core, evidence-gated closure, and provenance-aware continuity. The trade-off is deliberate: a narrower surface with stricter closure and fewer moving parts for the human operator.
32
+
33
+ ---
34
+
35
+ ## What's Different
36
+
37
+ ### Context survives cold starts, tool switches, and session loss
38
+
39
+ Planning, phase artifacts, verification reports, and handoff checkpoints live in `.planning/`. When you switch runtimes or come back after a week, the repo still knows what was planned, what was executed, what was verified, and where you stopped.
40
+
41
+ <details>
42
+ <summary>How it works</summary>
43
+
44
+ Three-layer continuity model: durable project truth (SPEC, ROADMAP, design decisions), live workflow state (phase plans, summaries, checkpoints), and compressed judgment (active constraints, anti-regression rules). Pause/resume workflows write and read these layers explicitly. No session memory required.
45
+
46
+ </details>
47
+
48
+ ### Done means verified, not merely generated
49
+
50
+ Verification is a separate workflow with a separate context window, not a checkbox at the end of execution. It checks three levels — do the files exist, is the code substantive (not stubs), and is it actually wired into the system — plus an anti-pattern scan.
51
+
52
+ <details>
53
+ <summary>How it works</summary>
54
+
55
+ `gsdd-verify` runs after execution and produces a typed verification report. `gsdd-audit-milestone` checks cross-phase integration, requirement coverage, and end-to-end flows. Evidence-gated closure prevents marking work done without the right evidence kinds (code, test, runtime, delivery, human).
26
56
 
27
- The current package and CLI stay `gsdd-cli` and `gsdd`. Northline is the public product brand layered on top of that stable install surface.
57
+ </details>
28
58
 
29
- It preserves the high-leverage parts of long-horizon AI-assisted development:
59
+ ### Rules that must be consistent are enforced by code, not by memory
30
60
 
31
- - **Persistent artifacts** SPEC.md, ROADMAP.md, and config.json as the durable workspace
32
- - **Codebase mapping** — 4 parallel mappers produce STACK, ARCHITECTURE, CONVENTIONS, CONCERNS
33
- - **Scoped planning** — research, backward planning, fresh-context adversarial plan checking
34
- - **Execution** — wave-based parallel execution with fresh context per plan
35
- - **Verification** — Exists/Substantive/Wired gate, anti-pattern scan
36
- - **Milestone audit** — cross-phase integration, requirements coverage, E2E flows
37
- - **Session management** — pause work with checkpoint, resume with context restoration and routing
61
+ 1,381 tests across 13 test files guard properties that PRs repeatedly broke: delegate-role reference integrity, workflow vendor-API cleanliness, artifact schema consistency, plan-checker dimension coverage, and cross-document drift.
38
62
 
39
- What it strips: GSD's broader operator surface (32 workflows, 11 agents, discovery modes, sprint ceremony, a settings flow, and additional operator ergonomics). Northline keeps 14 workflows and 10 roles.
63
+ <details>
64
+ <summary>How it works</summary>
40
65
 
41
- **Target user:** Developer or small team that wants a repo-native, spec-driven workflow kernel with durable proof and handoff, not a dashboard or orchestration control plane.
66
+ Invariant suites (I-series), guard suites (G-series), and scenario suites (S-series) run on every change. Each assertion includes a `FIX:` instruction so failures are actionable. 58 documented design decisions in `distilled/DESIGN.md` record the rationale with evidence trails.
67
+
68
+ </details>
69
+
70
+ ### Smaller surface, stricter closure
71
+
72
+ 14 workflows. 10 roles. One CLI. Lifecycle progression goes through deterministic preflight gates — not conversational inference. Plans are checked by a separate agent in a separate context before execution begins. Closure requires evidence, not just file existence.
73
+
74
+ <details>
75
+ <summary>How it works</summary>
76
+
77
+ `gsdd-plan` is terminal: it writes planning artifacts and stops. Execution requires an explicit `gsdd-execute` transition. `lifecycle-preflight` evaluates eligibility from repo artifacts before allowing state changes. `phase-status` is the only explicit ROADMAP mutator. `progress` is read-only.
78
+
79
+ </details>
80
+
81
+ **Target user:** Developer or small team that wants one durable delivery spine across coding runtimes, with explicit checks and repo-native proof instead of a dashboard or orchestration control plane.
42
82
 
43
83
  ---
44
84
 
@@ -62,28 +102,46 @@ In a terminal, `gsdd init` now opens a guided install wizard:
62
102
  - Step 2: decide separately whether repo-wide `AGENTS.md` governance is worth installing
63
103
  - Step 3: configure planning defaults in the same guided flow
64
104
 
65
- Portable `.agents/skills/gsdd-*` skills are always generated. The wizard controls extra native adapters and optional governance, not the portable baseline.
105
+ Portable `.agents/skills/gsdd-*` skills are always generated. The wizard controls extra native adapters and optional governance, not the portable baseline.
106
+ When those generated surfaces exist locally, `gsdd health` checks them against current render output instead of asking you to trust manual review.
107
+ Workflow-embedded helper commands use `node .planning/bin/gsdd.mjs ...`, so execution-time lifecycle helpers do not depend on a global `gsdd` binary after init.
66
108
 
67
109
  ### Launch Proof Status
68
110
 
69
- - **Directly validated in this repo:** Claude Code, Codex CLI, and OpenCode have recorded `plan -> execute -> verify` evidence for the core lifecycle.
70
- - **Qualified support:** Cursor, Copilot, and Gemini CLI use the shared `.agents/skills/` surface plus optional governance, but this launch does not describe them as equally proven native runtimes.
111
+ - **Directly validated:** Claude Code, Codex CLI, and OpenCode have recorded `plan -> execute -> verify` evidence for the core lifecycle.
112
+ - **Qualified support:** Cursor, Copilot, and Gemini CLI support the same core workflow through the shared `.agents/skills/` surface; they do not carry the same runtime proof or ergonomics.
113
+ - **Runtime-surface freshness:** Installed generated skills and native adapters are renderer-checked locally; repair stays deterministic through `npx gsdd-cli update`.
71
114
 
72
- ### Quickstart (after init)
115
+ Start with the public proof pack:
73
116
 
74
- Your tool determines how you invoke workflows:
117
+ - [Brownfield proof](docs/BROWNFIELD-PROOF.md)
118
+ - [Exported consumer proof pack](docs/proof/consumer-node-cli/README.md)
119
+ - [Runtime support matrix](docs/RUNTIME-SUPPORT.md)
120
+ - [Verification discipline](docs/VERIFICATION-DISCIPLINE.md)
121
+
122
+ ### Quickstart (after init)
123
+
124
+ Runtime floor: Node 20+.
125
+
126
+ Your tool determines how you invoke workflows:
75
127
 
76
128
  - **Claude Code / OpenCode / Cursor / Copilot / Gemini:** Use slash commands directly — `/gsdd-new-project`, `/gsdd-plan`, etc.
77
- - **Codex CLI:** Use skill references — `$gsdd-new-project`, `$gsdd-plan`, etc.
129
+ - **Codex CLI:** Use skill references — `$gsdd-new-project`, `$gsdd-plan`, etc. `$gsdd-plan` writes the plan and stops; start a separate `$gsdd-execute` run when you want implementation to begin.
78
130
  - **Other AI tools:** Open `.agents/skills/gsdd-<workflow>/SKILL.md` and follow the instructions.
79
131
 
80
- If you generate the root `AGENTS.md` block, it adds GSDD behavioral governance. For Cursor, Copilot, and Gemini, that governance is optional discipline on top of native skill discovery — not the mechanism that makes workflows discoverable.
132
+ If you generate the root `AGENTS.md` block, it adds the framework's behavioral governance. For Cursor, Copilot, and Gemini, that governance is optional discipline on top of native skill discovery — not the mechanism that makes workflows discoverable.
133
+
134
+ ### Choose Your Starting Workflow
81
135
 
82
- First workflow to run: **new-project** it asks about your goals, audits the codebase (if brownfield), and produces `.planning/SPEC.md` + `.planning/ROADMAP.md`.
136
+ | Situation | Start here | Why |
137
+ |----------|------------|-----|
138
+ | Greenfield project, or brownfield work that is fuzzy / broad / milestone-shaped | `gsdd-new-project` | This is the full initializer. On brownfield repos it will run codebase mapping internally when it needs it. |
139
+ | Brownfield repo and the bounded change is already concrete | `gsdd-quick` | This is the bounded-change lane. It can use existing codebase maps when present and otherwise builds a just-enough inline brownfield baseline. |
140
+ | Brownfield repo is unfamiliar, risky, or you want a deeper baseline before choosing the lane | `gsdd-map-codebase` | This is the deeper orientation pass. Use it when the inline quick baseline would be too weak, then continue with `gsdd-quick` or `gsdd-new-project`. |
83
141
 
84
142
  ### Platform Adapters
85
143
 
86
- GSDD generates adapters for whichever tools you use:
144
+ Workspine generates adapters for whichever tools you use:
87
145
 
88
146
  ```bash
89
147
  npx gsdd-cli init # Guided install wizard (detected runtimes preselected)
@@ -98,10 +156,10 @@ npx gsdd-cli init --tools all # All of the above
98
156
  | Platform | Public claim | What's generated |
99
157
  |----------|--------------|-----------------|
100
158
  | **All** (default) | Shared portable surface | `.agents/skills/gsdd-*/SKILL.md` — portable workflow entrypoints (always generated) |
101
- | **Claude Code** | Directly validated | `.claude/skills/`, `.claude/commands/`, `.claude/agents/` — native workflow surfaces |
102
- | **OpenCode** | Directly validated | `.opencode/commands/`, `.opencode/agents/` — native workflow surfaces |
103
- | **Codex CLI** | Directly validated | Portable skill entry plus `.codex/agents/gsdd-plan-checker.toml` |
104
- | **Cursor / Copilot / Gemini** | Qualified support | Skills-native discovery from `.agents/skills/`; optional root `AGENTS.md` block adds behavioral governance |
159
+ | **Claude Code** | Directly validated | `.claude/skills/`, `.claude/commands/`, `.claude/agents/` — native workflow surfaces, freshness-checked when generated locally |
160
+ | **OpenCode** | Directly validated | `.opencode/commands/`, `.opencode/agents/` — native workflow surfaces, freshness-checked when generated locally |
161
+ | **Codex CLI** | Directly validated | Portable skill entry plus `.codex/agents/gsdd-plan-checker.toml`; planning stays locked until explicit `$gsdd-execute`, and installed surfaces are freshness-checked locally |
162
+ | **Cursor / Copilot / Gemini** | Same core workflow | Skills-native discovery from `.agents/skills/`; optional root `AGENTS.md` block adds behavioral governance, and the generated skill surface is freshness-checked locally |
105
163
  | **Other AI tools** | Fallback only | Open `.agents/skills/gsdd-*/SKILL.md` directly |
106
164
 
107
165
  ### Updating
@@ -112,7 +170,7 @@ npx gsdd-cli update --tools claude # Update specific platform only
112
170
  npx gsdd-cli update --templates # Refresh .planning/templates/ and role contracts from framework source
113
171
  ```
114
172
 
115
- ### Headless Mode (CI / Automation)
173
+ ### Non-Interactive Mode (CI / Automation)
116
174
 
117
175
  For non-interactive environments:
118
176
 
@@ -121,7 +179,7 @@ npx gsdd-cli init --auto --tools claude
121
179
  npx gsdd-cli init --auto --tools claude --brief path/to/PRD.md
122
180
  ```
123
181
 
124
- `--auto` skips interactive prompts, uses smart defaults (`autoAdvance: true` in config). `--brief` copies a project document to `.planning/PROJECT_BRIEF.md` for `new-project` to consume.
182
+ `--auto` skips the interactive install wizard and uses default configuration. It does **not** run downstream workflows (`new-project`, `plan`, `execute`, `verify`) — those are always explicit. `--brief` copies a project document to `.planning/PROJECT_BRIEF.md` for `new-project` to consume.
125
183
 
126
184
  If you already know exactly what to generate, `--tools ...` remains the manual path. The wizard is the primary onboarding UX; flags remain the advanced/headless contract.
127
185
 
@@ -151,7 +209,7 @@ init → [plan → execute → verify] × N phases → audit-milestone → done
151
209
  Run the `gsdd-new-project` workflow. The system:
152
210
 
153
211
  1. **Questions** — asks until it understands your idea (goals, constraints, tech, edge cases)
154
- 2. **Codebase audit** — if brownfield, runs 4 parallel mappers (or prompts for `/gsdd-map-codebase` first)
212
+ 2. **Codebase map** — if brownfield and a deeper baseline is needed, maps the codebase across stack, architecture, conventions, and concerns; users do not need to pre-run `map-codebase` before `new-project`
155
213
  3. **Research** — spawns parallel researchers to investigate the domain (configurable depth: fast/balanced/deep)
156
214
  4. **Spec + Roadmap** — produces `SPEC.md` (living specification) and `ROADMAP.md` (phased delivery plan)
157
215
 
@@ -167,7 +225,9 @@ Run `gsdd-plan` for the current phase. The system:
167
225
  2. **Plans** — creates atomic task plans with XML structure
168
226
  3. **Checks** — a separate agent in a fresh context window reviews the plan against 7 dimensions (requirement coverage, task completeness, dependency correctness, key-link completeness, scope sanity, must-have quality, context compliance). If the plan fails, it revises and re-checks — up to 3 cycles before escalating to the human. Output is typed JSON so orchestration is machine-parseable, not prompt-dependent.
169
227
 
170
- Each plan is small enough to execute in a fresh context window. The checker runs in a separate context from the planner — this is the [ICLR-validated](https://arxiv.org/abs/2310.12397) pattern for catching blind spots the planner inherits from its own reasoning.
228
+ Each plan is small enough to execute in a fresh context window. The checker runs in a separate context from the planner — this is the [ICLR-validated](https://arxiv.org/abs/2310.01798) pattern for catching blind spots the planner inherits from its own reasoning.
229
+
230
+ `gsdd-plan` is terminal for the current run: it writes planning artifacts only. Execution begins only after an explicit `gsdd-execute` / `/gsdd-execute` / `$gsdd-execute` transition, depending on the runtime.
171
231
 
172
232
  **Creates:** Phase plans in `.planning/phases/`
173
233
 
@@ -234,12 +294,12 @@ Use for: bug fixes, small features, config changes, one-off tasks.
234
294
 
235
295
  ## Workflows
236
296
 
237
- GSDD has 14 workflows, run via generated skills or adapters:
297
+ Workspine has 14 workflows, run via generated skills or adapters:
238
298
 
239
299
  | Workflow | What it does |
240
300
  |----------|--------------|
241
- | `gsdd-new-project` | Full initialization: questioning, codebase audit, research, spec, roadmap |
242
- | `gsdd-map-codebase` | Map existing codebase with 4 parallel mappers |
301
+ | `gsdd-new-project` | Full initialization: questioning, brownfield audit when needed, research, spec, roadmap |
302
+ | `gsdd-map-codebase` | Deeper brownfield orientation and refresh before `quick` or `new-project` |
243
303
  | `gsdd-plan` | Research + plan + check for a phase |
244
304
  | `gsdd-execute` | Execute phase plan: implement tasks, verify changes |
245
305
  | `gsdd-verify` | Verify completed phase: 3-level checks, anti-pattern scan |
@@ -248,7 +308,7 @@ GSDD has 14 workflows, run via generated skills or adapters:
248
308
  | `gsdd-complete-milestone` | Archive shipped milestone, evolve spec, collapse roadmap |
249
309
  | `gsdd-new-milestone` | Start next milestone: gather goals, define requirements, create roadmap phases |
250
310
  | `gsdd-plan-milestone-gaps` | Create gap-closure phases from audit results |
251
- | `gsdd-quick` | Quick task: plan and execute sub-hour work outside the phase cycle |
311
+ | `gsdd-quick` | Quick task: bounded brownfield change lane with inline baseline when full mapping is unnecessary |
252
312
  | `gsdd-pause` | Pause work: save session context to checkpoint for seamless resumption |
253
313
  | `gsdd-resume` | Resume work: restore context from artifacts and route to next action |
254
314
  | `gsdd-progress` | Show project status and route to next action |
@@ -284,7 +344,7 @@ Workflows are agent skills or commands, not plain shell utilities. How you invok
284
344
 
285
345
  ### Roles (10 canonical)
286
346
 
287
- GSDD consolidates GSD's agent surface into 10 roles with durable contracts:
347
+ Workspine consolidates GSD's agent surface into 10 roles with durable contracts:
288
348
 
289
349
  | Role | Responsibility |
290
350
  |------|---------------|
@@ -296,6 +356,7 @@ GSDD consolidates GSD's agent surface into 10 roles with durable contracts:
296
356
  | **Verifier** | Phase verification — Exists/Substantive/Wired gate |
297
357
  | **Roadmapper** | Roadmap generation from spec |
298
358
  | **Integration Checker** | Cross-phase wiring, API coverage, auth protection, E2E flows |
359
+ | **Approach Explorer** | Implementation approach alignment before planning begins |
299
360
  | **Debugger** | Utility role for systematic debugging |
300
361
 
301
362
  ### Two-Layer Architecture
@@ -307,14 +368,14 @@ GSDD consolidates GSD's agent surface into 10 roles with durable contracts:
307
368
 
308
369
  ### Adapter Architecture
309
370
 
310
- GSDD generates vendor-specific files from vendor-agnostic markdown — it does not convert from one vendor format to another. This means every adapter gets first-class output shaped to its platform's native capabilities.
371
+ Workspine generates vendor-specific files from vendor-agnostic markdown — it does not convert from one vendor format to another. This means every adapter gets first-class output shaped to its platform's native capabilities.
311
372
 
312
373
  | Adapter | Evidence posture | Strategy |
313
374
  |---------|------------------|----------|
314
375
  | **Claude Code** | Directly validated | Skill-primary plan surface, thin command alias, native `gsdd-plan-checker` agent |
315
376
  | **OpenCode** | Directly validated | Specialized `/gsdd-plan` command (`subtask: false`), hidden `gsdd-plan-checker` subagent (`mode: subagent`) |
316
- | **Codex CLI** | Directly validated | Portable skill as entry surface, `.codex/agents/gsdd-plan-checker.toml` (read-only, high reasoning effort) |
317
- | **Cursor / Copilot / Gemini** | Qualified support | Runtime discovers `.agents/skills/` natively; optional root `AGENTS.md` block adds behavioral governance only |
377
+ | **Codex CLI** | Directly validated | Portable skill as entry surface, `.codex/agents/gsdd-plan-checker.toml` (read-only, high reasoning effort), explicit `$gsdd-execute` unlock |
378
+ | **Cursor / Copilot / Gemini** | Same core workflow | Runtime discovers `.agents/skills/` natively; optional root `AGENTS.md` block adds behavioral governance only |
318
379
  | **agents** (`--tools agents`) | Governance-only helper | Root `AGENTS.md` block for tools that benefit from governance or need open-standard fallback guidance |
319
380
 
320
381
  All adapters render the plan-checker from a single source (`distilled/templates/delegates/plan-checker.md`). Each adapter shapes the output to its platform's native mechanics, and the portable skill remains the shared workflow source.
@@ -338,7 +399,7 @@ Model IDs pass through a two-layer injection guard: a regex whitelist (`/^[a-zA-
338
399
 
339
400
  ### Advisory Git Protocol
340
401
 
341
- GSDD does not impose commit formats, branch naming, or one-commit-per-task rules. Git guidance is advisory — repository and team conventions take precedence:
402
+ Workspine does not impose commit formats, branch naming, or one-commit-per-task rules. Git guidance is advisory — repository and team conventions take precedence:
342
403
 
343
404
  - **Branching** — follow existing repo conventions
344
405
  - **Commits** — group changes logically, no framework-imposed format
@@ -390,8 +451,8 @@ Optional model-control keys:
390
451
 
391
452
  Runtime behavior:
392
453
  - Claude translates semantic tiers to native aliases for the checker agent.
393
- - OpenCode inherits its runtime model by default; GSDD only injects an exact OpenCode `model:` when you set an explicit runtime override.
394
- - Codex inherits its session model by default; GSDD only injects an explicit `model` in the TOML when you set an explicit runtime override.
454
+ - OpenCode inherits its runtime model by default; Workspine only injects an exact OpenCode `model:` when you set an explicit runtime override.
455
+ - Codex inherits its session model by default; Workspine only injects an explicit `model` in the TOML when you set an explicit runtime override.
395
456
 
396
457
  CLI:
397
458
  - `gsdd models show`
@@ -430,6 +491,7 @@ Advisory defaults, overridden by repo conventions:
430
491
  | Problem | What to do |
431
492
  |---------|------------|
432
493
  | Workspace feels broken | `gsdd health` — checks errors, warnings, info |
494
+ | `gsdd health` reports generated runtime-surface drift | `npx gsdd-cli update` (or `npx gsdd-cli update --tools <runtime>`) — regenerates installed skills/adapters from current render output |
433
495
  | Lost track of progress | Run `gsdd-progress` — reads artifacts, shows status |
434
496
  | Need context from last session | Run `gsdd-resume` — restores state, routes to next action |
435
497
  | Plans seem wrong | Check `workflow.research: true` in config |
@@ -443,7 +505,7 @@ For detailed troubleshooting and recovery procedures, see the [User Guide](docs/
443
505
 
444
506
  ## Design Decisions
445
507
 
446
- GSDD makes 39 documented design decisions relative to GSD, each with evidence from source files and external research. See [`distilled/DESIGN.md`](distilled/DESIGN.md) for the full rationale.
508
+ This repo records 58 documented design decisions relative to GSD, each with evidence from source files and external research. See [`distilled/DESIGN.md`](distilled/DESIGN.md) for the full rationale.
447
509
 
448
510
  Key choices:
449
511
  - **4-file codebase standard** — drop state that rots (STRUCTURE, INTEGRATIONS, TESTING), keep rules that don't
@@ -461,7 +523,7 @@ Key choices:
461
523
 
462
524
  ## Testing
463
525
 
464
- GSDD has 1228 structural assertions across 10 test files — named suites that guard properties PRs repeatedly fixed manually. These are not unit tests for application code; they are invariant checks on the specification itself.
526
+ The framework has 1,381 tests across 13 test files — named suites that guard properties PRs repeatedly fixed manually. These are not unit tests for application code; they are invariant checks on the specification itself.
465
527
 
466
528
  ### Invariant Suites (I-series)
467
529
 
@@ -538,21 +600,9 @@ npm test
538
600
 
539
601
  ---
540
602
 
541
- ## Relationship to GSD
542
-
543
- GSDD is a distilled fork of [Get Shit Done](https://github.com/gsd-build/get-shit-done). It is **not** a full replacement for current upstream GSD.
544
-
545
- **What GSDD preserves** (~76% of core method): the long-horizon delivery spine — persistent artifacts, codebase mapping, scoped planning, execution, verification, and milestone auditing.
546
-
547
- **What GSDD does not cover** (~44% of full upstream surface): GSD currently exposes 32 workflow files and 11 agent files including discovery modes, a settings flow, extra operator ergonomics, and broader session-management surface area. GSDD intentionally does not recreate this full surface.
548
-
549
- **The trade-off:** Fewer moving parts for the human operator. Cleaner role contracts and a simpler artifact model. But reduced operator comfort and limited control-plane features (no telemetry, no artifact linting). Health diagnostics are available via `gsdd health`.
550
-
551
- ---
552
-
553
603
  ## Credits
554
604
 
555
- GSDD is a distilled fork of [Get Shit Done](https://github.com/gsd-build/get-shit-done) by [Lex Christopherson](https://github.com/glittercowboy), licensed under MIT.
605
+ Workspine is a fork of [Get Shit Done](https://github.com/gsd-build/get-shit-done) by [Lex Christopherson](https://github.com/glittercowboy), licensed under MIT. Original git history is retained for attribution.
556
606
 
557
607
  ---
558
608
 
package/agents/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Canonical Role Library
2
2
 
3
- Vendor-agnostic role contracts for GSDD's agent architecture.
3
+ Vendor-agnostic role contracts for Workspine's agent architecture.
4
4
 
5
5
  ## Two-Layer Architecture
6
6
 
@@ -181,4 +181,11 @@ function createClaudeAdapter({ cwd, workflows, renderSkillContent, getDelegateCo
181
181
  };
182
182
  }
183
183
 
184
- export { createClaudeAdapter, CLAUDE_MODEL_PROFILES };
184
+ export {
185
+ createClaudeAdapter,
186
+ CLAUDE_MODEL_PROFILES,
187
+ renderClaudeApproachExplorer,
188
+ renderClaudePlanChecker,
189
+ renderClaudePlanCommand,
190
+ renderClaudePlanSkill,
191
+ };
@@ -78,4 +78,8 @@ function createCodexAdapter({
78
78
  };
79
79
  }
80
80
 
81
- export { createCodexAdapter };
81
+ export {
82
+ createCodexAdapter,
83
+ renderCodexApproachExplorer,
84
+ renderCodexPlanChecker,
85
+ };
@@ -269,4 +269,10 @@ function createOpenCodeAdapter({
269
269
  };
270
270
  }
271
271
 
272
- export { createOpenCodeAdapter, detectOpenCodeConfiguredModel };
272
+ export {
273
+ createOpenCodeAdapter,
274
+ detectOpenCodeConfiguredModel,
275
+ renderOpenCodeApproachExplorer,
276
+ renderOpenCodePlanChecker,
277
+ renderOpenCodePlanCommand,
278
+ };
package/bin/gsdd.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- // gsdd - GSD Distilled CLI
3
+ // gsdd - Workspine CLI
4
4
 
5
- import { realpathSync } from 'fs';
5
+ import { realpathSync, readFileSync } from 'fs';
6
6
  import { join, dirname } from 'path';
7
7
  import { fileURLToPath } from 'url';
8
8
  import { createAdapterRegistry } from './adapters/index.mjs';
@@ -19,12 +19,14 @@ import { createCmdInit, createCmdUpdate, cmdHelp } from './lib/init.mjs';
19
19
  import { cmdFindPhase, cmdVerify, cmdScaffold, cmdPhaseStatus } from './lib/phase.mjs';
20
20
  import { cmdFileOp } from './lib/file-ops.mjs';
21
21
  import { createCmdHealth } from './lib/health.mjs';
22
-
23
- const __filename = fileURLToPath(import.meta.url);
24
- const __dirname = dirname(__filename);
25
- const DISTILLED_DIR = join(__dirname, '..', 'distilled');
26
- const AGENTS_DIR = join(__dirname, '..', 'agents');
27
- const CWD = process.cwd();
22
+ import { cmdLifecyclePreflight } from './lib/lifecycle-preflight.mjs';
23
+
24
+ const __filename = fileURLToPath(import.meta.url);
25
+ const __dirname = dirname(__filename);
26
+ const DISTILLED_DIR = join(__dirname, '..', 'distilled');
27
+ const AGENTS_DIR = join(__dirname, '..', 'agents');
28
+ const PACKAGE_JSON = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
29
+ const CWD = process.cwd();
28
30
  const IS_MAIN = process.argv[1]
29
31
  ? realpathSync(process.argv[1]) === realpathSync(__filename)
30
32
  : false;
@@ -57,16 +59,18 @@ const WORKFLOWS = [
57
59
  defineWorkflow({ name: 'gsdd-progress', workflow: 'progress.md', description: 'Check progress - show project status and route to next action', mutatesArtifacts: false }),
58
60
  ];
59
61
 
60
- const FRAMEWORK_VERSION = 'v1.3';
61
-
62
- function createCliContext(cwd = process.cwd()) {
63
- return {
64
- cwd,
65
- planningDir: join(cwd, '.planning'),
66
- distilledDir: DISTILLED_DIR,
67
- agentsDir: AGENTS_DIR,
68
- workflows: WORKFLOWS,
69
- frameworkVersion: FRAMEWORK_VERSION,
62
+ const FRAMEWORK_VERSION = 'v1.4';
63
+
64
+ function createCliContext(cwd = process.cwd()) {
65
+ return {
66
+ cwd,
67
+ planningDir: join(cwd, '.planning'),
68
+ distilledDir: DISTILLED_DIR,
69
+ agentsDir: AGENTS_DIR,
70
+ packageName: PACKAGE_JSON.name,
71
+ packageVersion: PACKAGE_JSON.version,
72
+ workflows: WORKFLOWS,
73
+ frameworkVersion: FRAMEWORK_VERSION,
70
74
  adapters: createAdapterRegistry({
71
75
  cwd,
72
76
  workflows: WORKFLOWS,
@@ -87,7 +91,7 @@ const INIT_CONTEXT = createCliContext(CWD);
87
91
 
88
92
  const cmdInit = createCmdInit(INIT_CONTEXT);
89
93
  const cmdUpdate = createCmdUpdate(INIT_CONTEXT);
90
- const cmdHealth = createCmdHealth({ frameworkVersion: FRAMEWORK_VERSION });
94
+ const cmdHealth = createCmdHealth(INIT_CONTEXT);
91
95
 
92
96
  const COMMANDS = {
93
97
  init: cmdInit,
@@ -95,6 +99,7 @@ const COMMANDS = {
95
99
  models: cmdModels,
96
100
  health: cmdHealth,
97
101
  'file-op': cmdFileOp,
102
+ 'lifecycle-preflight': cmdLifecyclePreflight,
98
103
  'find-phase': cmdFindPhase,
99
104
  'phase-status': cmdPhaseStatus,
100
105
  verify: cmdVerify,
@@ -124,4 +129,4 @@ if (IS_MAIN) {
124
129
  await runCli();
125
130
  }
126
131
 
127
- export { cmdHelp, cmdInit, cmdUpdate, cmdModels, cmdHealth, cmdFileOp, cmdFindPhase, cmdPhaseStatus, cmdVerify, cmdScaffold, runCli, FRAMEWORK_VERSION, createCliContext };
132
+ export { cmdHelp, cmdInit, cmdUpdate, cmdModels, cmdHealth, cmdFileOp, cmdLifecyclePreflight, cmdFindPhase, cmdPhaseStatus, cmdVerify, cmdScaffold, runCli, FRAMEWORK_VERSION, createCliContext };
@@ -0,0 +1,112 @@
1
+ const EVIDENCE_KINDS = Object.freeze(['code', 'test', 'runtime', 'delivery', 'human']);
2
+ const DELIVERY_POSTURES = Object.freeze(['repo_only', 'delivery_sensitive']);
3
+ const CLOSURE_SURFACES = Object.freeze(['verify', 'audit-milestone', 'complete-milestone']);
4
+
5
+ const LEGACY_EVIDENCE_ALIASES = Object.freeze({
6
+ code: 'code',
7
+ test: 'test',
8
+ runtime: 'runtime',
9
+ delivery: 'delivery',
10
+ human: 'human',
11
+ 'code-evidence': 'code',
12
+ 'repo-test': 'test',
13
+ 'runtime-check': 'runtime',
14
+ 'user-confirmation': 'human',
15
+ });
16
+
17
+ const EVIDENCE_MATRIX = Object.freeze({
18
+ verify: Object.freeze({
19
+ repo_only: Object.freeze({
20
+ requiredKinds: Object.freeze(['code']),
21
+ recommendedKinds: Object.freeze(['test']),
22
+ blockedSoloKinds: Object.freeze(['human', 'delivery']),
23
+ }),
24
+ delivery_sensitive: Object.freeze({
25
+ requiredKinds: Object.freeze(['code', 'runtime']),
26
+ recommendedKinds: Object.freeze(['test', 'delivery', 'human']),
27
+ blockedSoloKinds: Object.freeze(['code', 'human']),
28
+ }),
29
+ }),
30
+ 'audit-milestone': Object.freeze({
31
+ repo_only: Object.freeze({
32
+ requiredKinds: Object.freeze(['code', 'test']),
33
+ recommendedKinds: Object.freeze(['runtime', 'human']),
34
+ blockedSoloKinds: Object.freeze(['human', 'delivery']),
35
+ }),
36
+ delivery_sensitive: Object.freeze({
37
+ requiredKinds: Object.freeze(['code', 'test', 'runtime', 'delivery']),
38
+ recommendedKinds: Object.freeze(['human']),
39
+ blockedSoloKinds: Object.freeze(['code', 'human']),
40
+ }),
41
+ }),
42
+ 'complete-milestone': Object.freeze({
43
+ repo_only: Object.freeze({
44
+ requiredKinds: Object.freeze(['code', 'test']),
45
+ recommendedKinds: Object.freeze(['runtime']),
46
+ blockedSoloKinds: Object.freeze(['human', 'delivery']),
47
+ }),
48
+ delivery_sensitive: Object.freeze({
49
+ requiredKinds: Object.freeze(['code', 'test', 'runtime', 'delivery']),
50
+ recommendedKinds: Object.freeze(['human']),
51
+ blockedSoloKinds: Object.freeze(['code', 'human']),
52
+ }),
53
+ }),
54
+ });
55
+
56
+ export { CLOSURE_SURFACES, DELIVERY_POSTURES, EVIDENCE_KINDS };
57
+
58
+ export function normalizeEvidenceKind(kind) {
59
+ if (!kind) {
60
+ return null;
61
+ }
62
+
63
+ return LEGACY_EVIDENCE_ALIASES[kind] ?? null;
64
+ }
65
+
66
+ export function normalizeEvidenceKinds(kinds = []) {
67
+ const normalized = [];
68
+ for (const kind of kinds) {
69
+ const resolved = normalizeEvidenceKind(kind);
70
+ if (resolved && !normalized.includes(resolved)) {
71
+ normalized.push(resolved);
72
+ }
73
+ }
74
+ return normalized;
75
+ }
76
+
77
+ export function isClosureSurface(surface) {
78
+ return CLOSURE_SURFACES.includes(surface);
79
+ }
80
+
81
+ export function getEvidenceContract(surface, deliveryPosture) {
82
+ const matrix = EVIDENCE_MATRIX[surface];
83
+ if (!matrix) {
84
+ throw new Error(`Unsupported closure evidence surface: ${surface}`);
85
+ }
86
+
87
+ const posture = matrix[deliveryPosture];
88
+ if (!posture) {
89
+ throw new Error(`Unsupported delivery posture for ${surface}: ${deliveryPosture}`);
90
+ }
91
+
92
+ return {
93
+ surface,
94
+ deliveryPosture,
95
+ supportedKinds: [...EVIDENCE_KINDS],
96
+ requiredKinds: [...posture.requiredKinds],
97
+ recommendedKinds: [...posture.recommendedKinds],
98
+ blockedSoloKinds: [...posture.blockedSoloKinds],
99
+ };
100
+ }
101
+
102
+ export function describeEvidenceSurface(surface) {
103
+ if (!isClosureSurface(surface)) {
104
+ return null;
105
+ }
106
+
107
+ return {
108
+ surface,
109
+ supportedKinds: [...EVIDENCE_KINDS],
110
+ deliveryPostures: DELIVERY_POSTURES.map((deliveryPosture) => getEvidenceContract(surface, deliveryPosture)),
111
+ };
112
+ }