gsdd-cli 0.19.1 → 0.19.3

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 (31) hide show
  1. package/agents/DISTILLATION.md +16 -4
  2. package/agents/README.md +12 -0
  3. package/agents/approach-explorer.md +4 -4
  4. package/agents/integration-checker.md +2 -2
  5. package/agents/mapper.md +2 -2
  6. package/agents/planner.md +2 -0
  7. package/agents/researcher.md +2 -2
  8. package/agents/roadmapper.md +3 -1
  9. package/agents/synthesizer.md +2 -2
  10. package/bin/lib/health-truth.mjs +1 -1
  11. package/bin/lib/health.mjs +87 -22
  12. package/bin/lib/lifecycle-state.mjs +1 -1
  13. package/distilled/DESIGN.md +51 -12
  14. package/distilled/EVIDENCE-INDEX.md +7 -0
  15. package/distilled/templates/delegates/approach-explorer.md +1 -1
  16. package/distilled/templates/delegates/mapper-arch.md +1 -1
  17. package/distilled/templates/delegates/mapper-concerns.md +1 -1
  18. package/distilled/templates/delegates/mapper-quality.md +1 -1
  19. package/distilled/templates/delegates/mapper-tech.md +1 -1
  20. package/distilled/templates/delegates/plan-checker.md +2 -2
  21. package/distilled/templates/delegates/researcher-architecture.md +1 -1
  22. package/distilled/templates/delegates/researcher-features.md +1 -1
  23. package/distilled/templates/delegates/researcher-pitfalls.md +1 -1
  24. package/distilled/templates/delegates/researcher-stack.md +1 -1
  25. package/distilled/templates/delegates/researcher-synthesizer.md +2 -2
  26. package/distilled/workflows/audit-milestone.md +1 -1
  27. package/distilled/workflows/map-codebase.md +4 -4
  28. package/distilled/workflows/new-project.md +30 -33
  29. package/distilled/workflows/plan.md +3 -3
  30. package/distilled/workflows/quick.md +10 -6
  31. package/package.json +1 -1
@@ -54,7 +54,7 @@ Evidence map from each of the 10 canonical GSDD roles to their GSD sources, with
54
54
  - Explicit "Scope" table showing scope × trigger × focus × output location
55
55
  - Clear statement: "Same algorithm, different scope. The scope is a context input, not a different role."
56
56
 
57
- **Rationale:** The GSD original had two roles (project and phase researcher) that followed the identical algorithm but with a scope parameter. GSDD merged them into one canonical role taking scope as input, reducing the role count from 11 to 9 (later 10 with approach-explorer in D29) while preserving all leverage. This is the clean merger mentioned in D2.
57
+ **Rationale:** The GSD original had two roles (project and phase researcher) that followed the identical algorithm but with a scope parameter. GSDD merged them into one canonical role taking scope as input, reducing duplicate role contracts while preserving the current 10-role catalog. This is the clean merger mentioned in D2.
58
58
 
59
59
  ---
60
60
 
@@ -362,11 +362,23 @@ Cross-source best practices applied to GSDD role contracts, audited against 6 ex
362
362
 
363
363
  | Principle | What It Means | Source | GSDD Implementation |
364
364
  |-----------|--------------|--------|---------------------|
365
- | **Context isolation** | Research and heavy reads go in subagents; only compressed summaries enter the main context | Anthropic "Building effective agents" (Dec 2024): orchestrator-worker pattern — sub-agents do deep technical work and return condensed summaries | Approach explorer research subagents return ~1000-token summaries; plan-checker runs in fresh context |
365
+ | **Context isolation** | Research and heavy reads go in subagents; only compressed summaries enter the main context | Anthropic "Building effective agents" (Dec 2024): orchestrator-worker pattern — sub-agents do deep technical work and return condensed summaries | Approach explorer research subagents return 500-800 token agent-mediated summaries; plan-checker runs in fresh context |
366
366
  | **JIT context loading** | Never say "read everything." Specify what to extract from each file | LangChain "Context Engineering for Agents" (2025): Select step of Write/Select/Compress/Isolate — load only the specific content needed, not full files | `<input_contract>` with extraction guidance: "From SPEC.md read ONLY locked decisions" |
367
367
  | **Intermediate persistence** | For long interactions, write confirmed state to disk incrementally | Anthropic BEA: agent memory outside context window. LangChain CE: Write pattern — confirmed state persisted to disk | Approach explorer writes decisions to disk as they're confirmed during conversation |
368
368
  | **Progressive disclosure** | Don't front-load all context; let agents discover incrementally | LangChain CE: Compress/Isolate patterns — agents assemble understanding incrementally rather than loading everything upfront | Gray areas presented individually; research loaded per area on demand |
369
369
 
370
+ ### Subagent Return Tiers
371
+
372
+ Use the smallest return that preserves the downstream decision. Full documents stay on disk unless a role explicitly owns a durable artifact update.
373
+
374
+ | Tier | Use When | Return Size |
375
+ |------|----------|-------------|
376
+ | Routing summary | The orchestrator only needs a signal, category, or next-step recommendation | 100-200 tokens |
377
+ | Human-read summary | The user will read the summary directly to understand options or findings | 300-500 tokens |
378
+ | Agent-mediated discussion | The orchestrator must discuss findings with the user and answer follow-up questions without re-querying the subagent | 500-800 tokens |
379
+
380
+ This replaces the prior mixed guidance around sentence-count summaries, single-tier token budgets, and larger undifferentiated summaries. The deliberate boundary is conservative: subagents are useful for read-heavy or artifact-backed isolation, not for hidden implementation orchestration or overlapping writes without explicit write-set ownership.
381
+
370
382
  ### Prompt Structure (medium leverage)
371
383
 
372
384
  | Principle | What It Means | Source | GSDD Implementation |
@@ -381,7 +393,7 @@ Cross-source best practices applied to GSDD role contracts, audited against 6 ex
381
393
 
382
394
  | Principle | What It Means | Source | GSDD Implementation |
383
395
  |-----------|--------------|--------|---------------------|
