gsdd-cli 0.19.1 → 0.19.2

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.
@@ -94,7 +94,7 @@ export function runTruthChecks(planningDir, frameworkDir, actualCheckIds, option
94
94
  warnings.push({
95
95
  id: 'W11',
96
96
  severity: 'WARN',
97
- message: `Installed generated runtime and workflow-helper surfaces drift from current render output (${summarizeRuntimeFreshnessIssues(options.runtimeFreshnessReport)})`,
97
+ message: `Renderer-backed generated runtime and workflow-helper surfaces drift from current render output (${summarizeRuntimeFreshnessIssues(options.runtimeFreshnessReport)})`,
98
98
  fix: getRuntimeFreshnessRepairGuidance(options.runtimeFreshnessReport),
99
99
  });
100
100
  }
@@ -164,10 +164,10 @@ export function createCmdHealth(ctx) {
164
164
  if (!cat.hashes) continue;
165
165
  const result = detectModifications(cat.dir, cat.hashes);
166
166
  if (result.modified.length > 0) {
167
- warnings.push({ id: 'W2', severity: 'WARN', message: `${cat.name}: ${result.modified.length} file(s) modified locally (${result.modified.join(', ')})`, fix: `Intentional? Run \`${cat.fixCommand}\` to reset` });
167
+ warnings.push({ id: 'W2', severity: 'WARN', message: `${cat.name}: ${result.modified.length} manifest-tracked installed file(s) modified locally (${result.modified.join(', ')})`, fix: `Intentional? Run \`${cat.fixCommand}\` to reset` });
168
168
  }
169
169
  if (result.missing.length > 0) {
170
- warnings.push({ id: 'W3', severity: 'WARN', message: `${cat.name}: ${result.missing.length} file(s) missing from disk (${result.missing.join(', ')})`, fix: `Run \`${cat.fixCommand}\` to restore` });
170
+ warnings.push({ id: 'W3', severity: 'WARN', message: `${cat.name}: ${result.missing.length} manifest-tracked installed file(s) missing from disk (${result.missing.join(', ')})`, fix: `Run \`${cat.fixCommand}\` to restore` });
171
171
  }
172
172
  }
173
173
  }
@@ -201,16 +201,9 @@ export function createCmdHealth(ctx) {
201
201
  }
202
202
  }
203
203
 
204
- // W6: No adapter surfaces detected
205
- const adapterPaths = [
206
- join(cwd, '.agents', 'skills'),
207
- join(cwd, '.claude'),
208
- join(cwd, '.opencode'),
209
- join(cwd, '.codex'),
210
- ];
211
- const hasAnyAdapter = adapterPaths.some((p) => existsSync(p));
212
- if (!hasAnyAdapter) {
213
- warnings.push({ id: 'W6', severity: 'WARN', message: 'No adapter surfaces detected', fix: 'Run `npx -y gsdd-cli init --tools <platform>`' });
204
+ // W6: No generated workflow adapter surfaces detected
205
+ if (!hasAnyGeneratedWorkflowSurface(cwd)) {
206
+ warnings.push({ id: 'W6', severity: 'WARN', message: 'No generated workflow adapter surfaces detected', fix: 'Run `npx -y gsdd-cli init --tools <platform>`' });
214
207
  }
215
208
 
216
209
  const runtimeFreshnessReport = configOk && Array.isArray(ctx.workflows)
@@ -245,15 +238,15 @@ export function createCmdHealth(ctx) {
245
238
  });
246
239
  }
247
240
 
