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.
- package/bin/lib/health-truth.mjs +1 -1
- package/bin/lib/health.mjs +87 -22
- package/distilled/DESIGN.md +8 -6
- package/distilled/workflows/new-project.md +28 -31
- package/distilled/workflows/quick.md +10 -6
- package/package.json +1 -1
package/bin/lib/health-truth.mjs
CHANGED
|
@@ -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: `
|
|
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
|
}
|
package/bin/lib/health.mjs
CHANGED
|
@@ -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
|
-
|
|
206
|
-
|
|
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
|
|
249
|
-
const
|
|
250
|
-
if (
|
|
251
|
-
if (
|
|
252
|
-
if (
|
|
253
|
-
if (
|
|
254
|
-
if (existsSync(join(cwd, 'AGENTS.md')))
|
|
255
|
-
if (
|
|
256
|
-
info.push({ id: 'I3', severity: 'INFO', message: `
|
|
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
|
-
|
|
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
|
}
|
package/distilled/DESIGN.md
CHANGED
|
@@ -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 |
|
|
962
|
-
| W3 | WARN |
|
|
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 |
|
|
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
|
|
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/`
|
|
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-
|
|
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
|
|
37
|
-
- `workflow.research`: true | false
|
|
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
|
|
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"`
|
|
206
|
-
- If `researchDepth: "balanced"` or `"deep"`
|
|
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
|
|
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.)
|
|
216
|
-
- If `parallelization: false` or your platform lacks parallel execution
|
|
217
|
-
- If `researchDepth: "fast"`
|
|
218
|
-
- If `researchDepth: "balanced"` or `"deep"`
|
|
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
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
316
|
-
7. **Typed Data Schemas
|
|
317
|
-
8. **Done-When Verification Chain
|
|
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
|
|
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
|
|
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
|
|
226
|
-
- If `$
|
|
227
|
-
-
|
|
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.
|
|
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": {
|