384
- | **Authority language: intentional leverage** | Anthropic Claude warns "CRITICAL:" can overtrigger on newer models. GSDD decision: **keep CRITICAL: for mandatory initial-read** — a genuine compliance-critical instruction where skipping causes cascading failures. Emphasis markers work when rare and specific (signal-to-noise principle: one CRITICAL: in a role contract is a load-bearing gate; ten would be noise). Use normal language for algorithm steps, scope guidance, and quality rules. | Anthropic Claude prompting docs (overtriggering caution) + technical writing signal-to-noise principle. GSDD applies the caution selectively: only compliance-critical context gates use CRITICAL: | `CRITICAL: Mandatory initial read` kept in all 7 roles. `NEVER` kept for security (mapper secret protection). Normal language used for algorithm steps, scope guidance, and quality rules |
396
+ | **Authority language: intentional leverage** | Anthropic Claude warns "CRITICAL:" can overtrigger on newer models. GSDD decision: keep `CRITICAL:` only for compliance-critical context gates where skipping causes cascading failures. Emphasis markers work when rare and specific (signal-to-noise principle: one CRITICAL: in a role contract is a load-bearing gate; ten would be noise). Use normal language for algorithm steps, scope guidance, and quality rules. | Anthropic Claude prompting docs (overtriggering caution) + technical writing signal-to-noise principle. GSDD applies the caution selectively: only compliance-critical context gates use CRITICAL: | Most roles keep `CRITICAL: Mandatory initial read`; executor now uses `CRITICAL: Tiered context intake` so mandatory-now, task-scoped, reference-only, and conditional reads replace blanket preload. `NEVER` kept for security (mapper secret protection). Normal language used for algorithm steps, scope guidance, and quality rules |
385
397
  | **Tell what to do, not just what not to do** | Anti-patterns alone are insufficient; pair with positive instructions | Anthropic Claude: "Tell Claude what to do instead of what not to do" | Every role has both `<anti_patterns>` AND positive algorithm/process sections |
386
398
  | **Context for instructions** | Explain WHY a rule exists so the agent can generalize | Anthropic Claude: "Providing context or motivation behind your instructions helps Claude better understand your goals" | Research quality rules explain WHY: "Training data is a hypothesis. Verify before asserting." |
387
399
 
@@ -417,5 +429,5 @@ When sources conflict, these resolutions apply:
417
429
  |----------|------------|-----|
418
430
  | Authority language ("YOU MUST" vs. normal) | Keep CRITICAL: for mandatory initial-read (compliance-critical). Use normal language elsewhere | Emphasis markers work when rare and specific (signal-to-noise). Anthropic's overtriggering concern applies to general guidance; a single CRITICAL: for a mandatory context gate is a load-bearing instruction, not noise |
419
431
  | Example count (2 vs. 3-5) | Target 3+ for conversational agents; inline format examples are sufficient for structured output agents | Anthropic's 3-5 recommendation is general; interactive roles benefit more than output-only roles |
420
- | Subagent return size (200 vs. 1000-2000 tokens) | Use 300-500 tokens | Anthropic's 1000-2000 is upper bound; 200 was too tight for structured approach summaries with trade-offs |
432
+ | Subagent return size (200 vs. 1000-2000 tokens) | Use the three-tier return model: 100-200 for routing, 300-500 for human-read summaries, and 500-800 for agent-mediated discussion | Anthropic's 1000-2000 is an upper bound; 200 is too tight for structured approach summaries with trade-offs, while returning full raw research defeats context isolation |
421
433
  | "Don't invent alternatives" vs. "try fallback strategies" | Keep "don't invent" for approach research; use fallbacks for information retrieval | These solve different problems: manufacturing fake options is worse than acknowledging one viable path |
package/agents/README.md CHANGED
@@ -11,8 +11,20 @@ Vendor-agnostic role contracts for Workspine's agent architecture.
11
11
 
12
12
  Roles define what an agent is. Delegates define what an agent does in a specific workflow context.
13
13
 
14
+ ## Deliberate Subagent Boundary
15
+
16
+ Workspine uses subagents when isolation earns its cost: research, review, mapping, synthesis, and integration checks may run as read-only or artifact-backed delegation, with summaries returned to the orchestrator and full detail written to disk when detail is needed later.
17
+
18
+ Subagents must not become hidden implementation orchestration. Implementation remains plan-scoped and write-set constrained; overlapping implementation writes require explicit write-set ownership in the approved plan before any parallelism is safe.
19
+
20
+ Roadmapper is intentionally role-only/direct invocation in the current catalog. There is no roadmapper delegate because roadmap creation is sequential, coverage-sensitive, and writes `.planning/ROADMAP.md`; a future delegate would need a proven thin-wrapper use case before it is added.
21
+
22
+ Leverage record: lost flexibility to add delegates by symmetry; kept the two-layer role/delegate architecture and summaries-up/documents-to-disk model; gained a conservative boundary that prevents subagents from implying agent teams, parallel PR orchestration, or runtime parity claims.
23
+
14
24
  ## Lifecycle Roles
15
25
 
26
+ The catalog contains 10 canonical roles across lifecycle, audit, and utility responsibilities.
27
+
16
28
  | Role | File | Absorbs From (GSD) |
17
29
  |------|------|---------------------|
18
30
  | Mapper | `mapper.md` | `gsd-codebase-mapper.md` |
@@ -90,7 +90,7 @@ Generate 3-4 **phase-specific** gray areas. Not generic categories — concrete
90
90
 
91
91
  ## Step 3: Research Approaches (Technical and Hybrid Only)
92
92
 
93
- For each technical or hybrid gray area, research 2-3 viable approaches.
93
+ For each technical or hybrid gray area, use a read-only research subagent when isolation earns its cost, then research 2-3 viable approaches.
94
94
 
95
95
  **Source hierarchy:**
96
96
  1. Existing codebase — what patterns are already established?
@@ -311,7 +311,7 @@ Ready for assumptions?"
311
311
 
312
312
  <research_subagent_prompt>
313
313
 
314
- When the orchestrator spawns a read-only research subagent for a technical or hybrid gray area, use this prompt template. Substitute the bracketed values. One subagent is spawned per gray area.
314
+ When the orchestrator spawns a read-only research subagent for a technical or hybrid gray area, use this prompt template. Substitute the bracketed values. One subagent is spawned per gray area and returns an agent-mediated discussion summary, not raw notes.
315
315
 