248
- // I3: Which adapters are installed
249
- const installedAdapters = [];
250
- if (existsSync(join(cwd, '.agents', 'skills'))) installedAdapters.push('open-standard-skills');
251
- if (existsSync(join(cwd, '.claude'))) installedAdapters.push('claude');
252
- if (existsSync(join(cwd, '.opencode'))) installedAdapters.push('opencode');
253
- if (existsSync(join(cwd, '.codex'))) installedAdapters.push('codex');
254
- if (existsSync(join(cwd, 'AGENTS.md'))) installedAdapters.push('agents');
255
- if (installedAdapters.length > 0) {
256
- info.push({ id: 'I3', severity: 'INFO', message: `Adapters installed: ${installedAdapters.join(', ')}` });
241
+ // I3: Which runtime/governance surfaces are installed
242
+ const installedSurfaces = [];
243
+ if (hasGeneratedSkillSurface(cwd)) installedSurfaces.push('open-standard-skills');
244
+ if (hasGeneratedClaudeSurface(cwd)) installedSurfaces.push('claude');
245
+ if (hasGeneratedOpenCodeSurface(cwd)) installedSurfaces.push('opencode');
246
+ if (hasGeneratedCodexSurface(cwd)) installedSurfaces.push('codex');
247
+ if (existsSync(join(cwd, 'AGENTS.md'))) installedSurfaces.push('root AGENTS.md governance-only');
248
+ if (installedSurfaces.length > 0) {
249
+ info.push({ id: 'I3', severity: 'INFO', message: `Installed runtime/governance surfaces: ${installedSurfaces.join(', ')}` });
257
250
  }
258
251
 
259
252
  // --- Verdict ---
@@ -281,6 +274,78 @@ export function createCmdHealth(ctx) {
281
274
  };
282
275
  }
283
276
 
277
+ function hasAnyGeneratedWorkflowSurface(cwd) {
278
+ return hasGeneratedSkillSurface(cwd)
279
+ || hasGeneratedClaudeEntrySurface(cwd)
280
+ || hasGeneratedOpenCodeEntrySurface(cwd);
281
+ }
282
+
283
+ function hasGeneratedSkillSurface(cwd) {
284
+ return hasGeneratedSkillDirectory(join(cwd, '.agents', 'skills'));
285
+ }
286
+
287
+ function hasGeneratedClaudeSurface(cwd) {
288
+ return hasGeneratedClaudeEntrySurface(cwd)
289
+ || hasGeneratedMarkdownFile(join(cwd, '.claude', 'agents'));
290
+ }
291
+
292
+ function hasGeneratedClaudeEntrySurface(cwd) {
293
+ return hasGeneratedSkillDirectory(join(cwd, '.claude', 'skills'))
294
+ || hasGeneratedMarkdownFile(join(cwd, '.claude', 'commands'));
295
+ }
296
+
297
+ function hasGeneratedOpenCodeSurface(cwd) {
298
+ return hasGeneratedOpenCodeEntrySurface(cwd)
299
+ || hasGeneratedMarkdownFile(join(cwd, '.opencode', 'agents'));
300
+ }
301
+
302
+ function hasGeneratedOpenCodeEntrySurface(cwd) {
303
+ return hasGeneratedMarkdownFile(join(cwd, '.opencode', 'commands'))
304
+ }
305
+
306
+ function hasGeneratedCodexSurface(cwd) {
307
+ return hasGeneratedTomlFile(join(cwd, '.codex', 'agents'));
308
+ }
309
+
310
+ function hasGeneratedSkillDirectory(dir) {
311
+ try {
312
+ return readdirSync(dir, { withFileTypes: true }).some((entry) => {
313
+ return entry.isDirectory()
314
+ && entry.name.startsWith('gsdd-')
315
+ && existsSync(join(dir, entry.name, 'SKILL.md'));
316
+ });
317
+ } catch {
318
+ return false;
319
+ }
320
+ }
321
+
322
+ function hasGeneratedMarkdownFile(dir) {
323
+ try {
324
+ return readdirSync(dir, { withFileTypes: true }).some((entry) => {
325
+ return entry.isFile() && entry.name.startsWith('gsdd-') && entry.name.endsWith('.md');
326
+ });
327
+ } catch {
328
+ return false;
329
+ }
330
+ }
331
+
332
+ function hasGeneratedTomlFile(dir) {
333
+ try {
334
+ return readdirSync(dir, { withFileTypes: true }).some((entry) => {
335
+ return entry.isFile() && entry.name.startsWith('gsdd-') && entry.name.endsWith('.toml');
336
+ });
337
+ } catch {
338
+ return false;
339
+ }
340
+ }
341
+
284
342
  function isFrameworkSourceRepo(cwd) {
285
- return existsSync(join(cwd, 'distilled', 'templates')) && existsSync(join(cwd, 'distilled', 'workflows'));
343
+ if (!existsSync(join(cwd, 'distilled', 'templates')) || !existsSync(join(cwd, 'distilled', 'workflows'))) return false;
344
+ if (!existsSync(join(cwd, 'bin', 'gsdd.mjs')) || !existsSync(join(cwd, 'package.json'))) return false;
345
+ try {
346
+ const pkg = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf-8'));
347
+ return pkg.name === 'gsdd-cli';
348
+ } catch {
349
+ return false;
350
+ }
286
351
  }
