@ktpartners/dgs-platform 3.0.4 → 3.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +124 -0
- package/README.md +8 -1
- package/agents/dgs-executor.md +124 -3
- package/agents/dgs-idea-researcher.md +447 -0
- package/agents/dgs-plan-checker.md +32 -0
- package/agents/dgs-planner.md +41 -8
- package/bin/install.js +44 -0
- package/commands/dgs/audit-milestone.md +2 -1
- package/commands/dgs/diff-report.md +124 -0
- package/commands/dgs/new-project.md +8 -21
- package/commands/dgs/package-scan.md +43 -0
- package/commands/dgs/research-idea.md +1 -0
- package/commands/dgs/switch-project.md +13 -0
- package/deliver-great-systems/bin/dgs-tools.cjs +120 -5
- package/deliver-great-systems/bin/lib/audit-tolerance.cjs +77 -0
- package/deliver-great-systems/bin/lib/audit-tolerance.test.cjs +101 -0
- package/deliver-great-systems/bin/lib/commands.cjs +311 -16
- package/deliver-great-systems/bin/lib/commands.test.cjs +115 -0
- package/deliver-great-systems/bin/lib/commit-verify.test.cjs +236 -0
- package/deliver-great-systems/bin/lib/config.cjs +41 -0
- package/deliver-great-systems/bin/lib/config.test.cjs +309 -0
- package/deliver-great-systems/bin/lib/core.cjs +9 -9
- package/deliver-great-systems/bin/lib/core.test.cjs +79 -1
- package/deliver-great-systems/bin/lib/docs.cjs +22 -12
- package/deliver-great-systems/bin/lib/fast-routing.cjs +199 -0
- package/deliver-great-systems/bin/lib/fast-routing.test.cjs +108 -0
- package/deliver-great-systems/bin/lib/final-commit-precondition.test.cjs +87 -0
- package/deliver-great-systems/bin/lib/fixtures/package-scan/bundler-audit-gemfile.json +21 -0
- package/deliver-great-systems/bin/lib/fixtures/package-scan/gate-parity-expected.md +186 -0
- package/deliver-great-systems/bin/lib/fixtures/package-scan/gate-parity-runresult.json +235 -0
- package/deliver-great-systems/bin/lib/fixtures/package-scan/govulncheck-import.json +3 -0
- package/deliver-great-systems/bin/lib/fixtures/package-scan/npm-audit-v10.json +37 -0
- package/deliver-great-systems/bin/lib/fixtures/package-scan/osv-clean.json +3 -0
- package/deliver-great-systems/bin/lib/fixtures/package-scan/osv-vulns.json +77 -0
- package/deliver-great-systems/bin/lib/fixtures/package-scan/pip-audit-requirements.json +28 -0
- package/deliver-great-systems/bin/lib/fixtures/package-scan/snyk-lodash.json +30 -0
- package/deliver-great-systems/bin/lib/fixtures/package-scan/snyk-workspaces.json +55 -0
- package/deliver-great-systems/bin/lib/frontmatter.cjs +1 -1
- package/deliver-great-systems/bin/lib/governance.cjs +211 -0
- package/deliver-great-systems/bin/lib/governance.test.cjs +339 -0
- package/deliver-great-systems/bin/lib/health-untracked-phase.test.cjs +269 -0
- package/deliver-great-systems/bin/lib/init.cjs +107 -37
- package/deliver-great-systems/bin/lib/init.test.cjs +212 -5
- package/deliver-great-systems/bin/lib/jobs.cjs +7 -4
- package/deliver-great-systems/bin/lib/milestone.cjs +101 -3
- package/deliver-great-systems/bin/lib/milestone.test.cjs +203 -0
- package/deliver-great-systems/bin/lib/package-adapters.cjs +530 -0
- package/deliver-great-systems/bin/lib/package-adapters.test.cjs +618 -0
- package/deliver-great-systems/bin/lib/package-ecosystems.cjs +350 -0
- package/deliver-great-systems/bin/lib/package-ecosystems.test.cjs +348 -0
- package/deliver-great-systems/bin/lib/package-runner.cjs +199 -0
- package/deliver-great-systems/bin/lib/package-runner.test.cjs +198 -0
- package/deliver-great-systems/bin/lib/package-scan-provenance.cjs +56 -0
- package/deliver-great-systems/bin/lib/package-scan-provenance.test.cjs +103 -0
- package/deliver-great-systems/bin/lib/package-scan-report.cjs +1140 -0
- package/deliver-great-systems/bin/lib/package-scan-report.test.cjs +1963 -0
- package/deliver-great-systems/bin/lib/package-scan-skill.cjs +96 -0
- package/deliver-great-systems/bin/lib/package-scan-skill.test.cjs +136 -0
- package/deliver-great-systems/bin/lib/package-scan.cjs +919 -0
- package/deliver-great-systems/bin/lib/package-scan.test.cjs +2147 -0
- package/deliver-great-systems/bin/lib/phase.cjs +18 -1
- package/deliver-great-systems/bin/lib/plan-number-validity.test.cjs +48 -0
- package/deliver-great-systems/bin/lib/projects.cjs +38 -3
- package/deliver-great-systems/bin/lib/projects.test.cjs +112 -2
- package/deliver-great-systems/bin/lib/quick.cjs +178 -23
- package/deliver-great-systems/bin/lib/quick.test.cjs +138 -4
- package/deliver-great-systems/bin/lib/repos.cjs +12 -12
- package/deliver-great-systems/bin/lib/review.cjs +1821 -0
- package/deliver-great-systems/bin/lib/state.cjs +7 -3
- package/deliver-great-systems/bin/lib/summary-frontmatter.cjs +54 -0
- package/deliver-great-systems/bin/lib/summary-frontmatter.test.cjs +78 -0
- package/deliver-great-systems/bin/lib/sweep-scope.test.cjs +263 -0
- package/deliver-great-systems/bin/lib/sync.cjs +2 -6
- package/deliver-great-systems/bin/lib/verify.cjs +120 -7
- package/deliver-great-systems/bin/lib/verify.test.cjs +82 -0
- package/deliver-great-systems/bin/lib/wave-0-template-rename.test.cjs +40 -0
- package/deliver-great-systems/bin/lib/worktrees.cjs +27 -1
- package/deliver-great-systems/bin/lib/worktrees.test.cjs +76 -0
- package/deliver-great-systems/references/agent-step-reliability.md +60 -0
- package/deliver-great-systems/references/conflict-resolution.md +4 -0
- package/deliver-great-systems/references/context-tiers.md +4 -0
- package/deliver-great-systems/references/package-scan-config.md +151 -0
- package/deliver-great-systems/references/questioning.md +0 -30
- package/deliver-great-systems/references/spec-review-loop.md +1 -2
- package/deliver-great-systems/references/workflow-conventions.md +29 -0
- package/deliver-great-systems/skills/dgs-tests/package-scan.md +44 -0
- package/deliver-great-systems/templates/REVIEW.md +35 -0
- package/deliver-great-systems/templates/VALIDATION.md +1 -1
- package/deliver-great-systems/templates/claude-md.md +11 -0
- package/deliver-great-systems/templates/package-scan-report.md +108 -0
- package/deliver-great-systems/templates/project.md +6 -170
- package/deliver-great-systems/templates/summary.md +3 -1
- package/deliver-great-systems/workflows/add-phase.md +5 -0
- package/deliver-great-systems/workflows/audit-milestone.md +66 -10
- package/deliver-great-systems/workflows/cancel-job.md +1 -1
- package/deliver-great-systems/workflows/codereview.md +103 -9
- package/deliver-great-systems/workflows/complete-milestone.md +26 -7
- package/deliver-great-systems/workflows/complete-quick.md +40 -2
- package/deliver-great-systems/workflows/discuss-phase.md +3 -2
- package/deliver-great-systems/workflows/execute-phase.md +89 -2
- package/deliver-great-systems/workflows/execute-plan.md +10 -1
- package/deliver-great-systems/workflows/help.md +51 -18
- package/deliver-great-systems/workflows/import-spec.md +65 -7
- package/deliver-great-systems/workflows/init-product.md +46 -152
- package/deliver-great-systems/workflows/new-milestone.md +115 -14
- package/deliver-great-systems/workflows/new-project.md +60 -331
- package/deliver-great-systems/workflows/package-scan.md +59 -0
- package/deliver-great-systems/workflows/plan-phase.md +79 -1
- package/deliver-great-systems/workflows/quick-complete.md +40 -2
- package/deliver-great-systems/workflows/quick.md +183 -10
- package/deliver-great-systems/workflows/research-idea.md +80 -142
- package/deliver-great-systems/workflows/run-job.md +21 -35
- package/deliver-great-systems/workflows/settings.md +13 -77
- package/deliver-great-systems/workflows/write-spec.md +9 -11
- package/hooks/dist/dgs-enforce-discipline.js +196 -0
- package/package.json +1 -1
- package/scripts/build-hooks.js +1 -0
|
@@ -9,7 +9,10 @@ Multi-agent code review that runs 3 passes of 3 parallel agents each (9 total re
|
|
|
9
9
|
- PLAN: plan number
|
|
10
10
|
- PLAN_PATH: path to the PLAN.md file
|
|
11
11
|
- PHASE_DIR: phase directory path
|
|
12
|
+
- CODE_REPO_PATH: absolute path to the code repo where task commits live. All git commands in this workflow MUST run against this repo via `git -C "${CODE_REPO_PATH}"`, because the spawned subagent inherits the orchestrator's cwd (the planning repo), not the code repo.
|
|
12
13
|
- DIFF_REF: git ref range for the code diff (from first task commit to HEAD)
|
|
14
|
+
- PROJECT_ROOT: project root directory path (e.g., projects/gsd). Passed by execute-phase. Used to resolve project-scoped context files.
|
|
15
|
+
- PLANNING_ROOT: planning root directory path (git repo root). Passed by execute-phase. Used as fallback for product-level context files.
|
|
13
16
|
</inputs>
|
|
14
17
|
|
|
15
18
|
<process>
|
|
@@ -18,7 +21,7 @@ Multi-agent code review that runs 3 passes of 3 parallel agents each (9 total re
|
|
|
18
21
|
Compute the diff from the plan's task commits.
|
|
19
22
|
|
|
20
23
|
```bash
|
|
21
|
-
FIRST_TASK_COMMIT=$(git log --oneline --grep="feat(${PHASE}-${PLAN}):" --grep="fix(${PHASE}-${PLAN}):" --grep="test(${PHASE}-${PLAN}):" --grep="refactor(${PHASE}-${PLAN}):" --reverse | head -1 | cut -d' ' -f1)
|
|
24
|
+
FIRST_TASK_COMMIT=$(git -C "${CODE_REPO_PATH}" log --oneline --grep="feat(${PHASE}-${PLAN}):" --grep="fix(${PHASE}-${PLAN}):" --grep="test(${PHASE}-${PLAN}):" --grep="refactor(${PHASE}-${PLAN}):" --reverse | head -1 | cut -d' ' -f1)
|
|
22
25
|
```
|
|
23
26
|
|
|
24
27
|
If FIRST_TASK_COMMIT is empty, exit with message: "No task commits found for ${PHASE}-${PLAN}, skipping code review."
|
|
@@ -26,13 +29,13 @@ If FIRST_TASK_COMMIT is empty, exit with message: "No task commits found for ${P
|
|
|
26
29
|
Otherwise, compute the full diff:
|
|
27
30
|
|
|
28
31
|
```bash
|
|
29
|
-
REVIEW_DIFF=$(git diff ${FIRST_TASK_COMMIT}^..HEAD)
|
|
32
|
+
REVIEW_DIFF=$(git -C "${CODE_REPO_PATH}" diff ${FIRST_TASK_COMMIT}^..HEAD)
|
|
30
33
|
```
|
|
31
34
|
|
|
32
35
|
Store REVIEW_DIFF for use by all review agents. Also store the file list:
|
|
33
36
|
|
|
34
37
|
```bash
|
|
35
|
-
CHANGED_FILES=$(git diff --name-only ${FIRST_TASK_COMMIT}^..HEAD)
|
|
38
|
+
CHANGED_FILES=$(git -C "${CODE_REPO_PATH}" diff --name-only ${FIRST_TASK_COMMIT}^..HEAD)
|
|
36
39
|
```
|
|
37
40
|
|
|
38
41
|
Display:
|
|
@@ -43,11 +46,77 @@ Reviewing ${PHASE}-${PLAN} changes:
|
|
|
43
46
|
```
|
|
44
47
|
</step>
|
|
45
48
|
|
|
49
|
+
<step name="load_context">
|
|
50
|
+
Load project context files for domain-specific review. These files provide architecture rules, coding conventions, and design principles that the review agents use to catch project-specific violations alongside generic code quality issues.
|
|
51
|
+
|
|
52
|
+
If PROJECT_ROOT is empty or not provided, skip the entire step silently (backward compatibility for codereview spawned without PROJECT_ROOT).
|
|
53
|
+
|
|
54
|
+
**Context files (in truncation priority order -- first truncated = least valuable):**
|
|
55
|
+
1. `codebase/ARCHITECTURE.md` -- auto-generated codebase structure overview
|
|
56
|
+
2. `codebase/CONVENTIONS.md` -- auto-generated naming/import/error handling patterns
|
|
57
|
+
3. `docs/product/ARCHITECTURE.md` -- hand-written target architecture and domain rules
|
|
58
|
+
4. `docs/product/DESIGN-PRINCIPLES.md` -- hand-written design principles and lessons learned
|
|
59
|
+
|
|
60
|
+
**Path resolution (dual-path fallback):**
|
|
61
|
+
For each file, try two paths in order:
|
|
62
|
+
1. `${PROJECT_ROOT}/<file>` (v2 project-scoped path)
|
|
63
|
+
2. `${PLANNING_ROOT}/<file>` (v1 product-level / synthesized fallback)
|
|
64
|
+
|
|
65
|
+
Use the Read tool to load each file. If Read returns an error (file not found), silently skip that file. Do NOT error or warn for individual missing files.
|
|
66
|
+
|
|
67
|
+
**Build PROJECT_CONTEXT:**
|
|
68
|
+
For each successfully loaded file, prepend a header line:
|
|
69
|
+
```
|
|
70
|
+
--- {filename} ({byte_count} bytes) ---
|
|
71
|
+
{file_content}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Concatenate all loaded file contents into a single `PROJECT_CONTEXT` variable.
|
|
75
|
+
|
|
76
|
+
**Size guard:**
|
|
77
|
+
After loading all files, measure total byte length of PROJECT_CONTEXT.
|
|
78
|
+
|
|
79
|
+
If total exceeds 51200 bytes (~50KB):
|
|
80
|
+
- Truncate files in priority order (ARCHITECTURE.md from codebase/ first, then CONVENTIONS.md from codebase/, then docs/product/ARCHITECTURE.md, then docs/product/DESIGN-PRINCIPLES.md last)
|
|
81
|
+
- For each truncated file, cut to fit within the remaining budget and append: `\n[Truncated from {original_bytes} bytes to {truncated_bytes} bytes]`
|
|
82
|
+
- After truncation, log a warning:
|
|
83
|
+
```
|
|
84
|
+
⚠ Project context truncated to ~50KB:
|
|
85
|
+
{filename}: truncated from {original} to {truncated} bytes
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Logging:**
|
|
89
|
+
Display which context files were loaded:
|
|
90
|
+
|
|
91
|
+
When at least one file found:
|
|
92
|
+
```
|
|
93
|
+
Project context loaded:
|
|
94
|
+
codebase/ARCHITECTURE.md: {N} bytes
|
|
95
|
+
codebase/CONVENTIONS.md: {N} bytes (or "not found")
|
|
96
|
+
docs/product/ARCHITECTURE.md: {N} bytes (or "not found")
|
|
97
|
+
docs/product/DESIGN-PRINCIPLES.md: {N} bytes (or "not found")
|
|
98
|
+
Total: {N} bytes
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
When no files found:
|
|
102
|
+
```
|
|
103
|
+
Project context: no context files found (skipped)
|
|
104
|
+
```
|
|
105
|
+
</step>
|
|
106
|
+
|
|
46
107
|
<step name="pass_1_foundational">
|
|
47
108
|
**Pass 1: Foundational Review** -- Spawn 3 parallel Task() subagents.
|
|
48
109
|
|
|
49
110
|
Each agent receives REVIEW_DIFF and CHANGED_FILES as input context.
|
|
50
111
|
|
|
112
|
+
If PROJECT_CONTEXT is non-empty, also provide it to each agent wrapped in tags:
|
|
113
|
+
|
|
114
|
+
<project_context>
|
|
115
|
+
{PROJECT_CONTEXT}
|
|
116
|
+
</project_context>
|
|
117
|
+
|
|
118
|
+
If PROJECT_CONTEXT is empty (no context files found), omit the <project_context> block entirely -- agents receive the same prompt as before this feature was added.
|
|
119
|
+
|
|
51
120
|
**Agent 1A: Correctness and Security**
|
|
52
121
|
|
|
53
122
|
Review REVIEW_DIFF for:
|
|
@@ -57,6 +126,7 @@ Review REVIEW_DIFF for:
|
|
|
57
126
|
- Auth bypass, missing authorization checks
|
|
58
127
|
- Secret exposure (hardcoded keys, tokens, passwords)
|
|
59
128
|
- Race conditions, deadlocks
|
|
129
|
+
- Violations of domain-specific rules from PROJECT_CONTEXT (if provided): architecture constraints, module boundary contracts, security policies declared in project docs
|
|
60
130
|
- Memory leaks, resource cleanup
|
|
61
131
|
|
|
62
132
|
Output: Structured findings list with fields:
|
|
@@ -81,7 +151,7 @@ Review REVIEW_DIFF against the plan's `<context>` file patterns for:
|
|
|
81
151
|
- Type safety (any usage, missing types, loose generics)
|
|
82
152
|
- Consistency with existing codebase patterns
|
|
83
153
|
|
|
84
|
-
|
|
154
|
+
Reference the project conventions and patterns from PROJECT_CONTEXT (if provided) when evaluating naming, import patterns, error handling, and code organization. Flag deviations from the project's established conventions documented in PROJECT_CONTEXT.
|
|
85
155
|
|
|
86
156
|
Output: Structured findings list with fields:
|
|
87
157
|
- id: "1B-{N}"
|
|
@@ -113,6 +183,14 @@ Output: Structured findings list with fields:
|
|
|
113
183
|
|
|
114
184
|
Each agent receives REVIEW_DIFF, CHANGED_FILES, and all Pass 1 findings as input context.
|
|
115
185
|
|
|
186
|
+
If PROJECT_CONTEXT is non-empty, also provide it to each agent wrapped in tags:
|
|
187
|
+
|
|
188
|
+
<project_context>
|
|
189
|
+
{PROJECT_CONTEXT}
|
|
190
|
+
</project_context>
|
|
191
|
+
|
|
192
|
+
If PROJECT_CONTEXT is empty (no context files found), omit the <project_context> block entirely -- agents receive the same prompt as before this feature was added.
|
|
193
|
+
|
|
116
194
|
**Agent 2A: Fix Verification**
|
|
117
195
|
|
|
118
196
|
For each auto-fixable finding from Pass 1 (severity medium or low with a clear fix), propose a concrete code change.
|
|
@@ -174,6 +252,14 @@ Output: Structured findings list with fields:
|
|
|
174
252
|
|
|
175
253
|
Each agent receives REVIEW_DIFF, CHANGED_FILES, and all findings from Pass 1 and Pass 2 as input context.
|
|
176
254
|
|
|
255
|
+
If PROJECT_CONTEXT is non-empty, also provide it to each agent wrapped in tags:
|
|
256
|
+
|
|
257
|
+
<project_context>
|
|
258
|
+
{PROJECT_CONTEXT}
|
|
259
|
+
</project_context>
|
|
260
|
+
|
|
261
|
+
If PROJECT_CONTEXT is empty (no context files found), omit the <project_context> block entirely -- agents receive the same prompt as before this feature was added.
|
|
262
|
+
|
|
177
263
|
**Agent 3A: Fresh Eyes**
|
|
178
264
|
|
|
179
265
|
Re-read REVIEW_DIFF without bias from prior findings. Identify anything missed by the previous 6 agents. Focus on:
|
|
@@ -181,6 +267,7 @@ Re-read REVIEW_DIFF without bias from prior findings. Identify anything missed b
|
|
|
181
267
|
- Edge cases in business logic
|
|
182
268
|
- Assumptions that may not hold in production
|
|
183
269
|
- Missing error messages or unhelpful error messages
|
|
270
|
+
- Violations of design principles stated in PROJECT_CONTEXT (if provided) that previous agents may have missed — compare implementation choices against documented principles and architectural decisions
|
|
184
271
|
|
|
185
272
|
Output: Net-new findings only (deduplicated against all prior findings). Use fields:
|
|
186
273
|
- id: "3A-{N}"
|
|
@@ -367,8 +454,8 @@ Take the proposed fixes from Agent 2A.
|
|
|
367
454
|
4. Stage all successful fixes and commit:
|
|
368
455
|
|
|
369
456
|
```bash
|
|
370
|
-
git add [fixed files]
|
|
371
|
-
git commit -m "fix(${PHASE}-${PLAN}): codereview auto-fixes
|
|
457
|
+
git -C "${CODE_REPO_PATH}" add [fixed files]
|
|
458
|
+
git -C "${CODE_REPO_PATH}" commit -m "fix(${PHASE}-${PLAN}): codereview auto-fixes
|
|
372
459
|
|
|
373
460
|
- [list each fix applied, one per bullet]
|
|
374
461
|
|
|
@@ -409,15 +496,22 @@ No fixes qualified for auto-application (all findings were critical/high severit
|
|
|
409
496
|
|
|
410
497
|
Update the frontmatter: set `stats.auto_fixed` to `{FIXES_APPLIED}`.
|
|
411
498
|
|
|
412
|
-
|
|
499
|
+
**Do NOT include CODEREVIEW.md in the auto-fix commit.** CODEREVIEW.md lives in the planning repo under `${PHASE_DIR}`, while the auto-fix commit lives in the code repo. `git -C "${CODE_REPO_PATH}" add ${CODEREVIEW_PATH}` would fail because `${CODEREVIEW_PATH}` is not inside `${CODE_REPO_PATH}`. CODEREVIEW.md will be picked up by the amend-metadata-commit at the bottom of the execute-phase codereview gate (which commits it in the planning repo).
|
|
500
|
+
|
|
501
|
+
For the auto-fix commit, stage only the code-repo files:
|
|
413
502
|
|
|
414
|
-
Change the existing `git add [fixed files]` to also include CODEREVIEW.md:
|
|
415
503
|
```bash
|
|
416
|
-
git add [fixed files]
|
|
504
|
+
git -C "${CODE_REPO_PATH}" add [fixed files]
|
|
505
|
+
git -C "${CODE_REPO_PATH}" commit -m "fix(${PHASE}-${PLAN}): codereview auto-fixes
|
|
506
|
+
|
|
507
|
+
- [list each fix applied, one per bullet]
|
|
508
|
+
|
|
509
|
+
Co-Authored-By: Claude Code Review <noreply@anthropic.com>"
|
|
417
510
|
```
|
|
418
511
|
|
|
419
512
|
If no auto-fixes were applied (commit skipped), commit CODEREVIEW.md alone:
|
|
420
513
|
```bash
|
|
514
|
+
# CODEREVIEW.md lives in the planning repo under ${PHASE_DIR}. This commit intentionally runs in the inherited (planning) cwd — do NOT use git -C "${CODE_REPO_PATH}" here.
|
|
421
515
|
git add ${CODEREVIEW_PATH}
|
|
422
516
|
git commit -m "docs(${PHASE}-${PLAN}): codereview report
|
|
423
517
|
|
|
@@ -140,6 +140,24 @@ MUST present 3 options:
|
|
|
140
140
|
|
|
141
141
|
If user selects "Proceed anyway": note incomplete requirements in MILESTONES.md under `### Known Gaps` with REQ-IDs and descriptions.
|
|
142
142
|
|
|
143
|
+
**REVIEW.md existence check:**
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
REVIEW_PATH="${project_root}/../milestones/${milestone_version}-REVIEW.md"
|
|
147
|
+
if [ ! -f "$REVIEW_PATH" ]; then
|
|
148
|
+
# Also check archive directory
|
|
149
|
+
REVIEW_PATH="${archive_dir}/${milestone_version}-REVIEW.md"
|
|
150
|
+
fi
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
If REVIEW.md does not exist at either path:
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
Warning: REVIEW.md not found — run `dgs-tools jobs generate-review` before sharing with reviewers
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
This is a warning only — REVIEW.md absence does NOT block milestone completion. The report is supplementary context for four-eyes reviewers and can be generated after completion if needed.
|
|
160
|
+
|
|
143
161
|
<config-check>
|
|
144
162
|
|
|
145
163
|
```bash
|
|
@@ -603,7 +621,7 @@ Update `${roadmap_path}` — group completed milestone phases:
|
|
|
603
621
|
**Delegate archival to dgs-tools:**
|
|
604
622
|
|
|
605
623
|
```bash
|
|
606
|
-
ARCHIVE=$(node "$HOME/.claude/deliver-great-systems/bin/dgs-tools.cjs" milestone complete "v[X.Y]" --name "[Milestone Name]")
|
|
624
|
+
ARCHIVE=$(node "$HOME/.claude/deliver-great-systems/bin/dgs-tools.cjs" milestone complete "v[X.Y]" --name "[Milestone Name]" --archive-phases)
|
|
607
625
|
```
|
|
608
626
|
|
|
609
627
|
The CLI handles:
|
|
@@ -613,20 +631,21 @@ The CLI handles:
|
|
|
613
631
|
- Moving audit file to milestones if it exists
|
|
614
632
|
- Creating/appending MILESTONES.md entry with accomplishments from SUMMARY.md files
|
|
615
633
|
- Updating STATE.md (status, last activity)
|
|
634
|
+
- Moving milestone phase directories to `milestones/v[X.Y]-phases/` (planning root)
|
|
635
|
+
- Moving completed quick task directories to `milestones/v[X.Y]-quick/` (those with SUMMARY.md)
|
|
616
636
|
|
|
617
637
|
Extract from result: `version`, `date`, `phases`, `plans`, `tasks`, `accomplishments`, `archived`.
|
|
618
638
|
|
|
619
639
|
Verify: `✅ Milestone archived to milestones/`
|
|
620
640
|
|
|
621
|
-
|
|
641
|
+
Verify `archived.phases` is `true` in the result. If false, error: "Phase archival failed — check ${phases_dir} and milestones/ directory."
|
|
622
642
|
|
|
623
|
-
```bash
|
|
624
|
-
mkdir -p milestones/v[X.Y]-phases
|
|
625
|
-
# For each phase directory in ${phases_dir}/:
|
|
626
|
-
mv ${phases_dir}/{phase-dir} milestones/v[X.Y]-phases/
|
|
627
|
-
```
|
|
628
643
|
Verify: `✅ Phase directories archived to milestones/v[X.Y]-phases/`
|
|
629
644
|
|
|
645
|
+
Verify `archived.quick` is `true` in the result if completed quick tasks existed. If false but quick dirs were expected, warn: "Quick archival returned false -- check projects/{project}/quick/ directory."
|
|
646
|
+
|
|
647
|
+
Verify: `completed quick directories archived to milestones/v[X.Y]-quick/`
|
|
648
|
+
|
|
630
649
|
After archival, the AI still handles:
|
|
631
650
|
- Reorganizing ROADMAP.md with milestone grouping (requires judgment)
|
|
632
651
|
- Full PROJECT.md evolution review (requires understanding)
|
|
@@ -8,7 +8,44 @@ This workflow is only valid for product-level quicks. If the user is working in
|
|
|
8
8
|
|
|
9
9
|
<process>
|
|
10
10
|
|
|
11
|
-
**Step 1:
|
|
11
|
+
**Step 1: Generate inline review summary**
|
|
12
|
+
|
|
13
|
+
Before rebase-and-merge, generate a review report while the quick branch still exists with original commits.
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
REVIEW_RESULT=$(node "$HOME/.claude/deliver-great-systems/bin/dgs-tools.cjs" quick generate-review --raw 2>&1)
|
|
17
|
+
REVIEW_EXIT=$?
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**If generation succeeds** (`REVIEW_EXIT` is 0):
|
|
21
|
+
|
|
22
|
+
Parse JSON output for the summary:
|
|
23
|
+
```bash
|
|
24
|
+
REVIEW_PATH=$(echo "$REVIEW_RESULT" | jq -r '.relativePath // empty')
|
|
25
|
+
REVIEW_COMMITS=$(echo "$REVIEW_RESULT" | jq -r '.stats.commits // 0')
|
|
26
|
+
REVIEW_FILES=$(echo "$REVIEW_RESULT" | jq -r '.stats.filesChanged // 0')
|
|
27
|
+
REVIEW_RISKS=$(echo "$REVIEW_RESULT" | jq -r '.stats.riskFlags // 0')
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Display the stats banner:
|
|
31
|
+
```
|
|
32
|
+
Review: ${REVIEW_PATH} (${REVIEW_COMMITS} commits, ${REVIEW_FILES} files${REVIEW_RISKS > 0 ? ", ${REVIEW_RISKS} risk flags" : ""})
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**If fast-forward detected** (output contains `"fastForward": true`):
|
|
36
|
+
|
|
37
|
+
Display: `No code changes detected -- review not generated.`
|
|
38
|
+
|
|
39
|
+
**If generation fails** (`REVIEW_EXIT` is non-zero):
|
|
40
|
+
|
|
41
|
+
Log warning and continue -- do NOT block task completion:
|
|
42
|
+
```
|
|
43
|
+
Warning: Review generation failed. Continuing with completion.
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Review generation failure is non-fatal. The quick task will still complete normally.
|
|
47
|
+
|
|
48
|
+
**Step 2: Validate and execute complete-quick**
|
|
12
49
|
|
|
13
50
|
Call the complete-quick CLI command which validates the active quick and executes the full flow:
|
|
14
51
|
|
|
@@ -43,7 +80,7 @@ After resolving conflicts manually, re-run:
|
|
|
43
80
|
```
|
|
44
81
|
End workflow.
|
|
45
82
|
|
|
46
|
-
**Step
|
|
83
|
+
**Step 3: Display success**
|
|
47
84
|
|
|
48
85
|
Parse JSON result from RESULT.
|
|
49
86
|
|
|
@@ -59,6 +96,7 @@ Worktree cleaned up. Pushed to origin.
|
|
|
59
96
|
</process>
|
|
60
97
|
|
|
61
98
|
<success_criteria>
|
|
99
|
+
- [ ] Review summary generated before rebase-and-merge (or warning logged on failure)
|
|
62
100
|
- [ ] Active product-level quick validated
|
|
63
101
|
- [ ] Rebase-before-merge flow executed via rebaseAndMerge()
|
|
64
102
|
- [ ] Worktree and branch cleaned up
|
|
@@ -183,7 +183,8 @@ Read prior phase context to avoid re-asking decided questions and maintain consi
|
|
|
183
183
|
**Step 1: Project-level files**
|
|
184
184
|
|
|
185
185
|
Project-level files (PROJECT.md, REQUIREMENTS.md, STATE.md, ROADMAP.md, REPOS.md, and codebase docs) are already loaded via the planning-tier `load-tier` call in the initialize step. Extract from those:
|
|
186
|
-
- **
|
|
186
|
+
- **docs/product/PRODUCT-SUMMARY.md** — Vision, principles, non-negotiables (product-level)
|
|
187
|
+
- **PROJECT.md** — Project identity (thin skeleton: name + one-liner)
|
|
187
188
|
- **REQUIREMENTS.md** — Acceptance criteria, constraints, must-haves vs nice-to-haves
|
|
188
189
|
- **STATE.md** — Current progress, any flags or session notes
|
|
189
190
|
|
|
@@ -204,7 +205,7 @@ Structure the extracted information:
|
|
|
204
205
|
```
|
|
205
206
|
<prior_decisions>
|
|
206
207
|
## Project-Level
|
|
207
|
-
- [Key principle or constraint from
|
|
208
|
+
- [Key principle or constraint from docs/product/PRODUCT-SUMMARY.md]
|
|
208
209
|
- [Requirement that affects this phase from REQUIREMENTS.md]
|
|
209
210
|
|
|
210
211
|
## From Prior Phases
|
|
@@ -290,7 +290,34 @@ Execute each wave in sequence. Within a wave: parallel if `PARALLELIZATION=true`
|
|
|
290
290
|
- Bad: "Executing terrain generation plan"
|
|
291
291
|
- Good: "Procedural terrain generator using Perlin noise — creates height maps, biome zones, and collision meshes. Required before vehicle physics can interact with ground."
|
|
292
292
|
|
|
293
|
-
2. **
|
|
293
|
+
2. **Execute plans for this wave:**
|
|
294
|
+
|
|
295
|
+
**If `NON_INTERACTIVE` is true (job mode — inline execution):**
|
|
296
|
+
|
|
297
|
+
The Task tool is not available in nested Task contexts (run-job spawns execute-phase, which would otherwise spawn dgs-executor — Claude Code structural limitation). Run plans inline within the current orchestrator context instead.
|
|
298
|
+
|
|
299
|
+
For each plan in the wave, **in document order** (plans within a wave still execute in the order they appear in the wave's plan list — even if `parallelization` is true, inline mode runs them sequentially because there is no parallel-Task harness):
|
|
300
|
+
|
|
301
|
+
a. Read `~/.claude/deliver-great-systems/workflows/execute-plan.md` and follow its steps inline for this plan, supplying:
|
|
302
|
+
- The plan path: `{phase_dir}/{plan_id}-PLAN.md`
|
|
303
|
+
- The state path: ${state_path} (resolved by init)
|
|
304
|
+
- The phase context file (if present): `{phase_dir}/{padded_phase}-CONTEXT.md`
|
|
305
|
+
- Project conventions: `./CLAUDE.md` (if exists) and `.claude/skills/` or `.agents/skills/` (if either exists)
|
|
306
|
+
- Tier files from $TIER_FILES (computed in initialize step)
|
|
307
|
+
- Author: ${author}
|
|
308
|
+
- Worktree context: when $WORKTREE_REPOS is non-empty, treat the worktree directories as the repo cwds for all task commits and file operations (do NOT use the main checkout paths).
|
|
309
|
+
|
|
310
|
+
b. Treat segmented plans (Pattern B in execute-plan.md `parse_segments`) as Pattern C / main-context for inline mode — i.e. execute every task in the orchestrator's current context. Do NOT spawn nested Tasks. Checkpoint tasks (`type="checkpoint:*"`) are auto-resolved per the `checkpoint_handling` step's `NON_INTERACTIVE`-true rules (human-verify → auto-approve, decision → first option, human-action → FAIL the step).
|
|
311
|
+
|
|
312
|
+
c. Preserve all execute-plan semantics: atomic per-task commits via `dgs-tools.cjs commit`, deviation handling per `<deviation_rules>` (Rules 1–3 auto, Rule 4 logged as deviation since no user is available — record under "Deferred Issues" in SUMMARY.md), authentication gates (in job mode, treat any auth gate as a hard failure — log and halt the wave), and run all of: `record_start_time`, `parse_segments`, `load_prompt`, `preflight_check`, `execute`, `record_completion_time`, `generate_user_setup`, `create_summary`, `update_current_position`, `extract_decisions_and_issues`, `update_session_continuity`, `issues_review_gate`, `finalize_plan`, `update_codebase_map`.
|
|
313
|
+
|
|
314
|
+
d. **Skip the `offer_next` step from execute-plan.md.** Wave/phase advancement is the responsibility of this `execute_waves` step in execute-phase.md, not the inline plan loop.
|
|
315
|
+
|
|
316
|
+
e. After each plan completes, run the same spot-checks defined in step 4 below (SUMMARY.md exists, git commits present, no `## Self-Check: FAILED` marker). If a plan fails the spot-check, log `[INLINE-EXEC] Plan {plan_id} failed spot-check -- halting wave` and halt the wave (do NOT continue to subsequent plans in the same wave).
|
|
317
|
+
|
|
318
|
+
f. After all plans in the wave complete successfully, fall through to step 4 (Report completion).
|
|
319
|
+
|
|
320
|
+
**If `NON_INTERACTIVE` is false (interactive mode — Task spawning):**
|
|
294
321
|
|
|
295
322
|
Pass paths only — executors read files themselves with their fresh 200k context.
|
|
296
323
|
This keeps orchestrator context lean (~10-15%).
|
|
@@ -387,6 +414,27 @@ Execute each wave in sequence. Within a wave: parallel if `PARALLELIZATION=true`
|
|
|
387
414
|
|
|
388
415
|
If `CODEREVIEW` is not `true`: skip silently, proceed to next step.
|
|
389
416
|
|
|
417
|
+
**Derive code repo path:**
|
|
418
|
+
|
|
419
|
+
The gate's git log and the spawned codereview subagent must run against the **code repo** (where task commits live), not the planning repo. Derive `CODE_REPO_PATH` from `$WORKTREE_REPOS` (populated in `handle_worktree`, step 3):
|
|
420
|
+
|
|
421
|
+
```bash
|
|
422
|
+
CODE_REPO_PATH=$(WORKTREE_REPOS="$WORKTREE_REPOS" node -e "
|
|
423
|
+
const repos = JSON.parse(process.env.WORKTREE_REPOS || '{}');
|
|
424
|
+
const names = Object.keys(repos);
|
|
425
|
+
if (names.length === 0) { process.stdout.write(''); }
|
|
426
|
+
else { process.stdout.write(repos[names[0]]); }
|
|
427
|
+
")
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
If `CODE_REPO_PATH` is empty (no milestone worktree registered — e.g. phase executed without a worktree), skip the codereview gate entirely for this wave with the message:
|
|
431
|
+
```
|
|
432
|
+
No code repo registered for this phase — skipping code review for wave.
|
|
433
|
+
```
|
|
434
|
+
and proceed to the next step.
|
|
435
|
+
|
|
436
|
+
**Multi-repo note:** when `WORKTREE_REPOS` has more than one entry, this uses the first entry. Multi-repo codereview is a known limitation (TODO: loop over entries once a real multi-repo project exists).
|
|
437
|
+
|
|
390
438
|
The codereview workflow is non-interactive by design — it auto-fixes low-risk issues and logs CRITICAL/HIGH findings as deviations to SUMMARY.md rather than prompting. It runs in both interactive and job modes.
|
|
391
439
|
|
|
392
440
|
For each plan that completed successfully in this wave:
|
|
@@ -402,7 +450,7 @@ Execute each wave in sequence. Within a wave: parallel if `PARALLELIZATION=true`
|
|
|
402
450
|
|
|
403
451
|
Compute diff reference for the plan's task commits:
|
|
404
452
|
```bash
|
|
405
|
-
FIRST_TASK_COMMIT=$(git log --oneline --grep="feat(${PHASE}-${PLAN}):" --grep="fix(${PHASE}-${PLAN}):" --grep="test(${PHASE}-${PLAN}):" --grep="refactor(${PHASE}-${PLAN}):" --reverse | head -1 | cut -d' ' -f1)
|
|
453
|
+
FIRST_TASK_COMMIT=$(git -C "${CODE_REPO_PATH}" log --oneline --grep="feat(${PHASE}-${PLAN}):" --grep="fix(${PHASE}-${PLAN}):" --grep="test(${PHASE}-${PLAN}):" --grep="refactor(${PHASE}-${PLAN}):" --reverse | head -1 | cut -d' ' -f1)
|
|
406
454
|
```
|
|
407
455
|
|
|
408
456
|
If FIRST_TASK_COMMIT is empty (no task commits found), skip codereview for this plan with message: "No task commits found for {phase}-{plan}, skipping code review."
|
|
@@ -419,7 +467,10 @@ Execute each wave in sequence. Within a wave: parallel if `PARALLELIZATION=true`
|
|
|
419
467
|
- PLAN: ${PLAN}
|
|
420
468
|
- PLAN_PATH: ${phase_dir}/{phase}-{plan}-PLAN.md
|
|
421
469
|
- PHASE_DIR: ${phase_dir}
|
|
470
|
+
- CODE_REPO_PATH: ${CODE_REPO_PATH}
|
|
422
471
|
- DIFF_REF: ${FIRST_TASK_COMMIT}^..HEAD
|
|
472
|
+
- PROJECT_ROOT: ${project_root}
|
|
473
|
+
- PLANNING_ROOT: $(pwd)
|
|
423
474
|
",
|
|
424
475
|
model="{executor_model}"
|
|
425
476
|
)
|
|
@@ -579,6 +630,42 @@ node "$HOME/.claude/deliver-great-systems/bin/dgs-tools.cjs" commit "docs(phase-
|
|
|
579
630
|
<step name="verify_phase_goal">
|
|
580
631
|
Verify phase achieved its GOAL, not just completed tasks.
|
|
581
632
|
|
|
633
|
+
**If `NON_INTERACTIVE` is true (job mode — inline verification):**
|
|
634
|
+
|
|
635
|
+
The Task tool is not available in nested Task contexts (run-job → execute-phase → would otherwise spawn dgs-verifier). Perform verification inline within the current orchestrator context.
|
|
636
|
+
|
|
637
|
+
Inline verification procedure:
|
|
638
|
+
|
|
639
|
+
a. **Load phase context:**
|
|
640
|
+
- Phase goal: read from `${roadmap_path}` for phase `${PHASE_NUMBER}`.
|
|
641
|
+
- Phase requirement IDs: `${phase_req_ids}` (from init JSON).
|
|
642
|
+
- Phase directory: `${phase_dir}`.
|
|
643
|
+
|
|
644
|
+
b. **Read all plan SUMMARY.md files** in `${phase_dir}` matching `*-SUMMARY.md`. Cross-reference each SUMMARY's `requirements_completed` frontmatter against `${phase_req_ids}`. Every requirement ID listed in the phase MUST be accounted for in at least one SUMMARY.
|
|
645
|
+
|
|
646
|
+
c. **Read each PLAN.md** in `${phase_dir}` matching `*-PLAN.md` and extract the `must_haves` frontmatter (truths, artifacts, key_links).
|
|
647
|
+
|
|
648
|
+
d. **Check must_haves against the actual codebase:**
|
|
649
|
+
- For each artifact: confirm the file exists on disk (use $WORKTREE_REPOS to resolve repo paths when present; otherwise resolve via REPOS.md). If `min_lines` is specified, verify line count.
|
|
650
|
+
- For each key_link: grep the `from` file for the `pattern`. If pattern is missing, the link is unverified.
|
|
651
|
+
- For each truth: best-effort verification via grep / file existence; truths that require human UAT are marked `human_needed`.
|
|
652
|
+
|
|
653
|
+
e. **Cross-reference REQUIREMENTS.md:** every ID in `${phase_req_ids}` MUST appear in REQUIREMENTS.md with a status reflecting completion. Flag any ID missing from REQUIREMENTS.md as a gap.
|
|
654
|
+
|
|
655
|
+
f. **Determine status:**
|
|
656
|
+
- `passed` — all artifacts present, all key_links found, all truths automatically verified, all requirement IDs accounted for.
|
|
657
|
+
- `human_needed` — automated checks pass but ≥1 truth requires human UAT.
|
|
658
|
+
- `gaps_found` — ≥1 artifact missing, key_link unverified, requirement ID unaccounted for, or truth fails automated verification.
|
|
659
|
+
|
|
660
|
+
g. **Write `${phase_dir}/${PHASE_NUMBER}-VERIFICATION.md`** with frontmatter including `status:` (one of `passed` / `human_needed` / `gaps_found`), `phase:`, `verified_by: ${author}`, `verified_at: <ISO-8601 timestamp>`, and a `mode: inline` marker (so audits can distinguish inline from Task-based verification). Body sections: must-haves checklist (per plan), requirement-ID cross-check table, gaps list (if any), human_verification list (if status is `human_needed`).
|
|
661
|
+
|
|
662
|
+
h. Commit the VERIFICATION.md file:
|
|
663
|
+
```bash
|
|
664
|
+
node "$HOME/.claude/deliver-great-systems/bin/dgs-tools.cjs" commit "docs(phase-${PHASE_NUMBER}): inline verification" --files ${phase_dir}/${PHASE_NUMBER}-VERIFICATION.md
|
|
665
|
+
```
|
|
666
|
+
|
|
667
|
+
**If `NON_INTERACTIVE` is false (interactive mode — Task spawning):**
|
|
668
|
+
|
|
582
669
|
```
|
|
583
670
|
Task(
|
|
584
671
|
prompt="Verify phase {phase_number} goal achievement.
|
|
@@ -318,6 +318,15 @@ TASK_COMMIT=$(git rev-parse --short HEAD)
|
|
|
318
318
|
TASK_COMMITS+=("Task ${TASK_NUM}: ${TASK_COMMIT}")
|
|
319
319
|
```
|
|
320
320
|
|
|
321
|
+
**6. Post-commit dirty sweep:** After recording the task commit hash, run `git status --porcelain` in every gitCwd the task touched. Resolve gitCwds via the task's `<repos>` tag + REPOS.md (one `resolveRepoRelativePath(cwd, repoName, '.', repos).repoAbsPath` per distinct repo); if the task has no `<repos>` tag, the single gitCwd is the planning root (or the `repo-cwd` override when set). The `dirty_after` field in the commit JSON result from `dgs-tools.cjs commit` already surfaces the list for the repo the commit ran in.
|
|
322
|
+
|
|
323
|
+
Classify each dirty path:
|
|
324
|
+
|
|
325
|
+
- **SWEEP** (`*.tfvars`/`*.tf` fmt reflows, pure whitespace verified by `git diff -w -- <path>` being empty, type-only narrowings in `*.ts`/`*.tsx` confined to type-position tokens on existing declaration lines — type annotations, `as`-casts, generic params; NOT statement-structure keywords like `const`/`await`/`import`): stage and commit as `chore({phase}-{plan}-reflow): verify-step side effects` with one bullet per file. Log under "Post-verify reflows" in SUMMARY.md.
|
|
326
|
+
- **FAIL** (added/removed statements, new imports, new function bodies, or any logic change in files NOT listed in the plan's `files_modified` frontmatter): halt. Record under "Deferred Issues" with a `git diff` excerpt. Treat as a blocking issue and auto-fix per the existing fix-attempt-limit policy (3 attempts then document and continue).
|
|
327
|
+
|
|
328
|
+
Default to SWEEP — false negatives lose work.
|
|
329
|
+
|
|
321
330
|
</task_commit>
|
|
322
331
|
|
|
323
332
|
<step name="checkpoint_protocol">
|
|
@@ -392,7 +401,7 @@ If user_setup exists: create `{phase}-USER-SETUP.md` using template `~/.claude/d
|
|
|
392
401
|
<step name="create_summary">
|
|
393
402
|
Create `{phase}-{plan}-SUMMARY.md` at `${phase_dir}/`. Use `~/.claude/deliver-great-systems/templates/summary.md`.
|
|
394
403
|
|
|
395
|
-
**Frontmatter:** phase, plan, subsystem, tags | requires/provides/affects | tech-stack.added/patterns | key-files.created/modified | key-decisions |
|
|
404
|
+
**Frontmatter:** phase, plan, subsystem, tags | requires/provides/affects | tech-stack.added/patterns | key-files.created/modified | key-decisions | requirements_completed (**MUST** copy `requirements` array from PLAN.md frontmatter verbatim — pre-commit precondition `dgs-tools final-commit-precondition` aborts the executor on mismatch per REL-08) | duration ($DURATION), completed ($PLAN_END_TIME date).
|
|
396
405
|
|
|
397
406
|
Include `executed_by: ${author}` (from init JSON) in frontmatter — records who triggered this execution.
|
|
398
407
|
|
|
@@ -12,14 +12,14 @@ Display the complete DGS command reference. Output ONLY the reference content. D
|
|
|
12
12
|
## Quick Start
|
|
13
13
|
|
|
14
14
|
**Single-project (v1):**
|
|
15
|
-
1. `/dgs:new-project` - Create project (
|
|
15
|
+
1. `/dgs:new-project [<name>]` - Create project (thin skeleton)
|
|
16
16
|
2. `/dgs:new-milestone` - First milestone (research, requirements, roadmap)
|
|
17
17
|
3. `/dgs:plan-phase 1` - Create detailed plan for first phase
|
|
18
18
|
4. `/dgs:execute-phase 1` - Execute the phase
|
|
19
19
|
|
|
20
20
|
**Multi-project / multi-repo (v2):**
|
|
21
21
|
1. `/dgs:init-product` - Set up product folder and register repos
|
|
22
|
-
2. `/dgs:new-project` - Create a project (
|
|
22
|
+
2. `/dgs:new-project [<name>]` - Create a project (thin skeleton)
|
|
23
23
|
3. `/dgs:new-milestone` - First milestone (research, requirements, roadmap)
|
|
24
24
|
4. `/dgs:plan-phase 1` - Plan first phase (repos tracked per task)
|
|
25
25
|
5. `/dgs:execute-phase 1` - Execute (commits per-repo automatically)
|
|
@@ -73,22 +73,20 @@ Usage: `/dgs:init-product`
|
|
|
73
73
|
|
|
74
74
|
### Project Initialization
|
|
75
75
|
|
|
76
|
-
**`/dgs:new-project`**
|
|
77
|
-
Initialize new project
|
|
76
|
+
**`/dgs:new-project [<name>]`**
|
|
77
|
+
Initialize a new project as a thin skeleton. *(Tier 2: planning)*
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
- PROJECT.md creation with vision, requirements hypotheses, and key decisions
|
|
79
|
+
- Creates `projects/<slug>/PROJECT.md` with title + one-line placeholder
|
|
80
|
+
- Optional brownfield codebase mapping offer for existing code
|
|
81
|
+
- No deep questioning, no `--auto` flag
|
|
83
82
|
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
Projects are holders. Vision and principles live in `docs/product/PRODUCT-SUMMARY.md`
|
|
84
|
+
(loaded via Tier 1). Specs live at the milestone level.
|
|
86
85
|
|
|
87
|
-
**
|
|
86
|
+
**Next:** `/dgs:write-spec` to capture what you're building, then
|
|
87
|
+
`/dgs:new-milestone --auto <spec-id>` to start the first milestone.
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
Usage: `/dgs:new-project`
|
|
89
|
+
Usage: `/dgs:new-project [<name>]`
|
|
92
90
|
|
|
93
91
|
**`/dgs:map-codebase [<repo-name>]`**
|
|
94
92
|
Map registered repos with parallel agents to produce structured codebase documentation. *(Tier 2: planning)*
|
|
@@ -406,7 +404,7 @@ Usage: `/dgs:check-todos api`
|
|
|
406
404
|
|
|
407
405
|
### Ideas & Specs
|
|
408
406
|
|
|
409
|
-
`capture ideas → develop idea → write spec → new-project
|
|
407
|
+
`capture ideas → develop idea → write spec → new-project → new-milestone --auto`
|
|
410
408
|
|
|
411
409
|
#### Ideas
|
|
412
410
|
|
|
@@ -658,6 +656,41 @@ Create phases to close gaps identified by audit. *(Tier 2: planning)*
|
|
|
658
656
|
Usage: `/dgs:plan-milestone-gaps`
|
|
659
657
|
Usage: `/dgs:plan-milestone-gaps --auto` (non-interactive gap closure)
|
|
660
658
|
|
|
659
|
+
**`/dgs:diff-report [version|--quick slug] [--detailed]`**
|
|
660
|
+
Generate a diff report (REVIEW.md) on demand. *(Tier 4: verification)*
|
|
661
|
+
|
|
662
|
+
- Auto-detects context: active quick task or current milestone
|
|
663
|
+
- Explicit target: version for milestones, `--quick slug` for quick tasks
|
|
664
|
+
- `--detailed` flag invokes LLM-powered per-file analysis
|
|
665
|
+
- Delegates to existing CLI commands (`jobs generate-review` / `quick generate-review`)
|
|
666
|
+
|
|
667
|
+
Usage: `/dgs:diff-report`, `/dgs:diff-report v21.0`, `/dgs:diff-report --quick my-task --detailed`
|
|
668
|
+
|
|
669
|
+
### Testing & Dependency Scanning
|
|
670
|
+
|
|
671
|
+
**`/dgs:package-scan [flags]`**
|
|
672
|
+
Scan every registered repo + product root for dependency vulnerabilities and licence issues. *(Tier 0: none — no STATE.md/ROADMAP.md auto-inject)*
|
|
673
|
+
|
|
674
|
+
- **Tool cascade:** Snyk → OSV-Scanner → ecosystem-native (`npm audit`, `pip-audit`, `govulncheck`, `bundler-audit`)
|
|
675
|
+
- **Ecosystems:** Node.js, Python, Go, Ruby, Java (Maven; Gradle treated as single-module, PKG-41 deferred)
|
|
676
|
+
- **Monorepo-aware:** npm/pnpm/Yarn workspaces, Maven multi-module, Go workspaces
|
|
677
|
+
- **Report placement:** active phase dir → active milestone dir → timestamped project-root file
|
|
678
|
+
- **Findings in canonical shape** (forward-compatible with `/dgs:plan-test-gaps`)
|
|
679
|
+
|
|
680
|
+
**Flags:**
|
|
681
|
+
- `--threshold critical|high|medium|low` — filter by severity
|
|
682
|
+
- `--repo <name>` — scan a single registered repo
|
|
683
|
+
- `--json` — emit machine-readable JSON alongside the markdown report
|
|
684
|
+
- `--include-dev-deps` / `--no-include-dev-deps` — toggle devDependencies scanning
|
|
685
|
+
|
|
686
|
+
**Config keys:** `testing.packages.tool`, `testing.packages.severity_threshold`, `testing.packages.include_dev_dependencies`, `testing.packages.timeout_seconds` (all in `config.json`). `testing.packages.snyk_token` goes to `config.local.json` only.
|
|
687
|
+
|
|
688
|
+
**Reference doc:** `~/.claude/deliver-great-systems/references/package-scan-config.md` — tool installation steps, Snyk-auth priority, report placement cascade.
|
|
689
|
+
|
|
690
|
+
Usage: `/dgs:package-scan`
|
|
691
|
+
Usage: `/dgs:package-scan --threshold high --repo api`
|
|
692
|
+
Usage: `/dgs:package-scan --json` (pipe to jq, feed CI, etc.)
|
|
693
|
+
|
|
661
694
|
### Milestone Jobs
|
|
662
695
|
|
|
663
696
|
| Command | What it does | When to use |
|
|
@@ -866,7 +899,7 @@ Example config:
|
|
|
866
899
|
**Starting a new project (v1):**
|
|
867
900
|
|
|
868
901
|
```
|
|
869
|
-
/dgs:new-project #
|
|
902
|
+
/dgs:new-project # Thin skeleton PROJECT.md
|
|
870
903
|
/clear
|
|
871
904
|
/dgs:new-milestone # Research -> requirements -> roadmap
|
|
872
905
|
/clear
|
|
@@ -879,7 +912,7 @@ Example config:
|
|
|
879
912
|
|
|
880
913
|
```
|
|
881
914
|
/dgs:init-product # One-time: register repos, create product structure
|
|
882
|
-
/dgs:new-project #
|
|
915
|
+
/dgs:new-project # Thin skeleton PROJECT.md
|
|
883
916
|
/clear
|
|
884
917
|
/dgs:new-milestone # Research -> requirements -> roadmap
|
|
885
918
|
/clear
|
|
@@ -944,7 +977,7 @@ Example config:
|
|
|
944
977
|
# /dgs:research-idea # Investigate feasibility
|
|
945
978
|
/dgs:write-spec # Turn ideas into structured spec
|
|
946
979
|
/clear
|
|
947
|
-
/dgs:new-project
|
|
980
|
+
/dgs:new-project <name> # Create project holder
|
|
948
981
|
/clear
|
|
949
982
|
/dgs:new-milestone --auto <spec-id> # First milestone from spec
|
|
950
983
|
```
|