316
316
  ```
317
317
  You are a research subagent for approach exploration. Your job: investigate viable approaches for ONE gray area and return a compressed structured summary. You do NOT interact with the user — read, search, and return findings only.
@@ -341,9 +341,9 @@ Training data is a hypothesis. Verify before asserting. Do NOT recommend a libra
341
341
  - Do NOT recommend deprecated or unmaintained libraries
342
342
  - Do NOT present "roll your own" as an approach unless existing libraries genuinely fail to solve the problem
343
343
  - Do NOT include approaches you cannot source
344
- - Do NOT exceed 1000 tokens in your response
344
+ - Do NOT exceed 800 tokens in your response
345
345
 
346
- ## Output Format (under 1000 tokens)
346
+ ## Output Format (500-800 tokens)
347
347
 
348
348
  For each of 2-3 viable approaches:
349
349
  - **Name**
@@ -5,7 +5,7 @@
5
5
  <role>
6
6
  You are an integration checker. You verify that phases work together as a system, not just individually.
7
7
 
8
- Your job: check cross-phase wiring, API coverage, auth protection, and end-to-end user flows. Return a structured report to the milestone auditor.
8
+ Your job: check cross-phase wiring, API coverage, auth protection, and end-to-end user flows. This is read-only verification: inspect artifacts and code, return a structured report to the milestone auditor, and do not write implementation changes.
9
9
 
10
10
  CRITICAL: Mandatory initial read
11
11
 
@@ -283,7 +283,7 @@ The integration checker is milestone-scoped:
283
283
  - maps each milestone requirement to its integration path
284
284
  - does NOT verify single-phase goal completion; that is the verifier's job
285
285
  - does NOT run the application or execute tests; this is static analysis
286
- - does NOT write output to disk; it returns a structured report to the milestone auditor
286
+ - does NOT write output to disk or mutate source files; it is a read-only subagent-style check that returns a structured report to the milestone auditor
287
287
  </scope_boundary>
288
288
 
289
289
  <anti_patterns>
package/agents/mapper.md CHANGED
@@ -19,7 +19,7 @@ Accountable for producing accurate, file-path-rich analysis of an existing codeb
19
19
  - `arch` -> ARCHITECTURE.md
20
20
  - `quality` -> CONVENTIONS.md
21
21
  - `concerns` -> CONCERNS.md
22
- - **Return:** Brief confirmation (document names + line counts). NOT document contents -- the point is reducing context transfer to the orchestrator.
22
+ - **Return:** Routing summary only (100-200 tokens: document names, line counts, and the highest-signal flags). NOT document contents -- the point is reducing context transfer to the orchestrator while the full artifacts stay on disk.
23
23
 
24
24
  ## Downstream Consumers
25
25
 
@@ -39,7 +39,7 @@ This means: file paths are critical (planner needs to navigate directly), patter
39
39
  2. **Explore the codebase** thoroughly for the assigned focus area. Use file listing, content search, and targeted file reads. Read actual code -- do not guess.
40
40
  3. **Fill the document template** with findings. Replace all placeholders with real data. Use "Not detected" for genuinely absent items.
41
41
  4. **Write document(s)** to the designated output directory.
42
- 5. **Return confirmation only** -- document names and line counts. Do not echo contents back.
42
+ 5. **Return summary only** -- document names, line counts, and highest-signal flags. Do not echo contents back.
43
43
 
44
44
  ## Focus Area Guidance
45
45
 
package/agents/planner.md CHANGED
@@ -10,6 +10,7 @@ Your job:
10
10
  - decompose the phase into dependency-aware plans and waves
11
11
  - derive must-haves from the phase goal
12
12
  - return structured planning output instead of prose-only recommendations
13
+ - use research or checker subagents only for read-only or fresh-context review; do not plan hidden implementation orchestration
13
14
 
14
15
  CRITICAL: Mandatory initial read — if the prompt contains a `<files_to_read>` block, read every file listed there before doing any other work. That is your primary context.
15
16
  </role>
@@ -176,6 +177,7 @@ Wave 3: C
176
177
  Wave rule:
177
178
  - if a task's verify step depends on a test file or artifact, an earlier wave must create it
178
179
  - if two tasks touch the same critical file or one task's output is another task's input, they are not parallel
180
+ - parallel implementation is allowed only when the approved plan names explicit, disjoint write-set ownership
179
181
  </dependency_graph_example>
180
182
 
181
183
  <output>
@@ -26,7 +26,7 @@ Same algorithm, different scope. The scope is a context input, not a different r
26
26
 
27
27
  - **Artifacts (project scope):** STACK.md, FEATURES.md, ARCHITECTURE.md, PITFALLS.md (+ COMPARISON.md or FEASIBILITY.md if applicable mode)
28
28
  - **Artifacts (phase scope):** Single RESEARCH.md with sections: Standard Stack, Architecture Patterns, Don't Hand-Roll, Common Pitfalls, Code Examples
29
- - **Return:** Structured summary with key findings, confidence assessment, and open questions
29
+ - **Return:** Human-read structured summary (300-500 tokens) with key findings, confidence assessment, and open questions. Do not return raw research; full detail belongs in the written artifact.
30
30
 
31
31
  ## Core Algorithm
32
32
 
@@ -43,7 +43,7 @@ Same algorithm, different scope. The scope is a context input, not a different r
43
43
  - Single unverified source -> LOW confidence, flag for validation
44
44
  5. **Run quality checklist:** All domains investigated? Negative claims verified with official docs? Multiple sources for critical claims? Confidence levels assigned honestly?
45
45
  6. **Write output files** to the designated directory.
46
- 7. **Return structured result** to orchestrator. Do not commit -- orchestrator handles git.
46
+ 7. **Return structured summary** to orchestrator. Do not return raw research and do not commit -- orchestrator handles git.
47
47
 
48
48
  ## Quality Guarantees
49
49
 
@@ -5,6 +5,8 @@
5
5
  <role>
6
6
  You are a roadmapper. You turn requirements into a phased delivery plan that downstream planners can execute without guessing.
7
7
 
8
+ Roadmapper is role-only/direct invocation in the current Workspine contract, not a delegate. Roadmap creation is sequential, coverage-sensitive, and owns `.planning/ROADMAP.md`; do not route it through a hidden subagent wrapper unless a future plan explicitly adds that delegate.
9
+
8
10
  Your job:
9
11
  - derive phases from requirements instead of imposing a template
10
12
  - map every in-scope requirement to exactly one phase
@@ -292,5 +294,5 @@ If a section does not improve requirement coverage, dependency order, or observa
292
294
  ## Vendor Hints
293
295
 
294
296
  - **Tools required:** file read, file write, content search
295
- - **Parallelizable:** No - roadmapping is sequential and coverage-sensitive
297
+ - **Parallelizable:** No - roadmapping is sequential, coverage-sensitive, and writes `.planning/ROADMAP.md` directly
296
298
  - **Context budget:** Moderate - the reasoning work is heavier than the I/O
@@ -9,7 +9,7 @@ Your job:
9
9
  - read the full research outputs
10
10
  - extract the most decision-relevant findings
11
11
  - cross-reference them into roadmap implications
12
- - return a structured handoff the roadmapper can use directly
12
+ - return an agent-mediated structured summary the roadmapper can use directly
13
13
 
14
14
  CRITICAL: Mandatory initial read
15
15
 
@@ -75,7 +75,7 @@ Assign confidence by area based on source quality and identify any unresolved ga
75
75
 
76
76
  ## Step 6: Write the summary and return a structured handoff
77
77
 
78
- Write `.planning/research/SUMMARY.md`. Return a short structured summary to the orchestrator.
78
+ Write `.planning/research/SUMMARY.md`. Return a 500-800 token structured summary to the orchestrator so downstream discussion can preserve recommendation reasoning without returning the full document.
79
79
  </execution_flow>
80
80
 
81
81
  <cross_reference_dimensions>
@@ -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
  }
@@ -274,7 +274,7 @@ export function readBrownfieldChangeState(planningDir) {
274
274
  handoffPath,
275
275
  title: extractMarkdownHeading(changeArtifact.body),
276
276
  changeId: changeArtifact.frontmatter.change || null,
277
- currentStatus: changeArtifact.frontmatter.status || extractBulletLabel(currentStatusSection, 'Current posture'),
277
+ currentStatus: extractBulletLabel(currentStatusSection, 'Current posture') || changeArtifact.frontmatter.status || null,
278
278
  currentIntegrationSurface: extractBulletLabel(currentStatusSection, 'Current branch / integration surface'),
279
279
  currentOwnerRuntime: extractBulletLabel(currentStatusSection, 'Current owner / runtime'),
280
280
  nextAction: collapseMarkdownSection(nextActionSection),
@@ -71,6 +71,7 @@
71
71
  58. [Local Workflow Helper Launcher](#d58---local-workflow-helper-launcher)
72
72
  59. [Continuity Authority And Planning-State Drift](#d59---continuity-authority-and-planning-state-drift)
73
73
  60. [Release Closeout Contract](#d60---release-closeout-contract)
74
+ 61. [Deliberate Subagent Contract](#d61---deliberate-subagent-contract)
74
75
 
75
76
  ---
76
77
 
@@ -285,11 +286,11 @@ This hardening pass also clarified a reusable architectural rule: strict portabl
285
286
 
286
287
  | researchDepth | Synthesizer behavior |
287
288
  | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
288
- | `fast` | Orchestrator writes SUMMARY.md inline from the 4 x 3-5 sentence summaries it holds in context. No delegate spawned. |
289
+ | `fast` | Orchestrator writes SUMMARY.md inline from the 4 human-read structured summaries it holds in context. No delegate spawned. |
289
290
  | `balanced` | ResearchSynthesizer delegate spawned. Reads 4 full research files. Cross-references build order constraints, pitfall-to-phase mappings, feature-architecture conflicts that short summaries omit. |
290
291
  | `deep` | Same as balanced but researchers produce longer output (more material for synthesizer to cross-reference). |
291
292
 
292
- **Why conditional:** The synthesizer's value is in cross-referencing specific data across research dimensions. When `researchDepth=fast`, researchers produce 3-5 sentence summaries only -- there's nothing substantive to cross-reference. Spawning a synthesizer to reformat 4 short paragraphs wastes a context window and an agent hop.
293
+ **Why conditional:** The synthesizer's value is in cross-referencing specific data across research dimensions. When `researchDepth=fast`, researchers return compact summaries and the full research files remain available on disk; spawning a synthesizer to reformat shallow inputs wastes a context window and an agent hop.
293
294
 
294
295
  **Evidence:**
295
296
 
@@ -442,7 +443,7 @@ Codex CLI is skills-first because the terminal CLI supports repository skills di
442
443
 
443
444
  **GSDD:** Makes this explicit as a design rule.
444
445
 
445
- **The rule:** Delegates write full documents to disk. They return 3-5 sentence summaries to the orchestrator. The orchestrator never receives document contents in its conversation context.
446
+ **The rule:** Delegates write full documents to disk. They return bounded summaries to the orchestrator: routing summaries use 100-200 tokens, human-read summaries use 300-500 tokens, and agent-mediated discussion summaries use 500-800 tokens. The orchestrator never receives document contents in its conversation context.
446
447
 
447
448
  **Why this matters:**
448
449
 
@@ -452,7 +453,7 @@ Codex CLI is skills-first because the terminal CLI supports repository skills di
452
453
 
453
454
  **Implementation:**
454
455
 
455
- - Each delegate's instructions end with: "Return a 3-5 sentence summary of key findings. Do NOT return the full document contents."
456
+ - Each delegate's instructions identify the correct summary tier and keep full document contents on disk instead of echoing them into orchestrator context.
456
457
  - Output templates in `.planning/templates/research/` and `.planning/templates/codebase/` define the on-disk format.
457
458
  - The synthesizer reads all 4 research files from disk -- it is the only agent that sees full research content.
458
459
 
@@ -958,20 +959,20 @@ Implementation lives under `bin/lib/`:
958
959
  | E8 | ERROR | `.planning/templates/` missing critical root files (`spec.md`, `roadmap.md`, `auth-matrix.md`) |
959
960
  | E9 | ERROR | `.planning/templates/brownfield-change/` missing or missing critical files (`CHANGE.md`, `HANDOFF.md`, `VERIFICATION.md`) |
960
961
  | 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 |
962
+ | W2 | WARN | Manifest-tracked installed templates/helpers modified locally (hash mismatch vs manifest) |
963
+ | W3 | WARN | Manifest-tracked installed templates/helpers missing from disk but listed in manifest |
963
964
  | W4 | WARN | Active non-archived phases marked in progress/done are missing from `.planning/phases/` |
964
965
  | W5 | WARN | Phase artifact set has PLAN but no matching SUMMARY (stale in-progress) |
965
- | W6 | WARN | No adapter surfaces detected |
966
+ | W6 | WARN | No generated workflow adapter surfaces detected |
966
967
  | W7 | WARN | `distilled/DESIGN.md` health check table differs from implemented check IDs |
967
968
  | W8 | WARN | `distilled/README.md` workflow inventory differs from `distilled/workflows/` |
968
969
  | W9 | WARN | `.internal-research/gaps.md` references missing repo-local paths |
969
970
  | 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 |
971
+ | W11 | WARN | Renderer-backed generated runtime/helper surfaces drift from current render output |
971
972
  | W12 | WARN | Planning state drifted since last recorded session (fingerprint mismatch) |
972
973
  | I1 | INFO | Generation manifest `frameworkVersion` differs from current `FRAMEWORK_VERSION` |
973
974
  | I2 | INFO | Phase completion count from ROADMAP |
974
- | I3 | INFO | Which adapters are installed |
975
+ | I3 | INFO | Which runtime/governance surfaces are installed |
975
976
 
976
977
  **Verdict logic:**
977
978
  - Any ERROR → `broken` (exit code 1)
@@ -994,7 +995,9 @@ Implementation lives under `bin/lib/`:
994
995
 
995
996
  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
997
 
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.
998
+ 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`.
999
+
1000
+ 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
1001
 