@@ -958,20 +958,20 @@ Implementation lives under `bin/lib/`:
958
958
  | E8 | ERROR | `.planning/templates/` missing critical root files (`spec.md`, `roadmap.md`, `auth-matrix.md`) |
959
959
  | E9 | ERROR | `.planning/templates/brownfield-change/` missing or missing critical files (`CHANGE.md`, `HANDOFF.md`, `VERIFICATION.md`) |
960
960
  | W1 | WARN | `generation-manifest.json` missing |
961
- | W2 | WARN | Template files modified locally (hash mismatch vs manifest) |
962
- | W3 | WARN | Template/role files missing from disk but listed in manifest |
961
+ | W2 | WARN | Manifest-tracked installed templates/helpers modified locally (hash mismatch vs manifest) |
962
+ | W3 | WARN | Manifest-tracked installed templates/helpers missing from disk but listed in manifest |
963
963
  | W4 | WARN | Active non-archived phases marked in progress/done are missing from `.planning/phases/` |
964
964
  | W5 | WARN | Phase artifact set has PLAN but no matching SUMMARY (stale in-progress) |
965
- | W6 | WARN | No adapter surfaces detected |
965
+ | W6 | WARN | No generated workflow adapter surfaces detected |
966
966
  | W7 | WARN | `distilled/DESIGN.md` health check table differs from implemented check IDs |
967
967
  | W8 | WARN | `distilled/README.md` workflow inventory differs from `distilled/workflows/` |
968
968
  | W9 | WARN | `.internal-research/gaps.md` references missing repo-local paths |
969
969
  | W10 | WARN | ROADMAP lifecycle status drift, including requirement checkbox and overview/detail phase status mismatches |
970
- | W11 | WARN | Installed generated runtime/helper surfaces drift from current render output |
970
+ | W11 | WARN | Renderer-backed generated runtime/helper surfaces drift from current render output |
971
971
  | W12 | WARN | Planning state drifted since last recorded session (fingerprint mismatch) |
972
972
  | I1 | INFO | Generation manifest `frameworkVersion` differs from current `FRAMEWORK_VERSION` |
973
973
  | I2 | INFO | Phase completion count from ROADMAP |
974
- | I3 | INFO | Which adapters are installed |
974
+ | I3 | INFO | Which runtime/governance surfaces are installed |
975
975
 
976
976
  **Verdict logic:**
977
977
  - Any ERROR → `broken` (exit code 1)
@@ -994,7 +994,9 @@ Implementation lives under `bin/lib/`:
994
994
 
995
995
  5. **Reuses existing modules.** `readManifest()` and `detectModifications()` from `manifest.mjs` handle W1-W3. `isProjectInitialized()` pattern from `models.mjs` handles the pre-init guard. Truth checks stay read-only and operate on repo-local artifacts only when those framework files exist.
996
996
 
997
- 6. **Framework-source mode skips installed-project template checks.** Inside the GSDD framework repo itself, `distilled/templates/` is the source of truth and `.planning/templates/` is intentionally absent. `npx -y gsdd-cli health` therefore skips the installed-project template/manifest checks (E3-E9, W1-W3) in framework-source mode instead of producing false positives during self-health runs.
997
+ 6. **Framework-source mode skips installed-project template checks only for the actual source repo.** Inside the GSDD framework repo itself, `distilled/templates/` is the source of truth and `.planning/templates/` can be intentionally absent. `npx -y gsdd-cli health` therefore skips installed-project template/manifest checks (E3-E9, W1-W3) only when source-repo identity signals also match (`package.json` name plus CLI source), avoiding false suppression in copied or unusual initialized repos that happen to contain `distilled/templates` and `distilled/workflows`.
998
+
999
+ 7. **Generated adapters and governance are reported separately.** W6 checks generated workflow entry surfaces (`.agents/skills`, Claude skills/commands, OpenCode commands) and does not treat root `AGENTS.md`, native checker agents, or Codex native checker TOML as workflow adapters. Codex CLI uses `.agents/skills` as its workflow entry path. I3 may still report native agents and root `AGENTS.md` as installed runtime/governance surfaces so users understand what exists without confusing those files with executable workflow discovery.
998
1000
 
