@bhargavvc/sdd-cc 1.30.1 → 1.35.0
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/README.ja-JP.md +144 -110
- package/README.ko-KR.md +143 -107
- package/README.md +183 -112
- package/README.pt-BR.md +90 -52
- package/README.zh-CN.md +141 -101
- package/agents/sdd-advisor-researcher.md +23 -0
- package/agents/sdd-ai-researcher.md +133 -0
- package/agents/sdd-code-fixer.md +516 -0
- package/agents/sdd-code-reviewer.md +355 -0
- package/agents/sdd-codebase-mapper.md +3 -3
- package/agents/sdd-debugger.md +17 -5
- package/agents/sdd-doc-verifier.md +201 -0
- package/agents/sdd-doc-writer.md +602 -0
- package/agents/sdd-domain-researcher.md +153 -0
- package/agents/sdd-eval-auditor.md +164 -0
- package/agents/sdd-eval-planner.md +154 -0
- package/agents/sdd-executor.md +87 -4
- package/agents/sdd-framework-selector.md +160 -0
- package/agents/sdd-intel-updater.md +314 -0
- package/agents/sdd-nyquist-auditor.md +1 -1
- package/agents/sdd-phase-researcher.md +71 -4
- package/agents/sdd-plan-checker.md +100 -6
- package/agents/sdd-planner.md +145 -206
- package/agents/sdd-project-researcher.md +25 -2
- package/agents/sdd-research-synthesizer.md +3 -3
- package/agents/sdd-roadmapper.md +6 -6
- package/agents/sdd-security-auditor.md +128 -0
- package/agents/sdd-ui-auditor.md +43 -3
- package/agents/sdd-ui-checker.md +5 -5
- package/agents/sdd-ui-researcher.md +27 -4
- package/agents/sdd-user-profiler.md +2 -2
- package/agents/sdd-verifier.md +142 -22
- package/bin/install.js +2145 -545
- package/commands/sdd/add-backlog.md +5 -5
- package/commands/sdd/add-tests.md +2 -2
- package/commands/sdd/ai-integration-phase.md +36 -0
- package/commands/sdd/analyze-dependencies.md +34 -0
- package/commands/sdd/audit-fix.md +33 -0
- package/commands/sdd/autonomous.md +7 -2
- package/commands/sdd/cleanup.md +5 -0
- package/commands/sdd/code-review-fix.md +52 -0
- package/commands/sdd/code-review.md +55 -0
- package/commands/sdd/complete-milestone.md +6 -6
- package/commands/sdd/debug.md +22 -9
- package/commands/sdd/discuss-phase.md +7 -2
- package/commands/sdd/do.md +1 -1
- package/commands/sdd/docs-update.md +48 -0
- package/commands/sdd/eval-review.md +32 -0
- package/commands/sdd/execute-phase.md +4 -0
- package/commands/sdd/explore.md +27 -0
- package/commands/sdd/fast.md +2 -2
- package/commands/sdd/from-sdd2.md +45 -0
- package/commands/sdd/help.md +2 -0
- package/commands/sdd/import.md +36 -0
- package/commands/sdd/intel.md +179 -0
- package/commands/sdd/join-discord.md +2 -1
- package/commands/sdd/manager.md +1 -0
- package/commands/sdd/map-codebase.md +3 -3
- package/commands/sdd/new-milestone.md +1 -1
- package/commands/sdd/new-project.md +5 -1
- package/commands/sdd/new-workspace.md +1 -1
- package/commands/sdd/next.md +2 -0
- package/commands/sdd/plan-milestone-gaps.md +2 -2
- package/commands/sdd/plan-phase.md +6 -1
- package/commands/sdd/plant-seed.md +1 -1
- package/commands/sdd/profile-user.md +1 -1
- package/commands/sdd/quick.md +5 -3
- package/commands/sdd/reapply-patches.md +230 -42
- package/commands/sdd/research-phase.md +3 -3
- package/commands/sdd/review-backlog.md +1 -0
- package/commands/sdd/review.md +6 -3
- package/commands/sdd/scan.md +26 -0
- package/commands/sdd/secure-phase.md +35 -0
- package/commands/sdd/ship.md +1 -1
- package/commands/sdd/thread.md +5 -5
- package/commands/sdd/undo.md +34 -0
- package/commands/sdd/verify-work.md +1 -1
- package/commands/sdd/workstreams.md +17 -11
- package/hooks/dist/sdd-check-update.js +33 -8
- package/hooks/dist/sdd-context-monitor.js +17 -8
- package/hooks/dist/sdd-phase-boundary.sh +27 -0
- package/hooks/dist/sdd-prompt-guard.js +1 -0
- package/hooks/dist/sdd-read-guard.js +82 -0
- package/hooks/dist/sdd-session-state.sh +33 -0
- package/hooks/dist/sdd-statusline.js +137 -15
- package/hooks/dist/sdd-validate-commit.sh +47 -0
- package/hooks/dist/sdd-workflow-guard.js +4 -4
- package/hooks/sdd-check-update.js +139 -0
- package/hooks/sdd-context-monitor.js +165 -0
- package/hooks/sdd-phase-boundary.sh +27 -0
- package/hooks/sdd-prompt-guard.js +97 -0
- package/hooks/sdd-read-guard.js +82 -0
- package/hooks/sdd-session-state.sh +33 -0
- package/hooks/sdd-statusline.js +241 -0
- package/hooks/sdd-validate-commit.sh +47 -0
- package/hooks/sdd-workflow-guard.js +94 -0
- package/package.json +3 -3
- package/scripts/build-hooks.js +18 -7
- package/scripts/prompt-injection-scan.sh +1 -0
- package/scripts/rebrand-gsd-to-sdd.sh +221 -220
- package/scripts/run-tests.cjs +5 -1
- package/scripts/sync-upstream.sh +1 -1
- package/sdd/bin/lib/commands.cjs +79 -17
- package/sdd/bin/lib/config.cjs +90 -48
- package/sdd/bin/lib/core.cjs +452 -87
- package/sdd/bin/lib/docs.cjs +267 -0
- package/sdd/bin/lib/frontmatter.cjs +381 -336
- package/sdd/bin/lib/init.cjs +110 -16
- package/sdd/bin/lib/intel.cjs +660 -0
- package/sdd/bin/lib/learnings.cjs +378 -0
- package/sdd/bin/lib/milestone.cjs +42 -11
- package/sdd/bin/lib/model-profiles.cjs +17 -15
- package/sdd/bin/lib/phase.cjs +367 -288
- package/sdd/bin/lib/profile-output.cjs +106 -10
- package/sdd/bin/lib/roadmap.cjs +146 -115
- package/sdd/bin/lib/schema-detect.cjs +238 -0
- package/sdd/bin/lib/sdd2-import.cjs +511 -0
- package/sdd/bin/lib/security.cjs +124 -3
- package/sdd/bin/lib/state.cjs +648 -264
- package/sdd/bin/lib/template.cjs +8 -4
- package/sdd/bin/lib/verify.cjs +209 -28
- package/sdd/bin/lib/workstream.cjs +7 -3
- package/sdd/bin/sdd-tools.cjs +184 -12
- package/sdd/contexts/dev.md +21 -0
- package/sdd/contexts/research.md +22 -0
- package/sdd/contexts/review.md +22 -0
- package/sdd/references/agent-contracts.md +79 -0
- package/sdd/references/ai-evals.md +156 -0
- package/sdd/references/ai-frameworks.md +186 -0
- package/sdd/references/artifact-types.md +113 -0
- package/sdd/references/common-bug-patterns.md +114 -0
- package/sdd/references/context-budget.md +49 -0
- package/sdd/references/continuation-format.md +25 -25
- package/sdd/references/domain-probes.md +125 -0
- package/sdd/references/few-shot-examples/plan-checker.md +73 -0
- package/sdd/references/few-shot-examples/verifier.md +109 -0
- package/sdd/references/gate-prompts.md +100 -0
- package/sdd/references/gates.md +70 -0
- package/sdd/references/git-integration.md +1 -1
- package/sdd/references/ios-scaffold.md +123 -0
- package/sdd/references/model-profile-resolution.md +2 -0
- package/sdd/references/model-profiles.md +24 -18
- package/sdd/references/planner-gap-closure.md +62 -0
- package/sdd/references/planner-reviews.md +39 -0
- package/sdd/references/planner-revision.md +87 -0
- package/sdd/references/planning-config.md +252 -0
- package/sdd/references/revision-loop.md +97 -0
- package/sdd/references/thinking-models-debug.md +44 -0
- package/sdd/references/thinking-models-execution.md +50 -0
- package/sdd/references/thinking-models-planning.md +62 -0
- package/sdd/references/thinking-models-research.md +50 -0
- package/sdd/references/thinking-models-verification.md +55 -0
- package/sdd/references/thinking-partner.md +96 -0
- package/sdd/references/ui-brand.md +4 -4
- package/sdd/references/universal-anti-patterns.md +63 -0
- package/sdd/references/verification-overrides.md +227 -0
- package/sdd/references/workstream-flag.md +56 -3
- package/sdd/templates/AI-SPEC.md +246 -0
- package/sdd/templates/DEBUG.md +1 -1
- package/sdd/templates/SECURITY.md +61 -0
- package/sdd/templates/UAT.md +4 -4
- package/sdd/templates/VALIDATION.md +4 -4
- package/sdd/templates/claude-md.md +32 -9
- package/sdd/templates/config.json +4 -0
- package/sdd/templates/debug-subagent-prompt.md +1 -1
- package/sdd/templates/dev-preferences.md +1 -1
- package/sdd/templates/discovery.md +2 -2
- package/sdd/templates/phase-prompt.md +1 -1
- package/sdd/templates/planner-subagent-prompt.md +3 -3
- package/sdd/templates/project.md +1 -1
- package/sdd/templates/research.md +1 -1
- package/sdd/templates/state.md +2 -2
- package/sdd/workflows/add-phase.md +8 -8
- package/sdd/workflows/add-tests.md +12 -9
- package/sdd/workflows/add-todo.md +5 -3
- package/sdd/workflows/ai-integration-phase.md +284 -0
- package/sdd/workflows/analyze-dependencies.md +96 -0
- package/sdd/workflows/audit-fix.md +157 -0
- package/sdd/workflows/audit-milestone.md +11 -11
- package/sdd/workflows/audit-uat.md +2 -2
- package/sdd/workflows/autonomous.md +195 -27
- package/sdd/workflows/check-todos.md +12 -10
- package/sdd/workflows/cleanup.md +2 -0
- package/sdd/workflows/code-review-fix.md +497 -0
- package/sdd/workflows/code-review.md +515 -0
- package/sdd/workflows/complete-milestone.md +56 -22
- package/sdd/workflows/diagnose-issues.md +10 -3
- package/sdd/workflows/discovery-phase.md +5 -3
- package/sdd/workflows/discuss-phase-assumptions.md +24 -6
- package/sdd/workflows/discuss-phase-power.md +291 -0
- package/sdd/workflows/discuss-phase.md +173 -21
- package/sdd/workflows/do.md +23 -21
- package/sdd/workflows/docs-update.md +1155 -0
- package/sdd/workflows/eval-review.md +155 -0
- package/sdd/workflows/execute-phase.md +594 -38
- package/sdd/workflows/execute-plan.md +67 -96
- package/sdd/workflows/explore.md +139 -0
- package/sdd/workflows/fast.md +5 -5
- package/sdd/workflows/forensics.md +2 -2
- package/sdd/workflows/health.md +4 -4
- package/sdd/workflows/help.md +122 -119
- package/sdd/workflows/import.md +276 -0
- package/sdd/workflows/inbox.md +387 -0
- package/sdd/workflows/insert-phase.md +7 -7
- package/sdd/workflows/list-phase-assumptions.md +4 -4
- package/sdd/workflows/list-workspaces.md +2 -2
- package/sdd/workflows/manager.md +35 -32
- package/sdd/workflows/map-codebase.md +7 -5
- package/sdd/workflows/milestone-summary.md +2 -2
- package/sdd/workflows/new-milestone.md +17 -9
- package/sdd/workflows/new-project.md +50 -25
- package/sdd/workflows/new-workspace.md +7 -5
- package/sdd/workflows/next.md +67 -11
- package/sdd/workflows/note.md +9 -7
- package/sdd/workflows/pause-work.md +75 -12
- package/sdd/workflows/plan-milestone-gaps.md +8 -8
- package/sdd/workflows/plan-phase.md +294 -42
- package/sdd/workflows/plant-seed.md +6 -3
- package/sdd/workflows/pr-branch.md +42 -14
- package/sdd/workflows/profile-user.md +9 -7
- package/sdd/workflows/progress.md +45 -45
- package/sdd/workflows/quick.md +195 -47
- package/sdd/workflows/remove-phase.md +6 -6
- package/sdd/workflows/remove-workspace.md +3 -1
- package/sdd/workflows/research-phase.md +2 -2
- package/sdd/workflows/resume-project.md +12 -12
- package/sdd/workflows/review.md +109 -9
- package/sdd/workflows/scan.md +102 -0
- package/sdd/workflows/secure-phase.md +166 -0
- package/sdd/workflows/session-report.md +2 -2
- package/sdd/workflows/settings.md +38 -12
- package/sdd/workflows/ship.md +21 -9
- package/sdd/workflows/stats.md +1 -1
- package/sdd/workflows/transition.md +23 -23
- package/sdd/workflows/ui-phase.md +15 -7
- package/sdd/workflows/ui-review.md +29 -4
- package/sdd/workflows/undo.md +314 -0
- package/sdd/workflows/update.md +171 -20
- package/sdd/workflows/validate-phase.md +6 -4
- package/sdd/workflows/verify-phase.md +210 -6
- package/sdd/workflows/verify-work.md +83 -9
- package/sdd/commands/sdd/workstreams.md +0 -63
package/sdd/workflows/review.md
CHANGED
|
@@ -18,12 +18,20 @@ Check which AI CLIs are available on the system:
|
|
|
18
18
|
command -v gemini >/dev/null 2>&1 && echo "gemini:available" || echo "gemini:missing"
|
|
19
19
|
command -v claude >/dev/null 2>&1 && echo "claude:available" || echo "claude:missing"
|
|
20
20
|
command -v codex >/dev/null 2>&1 && echo "codex:available" || echo "codex:missing"
|
|
21
|
+
command -v coderabbit >/dev/null 2>&1 && echo "coderabbit:available" || echo "coderabbit:missing"
|
|
22
|
+
command -v opencode >/dev/null 2>&1 && echo "opencode:available" || echo "opencode:missing"
|
|
23
|
+
command -v qwen >/dev/null 2>&1 && echo "qwen:available" || echo "qwen:missing"
|
|
24
|
+
command -v cursor >/dev/null 2>&1 && echo "cursor:available" || echo "cursor:missing"
|
|
21
25
|
```
|
|
22
26
|
|
|
23
27
|
Parse flags from `$ARGUMENTS`:
|
|
24
28
|
- `--gemini` → include Gemini
|
|
25
29
|
- `--claude` → include Claude
|
|
26
30
|
- `--codex` → include Codex
|
|
31
|
+
- `--coderabbit` → include CodeRabbit
|
|
32
|
+
- `--opencode` → include OpenCode
|
|
33
|
+
- `--qwen` → include Qwen Code
|
|
34
|
+
- `--cursor` → include Cursor
|
|
27
35
|
- `--all` → include all available
|
|
28
36
|
- No flags → include all available
|
|
29
37
|
|
|
@@ -33,13 +41,36 @@ No external AI CLIs found. Install at least one:
|
|
|
33
41
|
- gemini: https://github.com/google-gemini/gemini-cli
|
|
34
42
|
- codex: https://github.com/openai/codex
|
|
35
43
|
- claude: https://github.com/anthropics/claude-code
|
|
44
|
+
- opencode: https://opencode.ai (leverages GitHub Copilot subscription models)
|
|
45
|
+
- qwen: https://github.com/nicepkg/qwen-code (Alibaba Qwen models)
|
|
46
|
+
- cursor: https://cursor.com (Cursor IDE agent mode)
|
|
36
47
|
|
|
37
|
-
Then run /sdd
|
|
48
|
+
Then run /sdd-review again.
|
|
38
49
|
```
|
|
39
50
|
Exit.
|
|
40
51
|
|
|
41
|
-
|
|
42
|
-
|
|
52
|
+
Determine which CLI to skip based on the current runtime environment:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Environment-based runtime detection (priority order)
|
|
56
|
+
if [ "$ANTIGRAVITY_AGENT" = "1" ]; then
|
|
57
|
+
# Antigravity is a separate client — all CLIs are external, skip none
|
|
58
|
+
SELF_CLI="none"
|
|
59
|
+
elif [ -n "$CLAUDE_CODE_ENTRYPOINT" ]; then
|
|
60
|
+
# Running inside Claude Code CLI — skip claude for independence
|
|
61
|
+
SELF_CLI="claude"
|
|
62
|
+
else
|
|
63
|
+
# Other environments (Gemini CLI, Codex CLI, etc.)
|
|
64
|
+
# Fall back to AI self-identification to decide which CLI to skip
|
|
65
|
+
SELF_CLI="auto"
|
|
66
|
+
fi
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Rules:
|
|
70
|
+
- If `SELF_CLI="none"` → invoke ALL available CLIs (no skip)
|
|
71
|
+
- If `SELF_CLI="claude"` → skip claude, use gemini/codex
|
|
72
|
+
- If `SELF_CLI="auto"` → the executing AI identifies itself and skips its own CLI
|
|
73
|
+
- At least one DIFFERENT CLI must be available for the review to proceed.
|
|
43
74
|
</step>
|
|
44
75
|
|
|
45
76
|
<step name="gather_context">
|
|
@@ -114,21 +145,78 @@ Write to a temp file: `/tmp/sdd-review-prompt-{phase}.md`
|
|
|
114
145
|
</step>
|
|
115
146
|
|
|
116
147
|
<step name="invoke_reviewers">
|
|
148
|
+
Read model preferences from planning config. Null/missing values fall back to CLI defaults.
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
GEMINI_MODEL=$(node "$HOME/.claude/sdd/bin/sdd-tools.cjs" config-get review.models.gemini --raw 2>/dev/null || true)
|
|
152
|
+
CLAUDE_MODEL=$(node "$HOME/.claude/sdd/bin/sdd-tools.cjs" config-get review.models.claude --raw 2>/dev/null || true)
|
|
153
|
+
CODEX_MODEL=$(node "$HOME/.claude/sdd/bin/sdd-tools.cjs" config-get review.models.codex --raw 2>/dev/null || true)
|
|
154
|
+
OPENCODE_MODEL=$(node "$HOME/.claude/sdd/bin/sdd-tools.cjs" config-get review.models.opencode --raw 2>/dev/null || true)
|
|
155
|
+
```
|
|
156
|
+
|
|
117
157
|
For each selected CLI, invoke in sequence (not parallel — avoid rate limits):
|
|
118
158
|
|
|
119
159
|
**Gemini:**
|
|
120
160
|
```bash
|
|
121
|
-
|
|
161
|
+
if [ -n "$GEMINI_MODEL" ] && [ "$GEMINI_MODEL" != "null" ]; then
|
|
162
|
+
gemini -m "$GEMINI_MODEL" -p "$(cat /tmp/sdd-review-prompt-{phase}.md)" 2>/dev/null > /tmp/sdd-review-gemini-{phase}.md
|
|
163
|
+
else
|
|
164
|
+
gemini -p "$(cat /tmp/sdd-review-prompt-{phase}.md)" 2>/dev/null > /tmp/sdd-review-gemini-{phase}.md
|
|
165
|
+
fi
|
|
122
166
|
```
|
|
123
167
|
|
|
124
168
|
**Claude (separate session):**
|
|
125
169
|
```bash
|
|
126
|
-
|
|
170
|
+
if [ -n "$CLAUDE_MODEL" ] && [ "$CLAUDE_MODEL" != "null" ]; then
|
|
171
|
+
claude --model "$CLAUDE_MODEL" -p "$(cat /tmp/sdd-review-prompt-{phase}.md)" 2>/dev/null > /tmp/sdd-review-claude-{phase}.md
|
|
172
|
+
else
|
|
173
|
+
claude -p "$(cat /tmp/sdd-review-prompt-{phase}.md)" 2>/dev/null > /tmp/sdd-review-claude-{phase}.md
|
|
174
|
+
fi
|
|
127
175
|
```
|
|
128
176
|
|
|
129
177
|
**Codex:**
|
|
130
178
|
```bash
|
|
131
|
-
|
|
179
|
+
if [ -n "$CODEX_MODEL" ] && [ "$CODEX_MODEL" != "null" ]; then
|
|
180
|
+
codex exec --model "$CODEX_MODEL" --skip-git-repo-check "$(cat /tmp/sdd-review-prompt-{phase}.md)" 2>/dev/null > /tmp/sdd-review-codex-{phase}.md
|
|
181
|
+
else
|
|
182
|
+
codex exec --skip-git-repo-check "$(cat /tmp/sdd-review-prompt-{phase}.md)" 2>/dev/null > /tmp/sdd-review-codex-{phase}.md
|
|
183
|
+
fi
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**CodeRabbit:**
|
|
187
|
+
|
|
188
|
+
Note: CodeRabbit reviews the current git diff/working tree — it does not accept a prompt or model flag. It may take up to 5 minutes. Use `timeout: 360000` on the Bash tool call.
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
coderabbit review --prompt-only 2>/dev/null > /tmp/sdd-review-coderabbit-{phase}.md
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**OpenCode (via GitHub Copilot):**
|
|
195
|
+
```bash
|
|
196
|
+
if [ -n "$OPENCODE_MODEL" ] && [ "$OPENCODE_MODEL" != "null" ]; then
|
|
197
|
+
cat /tmp/sdd-review-prompt-{phase}.md | opencode run --model "$OPENCODE_MODEL" - 2>/dev/null > /tmp/sdd-review-opencode-{phase}.md
|
|
198
|
+
else
|
|
199
|
+
cat /tmp/sdd-review-prompt-{phase}.md | opencode run - 2>/dev/null > /tmp/sdd-review-opencode-{phase}.md
|
|
200
|
+
fi
|
|
201
|
+
if [ ! -s /tmp/sdd-review-opencode-{phase}.md ]; then
|
|
202
|
+
echo "OpenCode review failed or returned empty output." > /tmp/sdd-review-opencode-{phase}.md
|
|
203
|
+
fi
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**Qwen Code:**
|
|
207
|
+
```bash
|
|
208
|
+
qwen "$(cat /tmp/sdd-review-prompt-{phase}.md)" 2>/dev/null > /tmp/sdd-review-qwen-{phase}.md
|
|
209
|
+
if [ ! -s /tmp/sdd-review-qwen-{phase}.md ]; then
|
|
210
|
+
echo "Qwen review failed or returned empty output." > /tmp/sdd-review-qwen-{phase}.md
|
|
211
|
+
fi
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**Cursor:**
|
|
215
|
+
```bash
|
|
216
|
+
cat /tmp/sdd-review-prompt-{phase}.md | cursor agent -p --mode ask --trust 2>/dev/null > /tmp/sdd-review-cursor-{phase}.md
|
|
217
|
+
if [ ! -s /tmp/sdd-review-cursor-{phase}.md ]; then
|
|
218
|
+
echo "Cursor review failed or returned empty output." > /tmp/sdd-review-cursor-{phase}.md
|
|
219
|
+
fi
|
|
132
220
|
```
|
|
133
221
|
|
|
134
222
|
If a CLI fails, log the error and continue with remaining CLIs.
|
|
@@ -150,7 +238,7 @@ Combine all review responses into `{phase_dir}/{padded_phase}-REVIEWS.md`:
|
|
|
150
238
|
```markdown
|
|
151
239
|
---
|
|
152
240
|
phase: {N}
|
|
153
|
-
reviewers: [gemini, claude, codex]
|
|
241
|
+
reviewers: [gemini, claude, codex, coderabbit, opencode, qwen, cursor]
|
|
154
242
|
reviewed_at: {ISO timestamp}
|
|
155
243
|
plans_reviewed: [{list of PLAN.md files}]
|
|
156
244
|
---
|
|
@@ -175,6 +263,18 @@ plans_reviewed: [{list of PLAN.md files}]
|
|
|
175
263
|
|
|
176
264
|
---
|
|
177
265
|
|
|
266
|
+
## CodeRabbit Review
|
|
267
|
+
|
|
268
|
+
{coderabbit review content}
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## OpenCode Review
|
|
273
|
+
|
|
274
|
+
{opencode review content}
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
178
278
|
## Consensus Summary
|
|
179
279
|
|
|
180
280
|
{synthesize common concerns across all reviewers}
|
|
@@ -211,7 +311,7 @@ Consensus concerns:
|
|
|
211
311
|
Full review: {padded_phase}-REVIEWS.md
|
|
212
312
|
|
|
213
313
|
To incorporate feedback into planning:
|
|
214
|
-
/sdd
|
|
314
|
+
/sdd-plan-phase {N} --reviews
|
|
215
315
|
```
|
|
216
316
|
|
|
217
317
|
Clean up temp files.
|
|
@@ -224,5 +324,5 @@ Clean up temp files.
|
|
|
224
324
|
- [ ] REVIEWS.md written with structured feedback
|
|
225
325
|
- [ ] Consensus summary synthesized from multiple reviewers
|
|
226
326
|
- [ ] Temp files cleaned up
|
|
227
|
-
- [ ] User knows how to use feedback (/sdd
|
|
327
|
+
- [ ] User knows how to use feedback (/sdd-plan-phase --reviews)
|
|
228
328
|
</success_criteria>
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Lightweight codebase assessment. Spawns a single sdd-codebase-mapper agent for one focus area,
|
|
3
|
+
producing targeted documents in `.planning/codebase/`.
|
|
4
|
+
</purpose>
|
|
5
|
+
|
|
6
|
+
<required_reading>
|
|
7
|
+
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
8
|
+
</required_reading>
|
|
9
|
+
|
|
10
|
+
<available_agent_types>
|
|
11
|
+
Valid SDD subagent types (use exact names — do not fall back to 'general-purpose'):
|
|
12
|
+
- sdd-codebase-mapper — Maps project structure and dependencies
|
|
13
|
+
</available_agent_types>
|
|
14
|
+
|
|
15
|
+
<process>
|
|
16
|
+
|
|
17
|
+
## Focus-to-Document Mapping
|
|
18
|
+
|
|
19
|
+
| Focus | Documents Produced |
|
|
20
|
+
|-------|-------------------|
|
|
21
|
+
| `tech` | STACK.md, INTEGRATIONS.md |
|
|
22
|
+
| `arch` | ARCHITECTURE.md, STRUCTURE.md |
|
|
23
|
+
| `quality` | CONVENTIONS.md, TESTING.md |
|
|
24
|
+
| `concerns` | CONCERNS.md |
|
|
25
|
+
| `tech+arch` | STACK.md, INTEGRATIONS.md, ARCHITECTURE.md, STRUCTURE.md |
|
|
26
|
+
|
|
27
|
+
## Step 1: Parse arguments and resolve focus
|
|
28
|
+
|
|
29
|
+
Parse the user's input for `--focus <area>`. Default to `tech+arch` if not specified.
|
|
30
|
+
|
|
31
|
+
Validate that the focus is one of: `tech`, `arch`, `quality`, `concerns`, `tech+arch`.
|
|
32
|
+
|
|
33
|
+
If invalid:
|
|
34
|
+
```
|
|
35
|
+
Unknown focus area: "{input}". Valid options: tech, arch, quality, concerns, tech+arch
|
|
36
|
+
```
|
|
37
|
+
Exit.
|
|
38
|
+
|
|
39
|
+
## Step 2: Check for existing documents
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
INIT=$(node "$HOME/.claude/sdd/bin/sdd-tools.cjs" init map-codebase 2>/dev/null || echo "{}")
|
|
43
|
+
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Look up which documents would be produced for the selected focus (from the mapping table above).
|
|
47
|
+
|
|
48
|
+
For each target document, check if it already exists in `.planning/codebase/`:
|
|
49
|
+
```bash
|
|
50
|
+
ls -la .planning/codebase/{DOCUMENT}.md 2>/dev/null
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
If any exist, show their modification dates and ask:
|
|
54
|
+
```
|
|
55
|
+
Existing documents found:
|
|
56
|
+
- STACK.md (modified 2026-04-03)
|
|
57
|
+
- INTEGRATIONS.md (modified 2026-04-01)
|
|
58
|
+
|
|
59
|
+
Overwrite with fresh scan? [y/N]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
If user says no, exit.
|
|
63
|
+
|
|
64
|
+
## Step 3: Create output directory
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
mkdir -p .planning/codebase
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Step 4: Spawn mapper agent
|
|
71
|
+
|
|
72
|
+
Spawn a single `sdd-codebase-mapper` agent with the selected focus area:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
Task(
|
|
76
|
+
prompt="Scan this codebase with focus: {focus}. Write results to .planning/codebase/. Produce only: {document_list}",
|
|
77
|
+
subagent_type="sdd-codebase-mapper",
|
|
78
|
+
model="{resolved_model}"
|
|
79
|
+
)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Step 5: Report
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
## Scan Complete
|
|
86
|
+
|
|
87
|
+
**Focus:** {focus}
|
|
88
|
+
**Documents produced:**
|
|
89
|
+
{list of documents written with line counts}
|
|
90
|
+
|
|
91
|
+
Use `/sdd-map-codebase` for a comprehensive 4-area parallel scan.
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
</process>
|
|
95
|
+
|
|
96
|
+
<success_criteria>
|
|
97
|
+
- [ ] Focus area correctly parsed (default: tech+arch)
|
|
98
|
+
- [ ] Existing documents detected with modification dates shown
|
|
99
|
+
- [ ] User prompted before overwriting
|
|
100
|
+
- [ ] Single mapper agent spawned with correct focus
|
|
101
|
+
- [ ] Output documents written to .planning/codebase/
|
|
102
|
+
</success_criteria>
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Verify threat mitigations for a completed phase. Confirm PLAN.md threat register dispositions are resolved. Update SECURITY.md.
|
|
3
|
+
</purpose>
|
|
4
|
+
|
|
5
|
+
<required_reading>
|
|
6
|
+
@~/.claude/sdd/references/ui-brand.md
|
|
7
|
+
</required_reading>
|
|
8
|
+
|
|
9
|
+
<available_agent_types>
|
|
10
|
+
Valid SDD subagent types (use exact names — do not fall back to 'general-purpose'):
|
|
11
|
+
- sdd-security-auditor — Verifies threat mitigation coverage
|
|
12
|
+
</available_agent_types>
|
|
13
|
+
|
|
14
|
+
<process>
|
|
15
|
+
|
|
16
|
+
## 0. Initialize
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
INIT=$(node "$HOME/.claude/sdd/bin/sdd-tools.cjs" init phase-op "${PHASE_ARG}")
|
|
20
|
+
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
21
|
+
AGENT_SKILLS_AUDITOR=$(node "$HOME/.claude/sdd/bin/sdd-tools.cjs" agent-skills sdd-security-auditor 2>/dev/null)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Parse: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`.
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
AUDITOR_MODEL=$(node "$HOME/.claude/sdd/bin/sdd-tools.cjs" resolve-model sdd-security-auditor --raw)
|
|
28
|
+
SECURITY_CFG=$(node "$HOME/.claude/sdd/bin/sdd-tools.cjs" config-get workflow.security_enforcement --raw 2>/dev/null || echo "true")
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
If `SECURITY_CFG` is `false`: exit with "Security enforcement disabled. Enable via /sdd-settings."
|
|
32
|
+
|
|
33
|
+
Display banner: `SDD > SECURE PHASE {N}: {name}`
|
|
34
|
+
|
|
35
|
+
## 1. Detect Input State
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
SECURITY_FILE=$(ls "${PHASE_DIR}"/*-SECURITY.md 2>/dev/null | head -1)
|
|
39
|
+
PLAN_FILES=$(ls "${PHASE_DIR}"/*-PLAN.md 2>/dev/null)
|
|
40
|
+
SUMMARY_FILES=$(ls "${PHASE_DIR}"/*-SUMMARY.md 2>/dev/null)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- **State A** (`SECURITY_FILE` non-empty): Audit existing
|
|
44
|
+
- **State B** (`SECURITY_FILE` empty, `PLAN_FILES` and `SUMMARY_FILES` non-empty): Run from artifacts
|
|
45
|
+
- **State C** (`SUMMARY_FILES` empty): Exit — "Phase {N} not executed. Run /sdd-execute-phase {N} first."
|
|
46
|
+
|
|
47
|
+
## 2. Discovery
|
|
48
|
+
|
|
49
|
+
### 2a. Read Phase Artifacts
|
|
50
|
+
|
|
51
|
+
Read PLAN.md — extract `<threat_model>` block: trust boundaries, STRIDE register (`threat_id`, `category`, `component`, `disposition`, `mitigation_plan`).
|
|
52
|
+
|
|
53
|
+
### 2b. Read Summary Threat Flags
|
|
54
|
+
|
|
55
|
+
Read SUMMARY.md — extract `## Threat Flags` entries.
|
|
56
|
+
|
|
57
|
+
### 2c. Build Threat Register
|
|
58
|
+
|
|
59
|
+
Per threat: `{ threat_id, category, component, disposition, mitigation_pattern, files_to_check }`
|
|
60
|
+
|
|
61
|
+
## 3. Threat Classification
|
|
62
|
+
|
|
63
|
+
Classify each threat:
|
|
64
|
+
|
|
65
|
+
| Status | Criteria |
|
|
66
|
+
|--------|----------|
|
|
67
|
+
| CLOSED | mitigation found OR accepted risk documented in SECURITY.md OR transfer documented |
|
|
68
|
+
| OPEN | none of the above |
|
|
69
|
+
|
|
70
|
+
Build: `{ threat_id, category, component, disposition, status, evidence }`
|
|
71
|
+
|
|
72
|
+
If `threats_open: 0` → skip to Step 6 directly.
|
|
73
|
+
|
|
74
|
+
## 4. Present Threat Plan
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available.
|
|
78
|
+
Call AskUserQuestion with threat table and options:
|
|
79
|
+
1. "Verify all open threats" → Step 5
|
|
80
|
+
2. "Accept all open — document in accepted risks log" → add to SECURITY.md accepted risks, set all CLOSED, Step 6
|
|
81
|
+
3. "Cancel" → exit
|
|
82
|
+
|
|
83
|
+
## 5. Spawn sdd-security-auditor
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
Task(
|
|
87
|
+
prompt="Read ~/.claude/agents/sdd-security-auditor.md for instructions.\n\n" +
|
|
88
|
+
"<files_to_read>{PLAN, SUMMARY, impl files, SECURITY.md}</files_to_read>" +
|
|
89
|
+
"<threat_register>{threat register}</threat_register>" +
|
|
90
|
+
"<config>asvs_level: {SECURITY_ASVS}, block_on: {SECURITY_BLOCK_ON}</config>" +
|
|
91
|
+
"<constraints>Never modify implementation files. Verify mitigations exist — do not scan for new threats. Escalate implementation gaps.</constraints>" +
|
|
92
|
+
"${AGENT_SKILLS_AUDITOR}",
|
|
93
|
+
subagent_type="sdd-security-auditor",
|
|
94
|
+
model="{AUDITOR_MODEL}",
|
|
95
|
+
description="Verify threat mitigations for Phase {N}"
|
|
96
|
+
)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Handle return:
|
|
100
|
+
- `## SECURED` → record closures → Step 6
|
|
101
|
+
- `## OPEN_THREATS` → record closed + open, present user with accept/block choice → Step 6
|
|
102
|
+
- `## ESCALATE` → present to user → Step 6
|
|
103
|
+
|
|
104
|
+
## 6. Write/Update SECURITY.md
|
|
105
|
+
|
|
106
|
+
**State B (create):**
|
|
107
|
+
1. Read template from `~/.claude/sdd/templates/SECURITY.md`
|
|
108
|
+
2. Fill: frontmatter, threat register, accepted risks, audit trail
|
|
109
|
+
3. Write to `${PHASE_DIR}/${PADDED_PHASE}-SECURITY.md`
|
|
110
|
+
|
|
111
|
+
**State A (update):**
|
|
112
|
+
1. Update threat register statuses, append to audit trail:
|
|
113
|
+
|
|
114
|
+
```markdown
|
|
115
|
+
## Security Audit {date}
|
|
116
|
+
| Metric | Count |
|
|
117
|
+
|--------|-------|
|
|
118
|
+
| Threats found | {N} |
|
|
119
|
+
| Closed | {M} |
|
|
120
|
+
| Open | {K} |
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**ENFORCING GATE:** If `threats_open > 0` after all options exhausted (user did not accept, not all verified closed):
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
SDD > PHASE {N} SECURITY BLOCKED
|
|
127
|
+
{K} threats open — phase advancement blocked until threats_open: 0
|
|
128
|
+
▶ Fix mitigations then re-run: /sdd-secure-phase {N}
|
|
129
|
+
▶ Or document accepted risks in SECURITY.md and re-run.
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Do NOT emit next-phase routing. Stop here.
|
|
133
|
+
|
|
134
|
+
## 7. Commit
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
node "$HOME/.claude/sdd/bin/sdd-tools.cjs" commit "docs(phase-${PHASE}): add/update security threat verification"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## 8. Results + Routing
|
|
141
|
+
|
|
142
|
+
**Secured (threats_open: 0):**
|
|
143
|
+
```
|
|
144
|
+
SDD > PHASE {N} THREAT-SECURE
|
|
145
|
+
threats_open: 0 — all threats have dispositions.
|
|
146
|
+
▶ /sdd-validate-phase {N} validate test coverage
|
|
147
|
+
▶ /sdd-verify-work {N} run UAT
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Display `/clear` reminder.
|
|
151
|
+
|
|
152
|
+
</process>
|
|
153
|
+
|
|
154
|
+
<success_criteria>
|
|
155
|
+
- [ ] Security enforcement checked — exit if false
|
|
156
|
+
- [ ] Input state detected (A/B/C) — state C exits cleanly
|
|
157
|
+
- [ ] PLAN.md threat model parsed, register built
|
|
158
|
+
- [ ] SUMMARY.md threat flags incorporated
|
|
159
|
+
- [ ] threats_open: 0 → skip directly to Step 6
|
|
160
|
+
- [ ] User gate with threat table presented
|
|
161
|
+
- [ ] Auditor spawned with complete context
|
|
162
|
+
- [ ] All three return formats (SECURED/OPEN_THREATS/ESCALATE) handled
|
|
163
|
+
- [ ] SECURITY.md created or updated
|
|
164
|
+
- [ ] threats_open > 0 BLOCKS advancement (no next-phase routing emitted)
|
|
165
|
+
- [ ] Results with routing presented on success
|
|
166
|
+
</success_criteria>
|
|
@@ -110,7 +110,7 @@ Write `.planning/reports/SESSION_REPORT.md` (or `.planning/reports/YYYYMMDD-sess
|
|
|
110
110
|
|
|
111
111
|
---
|
|
112
112
|
|
|
113
|
-
*Generated by `/sdd
|
|
113
|
+
*Generated by `/sdd-session-report`*
|
|
114
114
|
```
|
|
115
115
|
</step>
|
|
116
116
|
|
|
@@ -131,7 +131,7 @@ Show the user:
|
|
|
131
131
|
|
|
132
132
|
If this is the first report, mention:
|
|
133
133
|
```
|
|
134
|
-
💡 Run `/sdd
|
|
134
|
+
💡 Run `/sdd-session-report` at the end of each session to build a history of project activity.
|
|
135
135
|
```
|
|
136
136
|
</step>
|
|
137
137
|
|
|
@@ -31,12 +31,16 @@ Parse current values (default to `true` if not present):
|
|
|
31
31
|
- `workflow.verifier` — spawn verifier during execute-phase
|
|
32
32
|
- `workflow.nyquist_validation` — validation architecture research during plan-phase (default: true if absent)
|
|
33
33
|
- `workflow.ui_phase` — generate UI-SPEC.md design contracts for frontend phases (default: true if absent)
|
|
34
|
-
- `workflow.ui_safety_gate` — prompt to run /sdd
|
|
34
|
+
- `workflow.ui_safety_gate` — prompt to run /sdd-ui-phase before planning frontend phases (default: true if absent)
|
|
35
|
+
- `workflow.ai_integration_phase` — framework selection + eval strategy for AI phases (default: true if absent)
|
|
35
36
|
- `model_profile` — which model each agent uses (default: `balanced`)
|
|
36
37
|
- `git.branching_strategy` — branching approach (default: `"none"`)
|
|
38
|
+
- `workflow.use_worktrees` — whether parallel executor agents run in worktree isolation (default: `true`)
|
|
37
39
|
</step>
|
|
38
40
|
|
|
39
41
|
<step name="present_settings">
|
|
42
|
+
|
|
43
|
+
**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available.
|
|
40
44
|
Use AskUserQuestion with current values pre-selected:
|
|
41
45
|
|
|
42
46
|
```
|
|
@@ -109,14 +113,23 @@ AskUserQuestion([
|
|
|
109
113
|
]
|
|
110
114
|
},
|
|
111
115
|
{
|
|
112
|
-
question: "Enable UI Safety Gate? (prompts to run /sdd
|
|
116
|
+
question: "Enable UI Safety Gate? (prompts to run /sdd-ui-phase before planning frontend phases)",
|
|
113
117
|
header: "UI Gate",
|
|
114
118
|
multiSelect: false,
|
|
115
119
|
options: [
|
|
116
|
-
{ label: "Yes (Recommended)", description: "plan-phase asks to run /sdd
|
|
120
|
+
{ label: "Yes (Recommended)", description: "plan-phase asks to run /sdd-ui-phase first when frontend indicators detected." },
|
|
117
121
|
{ label: "No", description: "No prompt — plan-phase proceeds without UI-SPEC check." }
|
|
118
122
|
]
|
|
119
123
|
},
|
|
124
|
+
{
|
|
125
|
+
question: "Enable AI Phase? (framework selection + eval strategy for AI phases)",
|
|
126
|
+
header: "AI Phase",
|
|
127
|
+
multiSelect: false,
|
|
128
|
+
options: [
|
|
129
|
+
{ label: "Yes (Recommended)", description: "Run /sdd-ai-phase before planning AI system phases. Surfaces the right framework, researches its docs, and designs the evaluation strategy." },
|
|
130
|
+
{ label: "No", description: "Skip AI design contract. Good for non-AI phases or when framework is already decided." }
|
|
131
|
+
]
|
|
132
|
+
},
|
|
120
133
|
{
|
|
121
134
|
question: "Git branching strategy?",
|
|
122
135
|
header: "Branching",
|
|
@@ -151,7 +164,16 @@ AskUserQuestion([
|
|
|
151
164
|
multiSelect: false,
|
|
152
165
|
options: [
|
|
153
166
|
{ label: "No (Recommended)", description: "Run smart discuss before each phase — surfaces gray areas and captures decisions." },
|
|
154
|
-
{ label: "Yes", description: "Skip discuss in /sdd
|
|
167
|
+
{ label: "Yes", description: "Skip discuss in /sdd-autonomous — chain directly to plan. Best for backend/pipeline work where phase descriptions are the spec." }
|
|
168
|
+
]
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
question: "Use git worktrees for parallel agent isolation?",
|
|
172
|
+
header: "Worktrees",
|
|
173
|
+
multiSelect: false,
|
|
174
|
+
options: [
|
|
175
|
+
{ label: "Yes (Recommended)", description: "Each parallel executor runs in its own worktree branch — no conflicts between agents." },
|
|
176
|
+
{ label: "No", description: "Disable worktree isolation. Agents run sequentially on the main working tree. Use if EnterWorktree creates branches from wrong base (known cross-platform issue)." }
|
|
155
177
|
]
|
|
156
178
|
}
|
|
157
179
|
])
|
|
@@ -164,7 +186,7 @@ Merge new settings into existing config.json:
|
|
|
164
186
|
```json
|
|
165
187
|
{
|
|
166
188
|
...existing_config,
|
|
167
|
-
"model_profile": "quality" | "balanced" | "budget" | "inherit",
|
|
189
|
+
"model_profile": "quality" | "balanced" | "budget" | "adaptive" | "inherit",
|
|
168
190
|
"workflow": {
|
|
169
191
|
"research": true/false,
|
|
170
192
|
"plan_check": true/false,
|
|
@@ -173,10 +195,12 @@ Merge new settings into existing config.json:
|
|
|
173
195
|
"nyquist_validation": true/false,
|
|
174
196
|
"ui_phase": true/false,
|
|
175
197
|
"ui_safety_gate": true/false,
|
|
198
|
+
"ai_integration_phase": true/false,
|
|
176
199
|
"text_mode": true/false,
|
|
177
200
|
"research_before_questions": true/false,
|
|
178
201
|
"discuss_mode": "discuss" | "assumptions",
|
|
179
|
-
"skip_discuss": true/false
|
|
202
|
+
"skip_discuss": true/false,
|
|
203
|
+
"use_worktrees": true/false
|
|
180
204
|
},
|
|
181
205
|
"git": {
|
|
182
206
|
"branching_strategy": "none" | "phase" | "milestone",
|
|
@@ -233,6 +257,7 @@ Write `~/.sdd/defaults.json` with:
|
|
|
233
257
|
"nyquist_validation": <current>,
|
|
234
258
|
"ui_phase": <current>,
|
|
235
259
|
"ui_safety_gate": <current>,
|
|
260
|
+
"ai_integration_phase": <current>,
|
|
236
261
|
"skip_discuss": <current>
|
|
237
262
|
}
|
|
238
263
|
}
|
|
@@ -257,18 +282,19 @@ Display:
|
|
|
257
282
|
| Nyquist Validation | {On/Off} |
|
|
258
283
|
| UI Phase | {On/Off} |
|
|
259
284
|
| UI Safety Gate | {On/Off} |
|
|
285
|
+
| AI Integration Phase | {On/Off} |
|
|
260
286
|
| Git Branching | {None/Per Phase/Per Milestone} |
|
|
261
287
|
| Skip Discuss | {On/Off} |
|
|
262
288
|
| Context Warnings | {On/Off} |
|
|
263
289
|
| Saved as Defaults | {Yes/No} |
|
|
264
290
|
|
|
265
|
-
These settings apply to future /sdd
|
|
291
|
+
These settings apply to future /sdd-plan-phase and /sdd-execute-phase runs.
|
|
266
292
|
|
|
267
293
|
Quick commands:
|
|
268
|
-
- /sdd
|
|
269
|
-
- /sdd
|
|
270
|
-
- /sdd
|
|
271
|
-
- /sdd
|
|
294
|
+
- /sdd-set-profile <profile> — switch model profile
|
|
295
|
+
- /sdd-plan-phase --research — force research
|
|
296
|
+
- /sdd-plan-phase --skip-research — skip research
|
|
297
|
+
- /sdd-plan-phase --skip-verify — skip plan check
|
|
272
298
|
```
|
|
273
299
|
</step>
|
|
274
300
|
|
|
@@ -276,7 +302,7 @@ Quick commands:
|
|
|
276
302
|
|
|
277
303
|
<success_criteria>
|
|
278
304
|
- [ ] Current config read
|
|
279
|
-
- [ ] User presented with
|
|
305
|
+
- [ ] User presented with 14 settings (profile + 11 workflow toggles + git branching + ctx warnings)
|
|
280
306
|
- [ ] Config updated with model_profile, workflow, and git sections
|
|
281
307
|
- [ ] User offered to save as global defaults (~/.sdd/defaults.json)
|
|
282
308
|
- [ ] Changes confirmed to user
|
package/sdd/workflows/ship.md
CHANGED
|
@@ -24,6 +24,15 @@ CONFIG=$(node "$HOME/.claude/sdd/bin/sdd-tools.cjs" state load)
|
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
Extract: `branching_strategy`, `branch_name`.
|
|
27
|
+
|
|
28
|
+
Detect base branch for PRs and merges:
|
|
29
|
+
```bash
|
|
30
|
+
BASE_BRANCH=$(node "$HOME/.claude/sdd/bin/sdd-tools.cjs" config-get git.base_branch 2>/dev/null || echo "")
|
|
31
|
+
if [ -z "$BASE_BRANCH" ] || [ "$BASE_BRANCH" = "null" ]; then
|
|
32
|
+
BASE_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|^refs/remotes/origin/||')
|
|
33
|
+
BASE_BRANCH="${BASE_BRANCH:-main}"
|
|
34
|
+
fi
|
|
35
|
+
```
|
|
27
36
|
</step>
|
|
28
37
|
|
|
29
38
|
<step name="preflight_checks">
|
|
@@ -46,7 +55,7 @@ Verify the work is ready to ship:
|
|
|
46
55
|
```bash
|
|
47
56
|
CURRENT_BRANCH=$(git branch --show-current)
|
|
48
57
|
```
|
|
49
|
-
If on
|
|
58
|
+
If on `${BASE_BRANCH}`: warn — should be on a feature branch.
|
|
50
59
|
If branching_strategy is `none`: offer to create a branch now.
|
|
51
60
|
|
|
52
61
|
4. **Remote configured?**
|
|
@@ -74,7 +83,7 @@ If push fails (e.g., no upstream): set upstream:
|
|
|
74
83
|
git push --set-upstream origin ${CURRENT_BRANCH} 2>&1
|
|
75
84
|
```
|
|
76
85
|
|
|
77
|
-
Report: "Pushed `{branch}` to origin ({commit_count} commits ahead of
|
|
86
|
+
Report: "Pushed `{branch}` to origin ({commit_count} commits ahead of ${BASE_BRANCH})"
|
|
78
87
|
</step>
|
|
79
88
|
|
|
80
89
|
<step name="generate_pr_body">
|
|
@@ -141,7 +150,7 @@ Create the PR using the generated body:
|
|
|
141
150
|
gh pr create \
|
|
142
151
|
--title "Phase ${PHASE_NUMBER}: ${PHASE_NAME}" \
|
|
143
152
|
--body "${PR_BODY}" \
|
|
144
|
-
--base
|
|
153
|
+
--base ${BASE_BRANCH}
|
|
145
154
|
```
|
|
146
155
|
|
|
147
156
|
If `--draft` flag was passed: add `--draft`.
|
|
@@ -152,6 +161,9 @@ Report: "PR #{number} created: {url}"
|
|
|
152
161
|
<step name="optional_review">
|
|
153
162
|
Ask if user wants to trigger a code review:
|
|
154
163
|
|
|
164
|
+
|
|
165
|
+
**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available.
|
|
166
|
+
|
|
155
167
|
```
|
|
156
168
|
AskUserQuestion:
|
|
157
169
|
question: "PR created. Run a code review before merge?"
|
|
@@ -194,7 +206,7 @@ node "$HOME/.claude/sdd/bin/sdd-tools.cjs" commit "docs(${padded_phase}): ship p
|
|
|
194
206
|
## ✓ Phase {X}: {Name} — Shipped
|
|
195
207
|
|
|
196
208
|
PR: #{number} ({url})
|
|
197
|
-
Branch: {branch} →
|
|
209
|
+
Branch: {branch} → ${BASE_BRANCH}
|
|
198
210
|
Commits: {count}
|
|
199
211
|
Verification: ✓ Passed
|
|
200
212
|
Requirements: {N} REQ-IDs addressed
|
|
@@ -202,8 +214,8 @@ Requirements: {N} REQ-IDs addressed
|
|
|
202
214
|
Next steps:
|
|
203
215
|
- Review/approve PR
|
|
204
216
|
- Merge when CI passes
|
|
205
|
-
- /sdd
|
|
206
|
-
- /sdd
|
|
217
|
+
- /sdd-complete-milestone (if last phase in milestone)
|
|
218
|
+
- /sdd-progress (to see what's next)
|
|
207
219
|
|
|
208
220
|
───────────────────────────────────────────────────────────────
|
|
209
221
|
```
|
|
@@ -214,9 +226,9 @@ Next steps:
|
|
|
214
226
|
<offer_next>
|
|
215
227
|
After shipping:
|
|
216
228
|
|
|
217
|
-
- /sdd
|
|
218
|
-
- /sdd
|
|
219
|
-
- /sdd
|
|
229
|
+
- /sdd-complete-milestone — if all phases in milestone are done
|
|
230
|
+
- /sdd-progress — see overall project state
|
|
231
|
+
- /sdd-execute-phase {next} — continue to next phase
|
|
220
232
|
</offer_next>
|
|
221
233
|
|
|
222
234
|
<success_criteria>
|