999
1002
  **What was removed vs GSD:**
1000
1003
  - `--repair` flag and associated repair actions
@@ -1354,7 +1357,7 @@ Combined, these three workflows provided genuine leverage: the planner could not
1354
1357
 
1355
1358
  **GSDD decision:** Recover the discuss-phase leverage as a single role (`agents/approach-explorer.md`) embedded in the plan workflow, with a hybrid interaction architecture:
1356
1359
 
1357
- 1. **Primary path (inline + research subagents):** Conversation runs in the plan workflow's main context (required for user interactivity). For each technical gray area, a read-only research subagent spawns, reads codebase/docs, and returns a compressed ~1000-token structured summary. Only summaries enter the conversation context, not raw file reads.
1360
+ 1. **Primary path (inline + research subagents):** Conversation runs in the plan workflow's main context (required for user interactivity). For each technical gray area, a read-only research subagent spawns, reads codebase/docs, and returns a compressed 500-800 token structured summary. Only summaries enter the conversation context, not raw file reads.
1358
1361
 
1359
1362
  2. **Native agent optimization:** Runtimes with interactive subagent support (Claude Code with `AskUserQuestion`, Codex interactive agents, OpenCode `mode: agent`) can run the full exploration as a native agent. Falls back to the inline primary path if unavailable.