999
1001
  **What was removed vs GSD:**
1000
1002
  - `--repair` flag and associated repair actions
@@ -20,7 +20,7 @@ When `autoAdvance: true`, this workflow runs non-interactively:
20
20
 
21
21
  5. **Keep quality gates:** All quality checks in `<spec_creation>` and `<roadmap_creation>` still apply. Thoroughness is preserved; only user wait-points are removed.
22
22
 
23
- 6. **After completion:** Report what was created and any assumptions inferred from the brief. Do NOT auto-advance to planning the user or CI system decides when to start planning.
23
+ 6. **After completion:** Report what was created and any assumptions inferred from the brief. Do NOT auto-progress into plan, execute, verify, release, or delivery. The user or CI system must start any later lifecycle workflow explicitly.
24
24
 
25
25
  All other sections (`<detect_mode>`, `<codebase_context>`, `<research>`, `<spec_creation>`, `<roadmap_creation>`, `<success_criteria>`) execute normally. Auto mode bypasses: the `<questioning>` section, both `<approval_gate>` blocks, the user question in `<project_principles>`, and the user question in `<capability_gates>`. All other workflow logic executes normally.
26
26
  </auto_mode>
@@ -33,8 +33,8 @@ Before starting, read these files (if they exist):
33
33
  4. Project root files: `package.json`, `README.md`, main entry point, `.gitignore`
34
34
  5. `.planning/config.json` — The deterministic project settings. Key fields:
35
35
  - `researchDepth`: balanced | fast | deep — controls research thoroughness
36
- - `parallelization`: true | false whether to run delegate work in parallel when the platform supports it; when false, run the same delegates sequentially
37
- - `workflow.research`: true | false whether to do SOTA research before spec
36
+ - `parallelization`: true | false - whether to run delegate work in parallel when the platform supports it; when false, run the same delegates sequentially
37
+ - `workflow.research`: true | false - whether to do domain research before spec
38
38
  - `workflow.planCheck`: true | false — whether plan-check agent runs later
39
39
  - `workflow.verifier`: true | false — whether verifier runs after execution
40
40
  - `modelProfile`: balanced | quality | budget — model selection hint
@@ -44,7 +44,6 @@ Before starting, read these files (if they exist):
44
44
  </load_context>
45
45
 
46
46
  <project_principles>
47
- **(SOTA Insight: Derived from Spec-Kit)**
48
47
  Before diving into technical specifications, establish the core governing principles of the project.
49
48
  If `autoAdvance: true` in `.planning/config.json`, skip this question. Infer core principles
50
49
  from the project brief (code quality signals, constraint language, scope decisions) and note
@@ -161,7 +160,7 @@ Before creating a spec, you MUST have clear answers to:
161
160
  - **3-5 rounds minimum** for non-trivial projects
162
161
 
163
162
  ### Categorizing Requirements (Crucial)
164
- As the user provides answers, you must mentally categorize the features they request using the SOTA framework:
163
+ As the user provides answers, you must mentally categorize the features they request:
165
164
  1. **Table Stakes**: Features users absolutely expect. Without them, your product feels broken (e.g., password reset).
166
165
  2. **Differentiators**: Features that set this project apart from competitors.
167
166
  3. **Out of Scope**: Explicit anti-requirements for v1 to prevent scope creep.
@@ -202,28 +201,27 @@ MANDATORY STEP. After the goal is clarified but BEFORE writing any specs.
202
201
 
203
202
  **Check config first:** Read `.planning/config.json`.
204
203
  - If `workflow.research: false` → skip this section entirely, go to `<spec_creation>`.
205
- - If `researchDepth: "fast"` use the same 4 specialists below, then synthesize `SUMMARY.md` inline. Faster and cheaper; acceptable for well-known domains.
206
- - If `researchDepth: "balanced"` or `"deep"` use the same 4 specialists below plus the synthesizer (default).
204
+ - If `researchDepth: "fast"` - use the same 4 specialists below, then synthesize `SUMMARY.md` inline. Faster and cheaper; acceptable for well-known domains.
205
+ - If `researchDepth: "balanced"` or `"deep"` - use the same 4 specialists below plus the synthesizer (default).
207
206
 
208
- ### Why Parallel Specialists, Not One Generalist
209
- **(SOTA: Anthropic Agent Teams, OpenAI Multi-Agents — 90.2% performance improvement for complex research tasks)**
207
+ ### Why Specialists, Not One Generalist
210
208
 
211
209
  DO NOT research in this main thread — noisy intermediate output pollutes the context window.
212
210
  DO NOT use a single generalist to write all research files — domain switching degrades quality.
213
211
 
214
212
  Use the same 4 specialized researchers every time. The difference is execution order and synthesis mode.
215
- - If `parallelization: true` and your platform supports parallel execution (`run_in_background=true`, async tasks, etc.) run all 4 simultaneously.
216
- - If `parallelization: false` or your platform lacks parallel execution run the same 4 researchers sequentially.
217
- - If `researchDepth: "fast"` synthesize inline after the 4 researcher outputs return.
218
- - If `researchDepth: "balanced"` or `"deep"` use the synthesizer delegate after the 4 researcher outputs are written.
213
+ - If `parallelization: true` and your platform supports parallel execution (`run_in_background=true`, async tasks, etc.) - run all 4 simultaneously.
214
+ - If `parallelization: false` or your platform lacks parallel execution - run the same 4 researchers sequentially.
215
+ - If `researchDepth: "fast"` - synthesize inline after the 4 researcher outputs return.
216
+ - If `researchDepth: "balanced"` or `"deep"` - use the synthesizer delegate after the 4 researcher outputs are written.
219
217
 
220
218
 
221
219
  ```
222
- Spawning 4 researchers in parallel...
223
- Stack research .planning/research/STACK.md
224
- Features research .planning/research/FEATURES.md
225
- Architecture research .planning/research/ARCHITECTURE.md
226
- Pitfalls research .planning/research/PITFALLS.md
220
+ Spawning 4 researchers...
221
+ -> Stack research -> .planning/research/STACK.md
222
+ -> Features research -> .planning/research/FEATURES.md
223
+ -> Architecture research -> .planning/research/ARCHITECTURE.md
224
+ -> Pitfalls research -> .planning/research/PITFALLS.md
227
225
  ```
228
226
 
229
227
  Ensure `.planning/research/` directory exists before spawning.