1360
1363
 
@@ -1387,7 +1390,7 @@ The approach explorer needs two capabilities with opposite context requirements:
1387
1390
  - **Conversation** needs the main context (for user interaction)
1388
1391
  - **Research** generates thousands of tokens of raw content the conversation doesn't need
1389
1392
 
1390
- Isolating research in subagents and returning compressed summaries follows the Compress and Isolate patterns from context engineering literature. The research subagent prompt template lives in the role contract (`<research_subagent_prompt>` section of `agents/approach-explorer.md`) — co-located with the algorithm it serves, and referenced by the portable workflow rather than inlined. The main context budget stays manageable: ~1000 tokens orchestration + ~4000 tokens research summaries (4 areas × ~1000) + ~4000 tokens conversation + ~500 tokens APPROACH.md = ~9500 tokens. The 1000-token budget (matching Anthropic CE's recommended floor) gives research subagents room for the structured format (Name/Pro/Con/Source) plus recommendation reasoning, source verification, and enough project-specific context that the main agent can handle follow-up questions without re-querying the subagent.
1393
+ Isolating research in subagents and returning compressed summaries follows the Compress and Isolate patterns from context engineering literature. The research subagent prompt template lives in the role contract (`<research_subagent_prompt>` section of `agents/approach-explorer.md`) — co-located with the algorithm it serves, and referenced by the portable workflow rather than inlined. The main context budget stays manageable: about 1000 tokens orchestration, up to 3200 tokens research summaries (4 areas x 800), about 4000 tokens conversation, and about 500 tokens APPROACH.md. The 500-800 token agent-mediated discussion tier gives research subagents room for the structured format (Name/Pro/Con/Source) plus recommendation reasoning, source verification, and enough project-specific context that the main agent can handle follow-up questions without re-querying the subagent.
1391
1394
 
1392
1395
  **Evidence:**
1393
1396
 
@@ -2774,6 +2777,42 @@ Posture compatibility is part of that closeout contract: `repo_closeout` and `ru
2774
2777
  - `complete-milestone` now fails closed before archive writes when the passed audit omits or contradicts the release claim contract.
2775
2778
  - Public claims are scoped to tracked public or repo-visible proof, while GitHub Releases, tags, package publication, and release automation remain deferred until explicitly planned.
2776
2779
 
2780
+ ## D61 - Deliberate Subagent Contract
2781
+
2782
+ **Decision (2026-04-28):** Subagents are deliberate isolation tools, not hidden implementation orchestration. Workspine should use them for research, review, mapping, synthesis, and integration checking when the work is read-only or artifact-backed, while implementation remains sequential unless an approved plan explicitly owns disjoint write sets.
2783
+
2784
+ **Context:**
2785
+ - Phase 50 found that existing subagent wording was over-strong in some planning and role surfaces while summary-size guidance had drifted across 3-5 sentence, 300-500 token, and 1000-token variants.
2786
+ - Phase 46 research supported parallel agents for breadth-first research, but warned that coding writes need stronger coordination before parallel PR or multi-worktree orchestration is safe.
2787
+ - Phase 53 approach alignment confirmed the conservative boundary: allow read-heavy and artifact-backed delegation, forbid hidden implementation orchestration, keep roadmapper role-only/direct invocation, and do not claim broad S3/S5 closure or native runtime parity.
2788
+
2789
+ **Decision:**
2790
+ - Allowed subagent use: research, review, mapping, synthesis, and integration checks when they are read-only or when the subagent writes/updates its own bounded durable artifact.
2791
+ - Return discipline: routing summaries use 100-200 tokens, human-read summaries use 300-500 tokens, agent-mediated discussion summaries use 500-800 tokens, and full details live in durable documents on disk.
2792
+ - Forbidden by default: hidden implementation orchestration, agent teams, parallel PR flows, multi-worktree coding, and overlapping implementation writes without explicit write-set ownership in the approved plan.
2793
+ - Roadmapper remains role-only/direct invocation in Phase 53. Roadmap creation is sequential and coverage-sensitive, writes `.planning/ROADMAP.md`, and does not yet have a proven thin-wrapper delegate use case.
2794
+ - S3 and S5 remain deferred. This decision narrows the practical Workspine subagent contract but does not close broad subagent orchestration parity or adapter research gaps.
2795
+
2796
+ **Leverage:**
2797
+ - Lost: less flexibility for future agents to add delegates by symmetry or treat missing delegates as accidental gaps.
2798
+ - Kept: the two-layer role/delegate architecture, summaries-up/documents-to-disk, repo-native workflow state, lifecycle preflight, and write-set constraints.
2799
+ - Gained: a durable conservative rule that tells agents when subagents earn their keep and when they create hidden orchestration risk.
2800
+
2801
+ **Evidence:**
2802
+ - `agents/README.md`
2803
+ - `agents/DISTILLATION.md`
2804
+ - `distilled/templates/delegates/`
2805
+ - `distilled/workflows/map-codebase.md`
2806
+ - `distilled/workflows/new-project.md`
2807
+ - GSD comparison source: `get-shit-done/workflows/new-project.md` and mapper/research workflows use `Task()` subagents heavily, but GSDD keeps the portable core single-agent-safe and only preserves subagent use where isolation, artifact persistence, or fresh-context review pays for the complexity.
2808
+
2809
+ **Consequences:**
2810
+ - Future role, delegate, and workflow wording must distinguish read-only/artifact-backed delegation from implementation write ownership.
2811
+ - A roadmapper delegate must not appear by symmetry; it needs a future explicit design decision and regression updates.
2812
+ - Generated runtime freshness may propagate this wording, but generated freshness is not runtime parity proof.
2813
+
2814
+ ---
2815
+
2777
2816
  ## Maintenance
2778
2817
 
2779
2818
  This document is updated when:
@@ -478,6 +478,13 @@
478
478
  - `distilled/DESIGN.md` D50 and D59
479
479
  - `tests/phase.test.cjs`, `tests/gsdd.guards.test.cjs`, `tests/gsdd.scenarios.test.cjs`
480
480
 
481
+ ## D61 — Deliberate Subagent Contract
482
+ - `agents/README.md`, `agents/DISTILLATION.md`, `agents/approach-explorer.md`, `agents/planner.md`, `agents/roadmapper.md`
483
+ - `distilled/templates/delegates/approach-explorer.md`, `distilled/templates/delegates/plan-checker.md`
484
+ - `distilled/workflows/audit-milestone.md`, `distilled/workflows/map-codebase.md`, `distilled/workflows/new-project.md`, `distilled/workflows/plan.md`
485
+ - GSD comparison source: `get-shit-done/workflows/new-project.md`
486
+ - `tests/gsdd.guards.test.cjs`, `tests/gsdd.invariants.test.cjs`
487
+
481
488
  ---
482
489
 
483
490
  ## Maintenance
@@ -25,4 +25,4 @@ Classify each gray area before acting on it:
25
25
 
26
26
  Write `{padded_phase}-APPROACH.md` to the phase directory using the approach template.
27
27
 
28
- Return structured summary: gray areas explored, decisions captured, assumptions validated/corrected, deferred ideas, path to APPROACH.md.
28
+ Return only a structured summary: gray areas explored, decisions captured, assumptions validated/corrected, deferred ideas, and path to APPROACH.md. Full decision detail belongs in the APPROACH.md artifact, not in the orchestrator context.
@@ -22,5 +22,5 @@ Include:
22
22
  </quality_gate>
23
23
 
24
24
  Write to: `.planning/codebase/ARCHITECTURE.md`
25
- Return: 3-5 sentence summary to the Orchestrator when done.
25
+ Return: Routing summary to the Orchestrator (100-200 tokens) when done.
26
26
  Guardrails: Max Agent Hops = 3. No static directory dumps.
@@ -23,5 +23,5 @@ Include:
23
23
  </quality_gate>
24
24
 
25
25
  Write to: `.planning/codebase/CONCERNS.md`
26
- Return: 3-5 sentence summary to the Orchestrator when done. If secrets found, STOP and report immediately.
26
+ Return: Routing summary to the Orchestrator (100-200 tokens) when done. If secrets found, STOP and report immediately.
27
27
  Guardrails: Max Agent Hops = 3. Hard stop on secrets.
@@ -24,5 +24,5 @@ Include:
24
24
  </quality_gate>
25
25
 
26
26
  Write to: `.planning/codebase/CONVENTIONS.md`
27
- Return: 3-5 sentence summary to the Orchestrator when done.
27
+ Return: Routing summary to the Orchestrator (100-200 tokens) when done.
28
28
  Guardrails: Max Agent Hops = 3. Rules not inventories.
@@ -21,5 +21,5 @@ Include:
21
21
  </quality_gate>
22
22
 
23
23
  Write to: `.planning/codebase/STACK.md`
24
- Return: 3-5 sentence summary to the Orchestrator when done.
24
+ Return: Routing summary to the Orchestrator (100-200 tokens) when done.
25
25
  Guardrails: Max Agent Hops = 3. No static dependency dumps.
@@ -1,6 +1,6 @@
1
1
  **Role contract:** Read `.planning/templates/roles/planner.md` before starting. Reuse its planning vocabulary and quality standards, but this wrapper overrides your objective: you are reviewing plans, not authoring them.
2
2
 
3
- You are the fresh-context plan checker for `/gsdd-plan`.
3
+ You are the fresh-context plan checker for `/gsdd-plan`. This is a read-only review delegate: return the JSON finding summary only, and do not edit plan artifacts yourself.
4
4
 
5
5
  Read only the explicit inputs provided by the orchestrator:
6
6
  - target phase goal and requirement IDs
@@ -45,7 +45,7 @@ Verify these dimensions:
45
45
  - **Deferred excluded?** Deferred ideas from APPROACH.md must not appear in plan tasks -> `blocker` if found.
46
46
  - If `workflow.discuss` is `true` in the project config and no APPROACH.md was provided, emit a `blocker` on `approach_alignment` with `description: 'workflow.discuss is true but no APPROACH.md was provided'` and `fix_hint: 'Run approach exploration before planning — workflow.discuss=true requires an approved APPROACH.md before a plan can be emitted.'` If `workflow.discuss` is `false` or the key is absent and no APPROACH.md was provided, skip this dimension entirely.
47
47
 
48
- Return JSON only as a single object with this shape:
48
+ Return JSON only as a single finding summary object with this shape:
49
49
 
50
50
  ```json
51
51
  {
@@ -26,5 +26,5 @@ Your output informs phase structure in ROADMAP.md. Include:
26
26
 
27
27
  Write to: `.planning/research/ARCHITECTURE.md`
28
28
  Use template: `.planning/templates/research/architecture.md` (if it exists)
29
- Return: 3-5 sentence summary of key findings to the Orchestrator when done.
29
+ Return: Human-read structured summary to the Orchestrator (300-500 tokens) when done.
30
30
  Guardrails: Max Agent Hops = 3.
@@ -26,5 +26,5 @@ Your output feeds SPEC requirements. Categorize explicitly:
26
26
 
27
27
  Write to: `.planning/research/FEATURES.md`
28
28
  Use template: `.planning/templates/research/features.md` (if it exists)
29
- Return: 3-5 sentence summary of key findings to the Orchestrator when done.
29
+ Return: Human-read structured summary to the Orchestrator (300-500 tokens) when done.
30
30
  Guardrails: Max Agent Hops = 3.
@@ -26,5 +26,5 @@ Your output prevents mistakes in roadmap and planning. For each pitfall:
26
26
 
27
27
  Write to: `.planning/research/PITFALLS.md`
28
28
  Use template: `.planning/templates/research/pitfalls.md` (if it exists)
29
- Return: 3-5 sentence summary of key findings to the Orchestrator when done.
29
+ Return: Human-read structured summary to the Orchestrator (300-500 tokens) when done.
30
30
  Guardrails: Max Agent Hops = 3.
@@ -26,5 +26,5 @@ Your output feeds the roadmapper. Be prescriptive:
26
26
 
27
27
  Write to: `.planning/research/STACK.md`
28
28
  Use template: `.planning/templates/research/stack.md` (if it exists)
29
- Return: 3-5 sentence summary of key findings to the Orchestrator when done.
29
+ Return: Human-read structured summary to the Orchestrator (300-500 tokens) when done.
30
30
  Guardrails: Max Agent Hops = 3.
@@ -11,7 +11,7 @@ Read these files (all should exist):
11
11
  Cross-reference them. Surface conflicts and dependencies between findings. Do NOT do new research — synthesize what exists.
12
12
 
13
13
  SUMMARY.md MUST include:
14
- 1. **Key Findings** — top 5-7 bullets across all 4 dimensions
14
+ 1. **Key Findings** — the highest-signal findings across all 4 dimensions
15
15
  2. **Implications for Roadmap** — suggested phase groupings derived from architecture build order + pitfall avoidance (this is the critical handoff to the roadmapper)
16
16
  3. **Research Flags** — which phases need deeper research vs standard patterns
17
17
  4. **Confidence Assessment** — per domain: stack / features / architecture / pitfalls
@@ -27,5 +27,5 @@ Use template: `.planning/templates/research/summary.md` (if it exists)
27
27
  </quality_gate>
28
28
 
29
29
  Write to: `.planning/research/SUMMARY.md`
30
- Return: 5-7 bullet key findings to the Orchestrator when done.
30
+ Return: Agent-mediated structured summary to the Orchestrator (500-800 tokens) when done.
31
31
  Guardrails: Max Agent Hops = 2. Do not do new research — synthesize only.
@@ -110,7 +110,7 @@ With phase context collected, delegate cross-phase integration checking:
110
110
 
111
111
  **Task:** Verify cross-phase wiring, API coverage, auth protection, and E2E user flows. Return structured integration report with wiring summary, API coverage, auth protection, E2E flow status, and Requirements Integration Map.
112
112
 
113
- **Return:** Structured integration report (wiring, APIs, auth protection, flows, requirements map).
113
+ **Return:** Structured integration report summary (wiring, APIs, auth protection, flows, requirements map). The checker is read-only; the auditor owns the milestone audit artifact.
114
114
  </delegate>
115
115
 
116
116
  If the runtime supports spawning a subagent: spawn the integration checker as a separate read-only context for independent verification.
@@ -102,7 +102,7 @@ Parallel: (use parallelization value from .planning/config.json)
102
102
  Context: Current working directory. DO NOT share conversation history.
103
103
  Instruction: Read `.planning/templates/delegates/mapper-tech.md` for full task instructions. Follow them exactly.
104
104
  Output: `.planning/codebase/STACK.md`
105
- Return: 3-5 sentence summary to Orchestrator.
105
+ Return: Routing summary to Orchestrator (100-200 tokens); full findings stay in the output artifact.
106
106
  Guardrails: Max Agent Hops = 3. No static dumps. Never read .env contents.
107
107
  </delegate>
108
108
 
@@ -112,7 +112,7 @@ Parallel: (use parallelization value from .planning/config.json)
112
112
  Context: Current working directory. DO NOT share conversation history.
113
113
  Instruction: Read `.planning/templates/delegates/mapper-arch.md` for full task instructions. Follow them exactly.
114
114
  Output: `.planning/codebase/ARCHITECTURE.md`
115
- Return: 3-5 sentence summary to Orchestrator.
115
+ Return: Routing summary to Orchestrator (100-200 tokens); full findings stay in the output artifact.
116
116
  Guardrails: Max Agent Hops = 3. No static directory dumps. Never read .env contents.
117
117
  </delegate>
118
118
 
@@ -122,7 +122,7 @@ Parallel: (use parallelization value from .planning/config.json)
122
122
  Context: Current working directory. DO NOT share conversation history.
123
123
  Instruction: Read `.planning/templates/delegates/mapper-quality.md` for full task instructions. Follow them exactly.
124
124
  Output: `.planning/codebase/CONVENTIONS.md`
125
- Return: 3-5 sentence summary to Orchestrator.
125
+ Return: Routing summary to Orchestrator (100-200 tokens); full findings stay in the output artifact.
126
126
  Guardrails: Max Agent Hops = 3. Rules not inventories. Never read .env contents.
127
127
  </delegate>
128
128
 
@@ -132,7 +132,7 @@ Parallel: (use parallelization value from .planning/config.json)
132
132
  Context: Current working directory. DO NOT share conversation history.
133
133
  Instruction: Read `.planning/templates/delegates/mapper-concerns.md` for full task instructions. Follow them exactly. Hard stop if secrets found -- report immediately.
134
134
  Output: `.planning/codebase/CONCERNS.md`
135
- Return: 3-5 sentence summary to Orchestrator. If secrets found, STOP and report immediately.
135
+ Return: Routing summary to Orchestrator (100-200 tokens); full findings stay in the output artifact. If secrets found, STOP and report immediately.
136
136
  Guardrails: Max Agent Hops = 3. Hard stop on secrets. Never read .env contents.
137
137
  </delegate>
138
138
  </mapping>
@@ -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: Human-read structured summary to Orchestrator (300-500 tokens); 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: Human-read structured summary to Orchestrator (300-500 tokens); 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: Human-read structured summary to Orchestrator (300-500 tokens); 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: Human-read structured summary to Orchestrator (300-500 tokens); 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 human-read structured 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,11 +279,11 @@ 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: Agent-mediated structured summary to Orchestrator (500-800 tokens); 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
 
288
- *Why the split:* The synthesizer reads the 4 full research files and cross-references specific data points (build order constraints, pitfall-to-phase mappings, feature-architecture conflicts) that 3-5 sentence summaries omit. This depth matters for `balanced`/`deep` runs where the roadmapper needs rich "Implications for Roadmap." For `fast` runs, orchestrator inline synthesis is the acceptable trade-off.
286
+ *Why the split:* The synthesizer reads the 4 full research files and cross-references specific data points (build order constraints, pitfall-to-phase mappings, feature-architecture conflicts) that returned summaries omit. This depth matters for `balanced`/`deep` runs where the roadmapper needs rich "Implications for Roadmap." For `fast` runs, orchestrator inline synthesis is the acceptable trade-off.
289
287
 
290
288
  Display key findings before moving to spec creation.
291
289
 
@@ -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._"
@@ -348,7 +345,7 @@ Do NOT proceed to roadmap creation until the developer explicitly approves.
348
345
 
349
346
  <roadmap_creation>
350
347
  After `SPEC.md` is approved, you must create `ROADMAP.md`.
351
- Since you are an Orchestrator with fresh context, you DO NOT need to spawn a subagent for thiswrite it yourself directly, retaining full thoroughness.
348
+ Since you are an Orchestrator with fresh context, you DO NOT need to spawn a subagent for this; write it yourself directly, retaining full thoroughness. Research and synthesis delegation above are artifact-backed inputs; roadmap creation remains direct and sequential.
352
349
 
353
350
  Break `SPEC.md` requirements into executable phases:
354
351
 
@@ -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
@@ -436,14 +436,14 @@ Run the approach explorer.
436
436
 
437
437
  ### Running the Approach Explorer
438
438
  **Primary path — inline conversation with research subagents:**
439
- The conversation with the user runs inline in the main context. For each technical gray area, a read-only research subagent is spawned to isolate heavy codebase and documentation reads, returning only compressed summaries.
439
+ The conversation with the user runs inline in the main context. For each technical gray area, a read-only research subagent is spawned to isolate heavy codebase and documentation reads, returning only compressed summaries while full detail stays out of the orchestrator context.
440
440
 
441
441
  1. Load context: read ONLY locked decisions from `.planning/SPEC.md` and the target phase goal/requirements from `.planning/ROADMAP.md`.
442
442
 
443
443
  2. Identify 3-4 domain-specific gray areas. Classify each as **taste** (preference, no research needed), **technical** (trade-offs, research first), or **hybrid** (both).
444
444
 
445
445
  3. For each **technical or hybrid** gray area, spawn a read-only research subagent.
446
- Use the prompt template from `.planning/templates/roles/approach-explorer.md` (`<research_subagent_prompt>` section), substituting the gray area name, classification, phase context, and relevant codebase files. Each subagent returns a structured summary under 1000 tokens.
446
+ Use the prompt template from `.planning/templates/roles/approach-explorer.md` (`<research_subagent_prompt>` section), substituting the gray area name, classification, phase context, and relevant codebase files. Each subagent returns a structured summary and does not write implementation artifacts.
447
447
 
448
448
  4. Present each gray area to the user individually:
449
449
  - For taste areas: ask directly
@@ -488,7 +488,7 @@ The approach explorer's full role contract is at `.planning/templates/roles/appr
488
488
 
489
489
  <plan_check_orchestration>
490
490
  ### How Plan Checking Works
491
- After the planner produces a draft plan, an independent checker reviews it in fresh context. The checker does not inherit the planner's hidden reasoning; it treats the plan as an untrusted draft.
491
+ After the planner produces a draft plan, an independent checker reviews it in fresh context. The checker does not inherit the planner's hidden reasoning; it treats the plan as an untrusted draft and returns a structured summary of findings rather than editing the plan directly.
492
492
 
493
493
  ### What The Checker Verifies
494
494
  1. `requirement_coverage` - every phase requirement is covered by at least one concrete task
@@ -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.3",
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": {