@@ -234,7 +232,7 @@ Parallel: (use parallelization value from .planning/config.json)
234
232
  Context: Project goal: [user's stated goal]. Milestone context: [greenfield|subsequent]. DO NOT share conversation history.
235
233
  Instruction: Read `.planning/templates/delegates/researcher-stack.md` for full task instructions. Apply the project goal and milestone context provided above.
236
234
  Output: `.planning/research/STACK.md`
237
- Return: 3-5 sentence summary to Orchestrator.
235
+ Return: 3-5 sentence summary to Orchestrator; full findings stay in the output artifact.
238
236
  Guardrails: Max Agent Hops = 3.
239
237
  </delegate>
240
238
 
@@ -244,7 +242,7 @@ Parallel: (use parallelization value from .planning/config.json)
244
242
  Context: Project goal: [user's stated goal]. Milestone context: [greenfield|subsequent]. DO NOT share conversation history.
245
243
  Instruction: Read `.planning/templates/delegates/researcher-features.md` for full task instructions. Apply the project goal and milestone context provided above.
246
244
  Output: `.planning/research/FEATURES.md`
247
- Return: 3-5 sentence summary to Orchestrator.
245
+ Return: 3-5 sentence summary to Orchestrator; full findings stay in the output artifact.
248
246
  Guardrails: Max Agent Hops = 3.
249
247
  </delegate>
250
248
 
@@ -254,7 +252,7 @@ Parallel: (use parallelization value from .planning/config.json)
254
252
  Context: Project goal: [user's stated goal]. Milestone context: [greenfield|subsequent]. DO NOT share conversation history.
255
253
  Instruction: Read `.planning/templates/delegates/researcher-architecture.md` for full task instructions. Apply the project goal and milestone context provided above.
256
254
  Output: `.planning/research/ARCHITECTURE.md`
257
- Return: 3-5 sentence summary to Orchestrator.
255
+ Return: 3-5 sentence summary to Orchestrator; full findings stay in the output artifact.
258
256
  Guardrails: Max Agent Hops = 3.
259
257
  </delegate>
260
258
 
@@ -264,14 +262,14 @@ Parallel: (use parallelization value from .planning/config.json)
264
262
  Context: Project goal: [user's stated goal]. Milestone context: [greenfield|subsequent]. DO NOT share conversation history.
265
263
  Instruction: Read `.planning/templates/delegates/researcher-pitfalls.md` for full task instructions. Apply the project goal and milestone context provided above.
266
264
  Output: `.planning/research/PITFALLS.md`
267
- Return: 3-5 sentence summary to Orchestrator.
265
+ Return: 3-5 sentence summary to Orchestrator; full findings stay in the output artifact.
268
266
  Guardrails: Max Agent Hops = 3.
269
267
  </delegate>
270
268
 
271
269
  **After all 4 researchers complete**, synthesize based on `researchDepth`:
272
270
 
273
271
  **If `researchDepth: "fast"`:** Synthesize inline.
274
- You hold 4 × 3-5 sentence summaries. Write `.planning/research/SUMMARY.md` directly using `.planning/templates/research/summary.md`. Cross-reference the summaries. Do NOT spawn another agent.
272
+ You hold 4 x 3-5 sentence summaries. Write `.planning/research/SUMMARY.md` directly using `.planning/templates/research/summary.md`. Cross-reference the summaries. Do NOT spawn another agent.
275
273
 
276
274
  **If `researchDepth: "balanced"` or `"deep"`:** Spawn synthesizer to read the full research files.
277
275
 
@@ -281,7 +279,7 @@ Parallel: false
281
279
  Context: Researcher summaries returned above. DO NOT share conversation history.
282
280
  Instruction: Read `.planning/templates/delegates/researcher-synthesizer.md` for full task instructions.
283
281
  Output: `.planning/research/SUMMARY.md`
284
- Return: 5-7 bullet key findings to Orchestrator.
282
+ Return: 5-7 bullet key findings to Orchestrator; full synthesis stays in the output artifact.
285
283
  Guardrails: Max Agent Hops = 2. Do not do new research — synthesize only.
286
284
  </delegate>
287
285
 
@@ -293,7 +291,7 @@ Display key findings before moving to spec creation.
293
291
  - [ ] All 4 specialist files written to `.planning/research/`
294
292
  - [ ] SUMMARY.md written with "Implications for Roadmap" section populated
295
293
  - [ ] Negative claims verified with current web docs (not training data)
296
- - [ ] Confidence levels assigned: verified, ⚠️ likely, uncertain
294
+ - [ ] Confidence levels assigned: verified | likely | uncertain
297
295
 
298
296
  **Commit**: `docs: add domain research`
299
297
  </research>
@@ -301,7 +299,7 @@ Display key findings before moving to spec creation.
301
299
  **STOP. Research is complete. Do NOT write any application code. Proceed to spec creation below. Your job now is to produce SPEC.md and ROADMAP.md — not to build the project.**
302
300
 
303
301
  <data_schema_definition>
304
- Before writing SPEC.md, define core Data Models/Typed Schemas *(SOTA: GitHub Blog — "Multi-agent workflows often fail")*. Multi-agent systems require typed schemas to pass reliable state. These schemas MUST be included in SPEC.md (see item 7 in `<spec_creation>` below). Also define Done-When verification criteria for every requirement (see item 8). *SPEC.md defines WHAT, not HOW do not include implementation tasks.*
302
+ Before writing SPEC.md, define core Data Models/Typed Schemas. Multi-agent handoffs require typed schemas to pass reliable state. These schemas MUST be included in SPEC.md (see item 7 in `<spec_creation>` below). Also define Done-When verification criteria for every requirement (see item 8). *SPEC.md defines WHAT, not HOW - do not include implementation tasks.*
305
303
  </data_schema_definition>
306
304
 
307
305
  <spec_creation>
@@ -312,15 +310,14 @@ After the subagent research completes, synthesize EVERYTHING into `SPEC.md`:
312
310
  3. **Requirements have IDs**: `AUTH-01`, `DATA-02`, `UI-03`
313
311
  4. **Requirements are ordered** by priority within each category
314
312
  5. **Out of Scope is populated** — includes things the developer explicitly said "not now" AND anti-features found in Research.
315
- 6. **Key Decisions are logged** — any choices made during questioning or dictated by the SOTA research.
316
- 7. **Typed Data Schemas** *(SOTA: GitHub Blog — "Multi-agent workflows often fail")*: explicitly define the core Data Models/Typed Schemas the project will use (e.g., `type UserProfile = { id: number; plan: 'free' | 'pro' }`). Multi-agent systems require typed schemas to pass reliable state; natural language instructions fail across agent handoffs. *SPEC.md defines WHAT, not HOW do not include implementation tasks.*
317
- 8. **Done-When Verification Chain** *(SOTA: Cyanluna)*: For EVERY requirement in the "Must Have (v1)" section, define a clear, verifiable `[Done-When: ...]` criterion. "User can log in" must become "User can log in [Done-When: Login form submits, JWT is received, and User is redirected to Dashboard]". No exceptions.
313
+ 6. **Key Decisions are logged** — any choices made during questioning or dictated by the research.
314
+ 7. **Typed Data Schemas**: explicitly define the core Data Models/Typed Schemas the project will use (e.g., `type UserProfile = { id: number; plan: 'free' | 'pro' }`). Multi-agent handoffs require typed schemas to pass reliable state; natural language instructions fail across agent handoffs. *SPEC.md defines WHAT, not HOW - do not include implementation tasks.*
315
+ 8. **Done-When Verification Chain**: For EVERY requirement in the "Must Have (v1)" section, define a clear, verifiable `[Done-When: ...]` criterion. "User can log in" must become "User can log in [Done-When: Login form submits, JWT is received, and User is redirected to Dashboard]". No exceptions.
318
316
  9. **Capability & Security Gates**: Handle per the `<capability_gates>` section at the end of this `<spec_creation>` block.
319
317
  10. **Authorization Matrix (optional)**: For projects with multiple user roles or protected resources, create `.planning/AUTH_MATRIX.md` using the template at `.planning/templates/auth-matrix.md`. The integration checker will use this matrix for systematic auth verification during milestone audits.
320
318
  11. **ROADMAP phase status is initialized** with Phase 1 marked `[ ]` / not started using the roadmap template's phase-status language.
321
319
 
322
320
  <capability_gates>
323
- **(SOTA Insight: Derived from OpenFang - "16 Security Systems & Capability Gates")**
324
321
  Before finishing SPEC.md, explicitly define what the agents are NOT allowed to do automatically without human approval.
325
322
  If `autoAdvance: true`, skip this question. Add a deferred placeholder to SPEC.md:
326
323
  "## Capability & Security Gates\n_Deferred — auto mode cannot elicit gate preferences; requires explicit review before production deployment._"
@@ -410,7 +407,7 @@ Init is DONE when ALL of these are true:
410
407
 
411
408
  - [ ] Codebase audit completed (brownfield) OR greenfield confirmed
412
409
  - [ ] Developer was questioned in depth (3+ rounds for non-trivial projects) — [interactive only; skip when autoAdvance: true]
413
- - [ ] Research subagent spawned and SOTA patterns retrieved
410
+ - [ ] Research subagent spawned and domain patterns retrieved
414
411
  - [ ] `SPEC.md` exists with testable requirements, out-of-scope, and current state
415
412
  - [ ] SPEC.md was reviewed and approved by the developer — [interactive only; skip when autoAdvance: true]
416
413
  - [ ] ROADMAP.md exists with phases, success criteria, and requirement mapping
@@ -169,9 +169,9 @@ Read `.planning/config.json`.
169
169
  If the checker returns `issues_found` with blockers and this is the first cycle:
170
170
  1. Send the issue list back to the planner for targeted revision of the plan file.
171
171
  2. Re-run the checker once more.
172
- 3. If blockers remain after 1 revision cycle, store `$CHECKER_ISSUES` for display in the plan preview. Do NOT block the user decides in Step 3.7.
172
+ 3. If blockers remain after 1 revision cycle, store `$CHECKER_ISSUES` for display in the plan preview and set `$RISK_ACCEPTANCE_REQUIRED=true`. Do not execute from default Enter; the user must explicitly accept the known risk in Step 3.7.
173
173
 
174
- If the checker returns `passed`, or `workflow.planCheck` is false, `$CHECKER_ISSUES` is empty.
174
+ If the checker returns `passed`, or `workflow.planCheck` is false, `$CHECKER_ISSUES` is empty and `$RISK_ACCEPTANCE_REQUIRED=false`.
175
175
 
176
176
  ---
177
177
 
@@ -222,14 +222,18 @@ If `$CHECKER_ISSUES` is non-empty, append:
222
222
  Plan check issues: {$CHECKER_ISSUES}
223
223
  ```
224
224
 
225
- Present options (default-yes — pressing Enter proceeds):
226
- - If `$SCOPE_WARNING` is empty: `[Enter to proceed / edit description / abort]`
227
- - If `$SCOPE_WARNING` contains `/gsdd-new-project`: `[Enter to proceed / switch to /gsdd-new-project / edit description / abort]`
225
+ Present options:
226
+ - If `$CHECKER_ISSUES` is non-empty: `[type "proceed despite issues" to execute / edit description / abort]`
227
+ - Otherwise if `$SCOPE_WARNING` is empty: `[Enter to proceed / edit description / abort]`
228
+ - Otherwise if `$SCOPE_WARNING` contains `/gsdd-new-project`: `[Enter to proceed / switch to /gsdd-new-project / edit description / abort]`
228
229
  - Otherwise if `$SCOPE_WARNING` contains `/gsdd-map-codebase`: `[Enter to proceed / switch to /gsdd-map-codebase / edit description / abort]`
229
230
  - Otherwise if `$SCOPE_WARNING` is non-empty: `[Enter to proceed / switch to /gsdd-plan / edit description / abort]`
230
231
 
232
+ Default-yes applies only when `$CHECKER_ISSUES` is empty. When unresolved checker blockers remain, pressing Enter must not execute; repeat the issues and ask for `proceed despite issues`, `edit description`, or `abort`.
233
+
231
234
  Handle response:
232
- - **Enter (or "yes"):** proceed to Step 4.
235
+ - **Enter (or "yes") when `$CHECKER_ISSUES` is empty:** proceed to Step 4.
236
+ - **"proceed despite issues" when `$CHECKER_ISSUES` is non-empty:** proceed to Step 4 and record the explicit risk acceptance in the quick summary.
233
237
  - **"edit description":** clean up the task directory, then return to Step 1 with `$DESCRIPTION` pre-filled as the starting point.
234
238
  - **"switch to /gsdd-new-project":** clean up the task directory, then stop quick workflow and report: "Use `/gsdd-new-project` to define or intentionally widen the work into full lifecycle planning. Task description: {$DESCRIPTION}"
235
239
  - **"switch to /gsdd-map-codebase":** clean up the task directory, then stop quick workflow and report: "Use `/gsdd-map-codebase` for a deeper brownfield baseline before quick work. Task description: {$DESCRIPTION}"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gsdd-cli",
3
- "version": "0.19.1",
3
+ "version": "0.19.2",
4
4
  "description": "Workspine — a repo-native delivery spine for long-horizon AI-assisted work, with directly validated support for Claude Code, Codex CLI, and OpenCode, published as gsdd-cli.",
5
5
  "type": "module",
6
6
  "bin": {