gsd-opencode 1.22.0 → 1.30.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/agents/gsd-advisor-researcher.md +112 -0
- package/agents/gsd-assumptions-analyzer.md +110 -0
- package/agents/gsd-codebase-mapper.md +1 -2
- package/agents/gsd-debugger.md +119 -2
- package/agents/gsd-executor.md +25 -4
- package/agents/gsd-integration-checker.md +1 -2
- package/agents/gsd-nyquist-auditor.md +1 -2
- package/agents/gsd-phase-researcher.md +151 -5
- package/agents/gsd-plan-checker.md +71 -5
- package/agents/gsd-planner.md +50 -4
- package/agents/gsd-project-researcher.md +29 -3
- package/agents/gsd-research-synthesizer.md +1 -2
- package/agents/gsd-roadmapper.md +30 -2
- package/agents/gsd-ui-auditor.md +445 -0
- package/agents/gsd-ui-checker.md +305 -0
- package/agents/gsd-ui-researcher.md +368 -0
- package/agents/gsd-user-profiler.md +173 -0
- package/agents/gsd-verifier.md +124 -4
- package/commands/gsd/gsd-add-backlog.md +76 -0
- package/commands/gsd/gsd-audit-uat.md +24 -0
- package/commands/gsd/gsd-autonomous.md +41 -0
- package/commands/gsd/gsd-debug.md +5 -0
- package/commands/gsd/gsd-discuss-phase.md +10 -36
- package/commands/gsd/gsd-do.md +30 -0
- package/commands/gsd/gsd-execute-phase.md +20 -2
- package/commands/gsd/gsd-fast.md +30 -0
- package/commands/gsd/gsd-forensics.md +56 -0
- package/commands/gsd/gsd-list-workspaces.md +19 -0
- package/commands/gsd/gsd-manager.md +39 -0
- package/commands/gsd/gsd-milestone-summary.md +51 -0
- package/commands/gsd/gsd-new-workspace.md +44 -0
- package/commands/gsd/gsd-next.md +24 -0
- package/commands/gsd/gsd-note.md +34 -0
- package/commands/gsd/gsd-plan-phase.md +3 -1
- package/commands/gsd/gsd-plant-seed.md +28 -0
- package/commands/gsd/gsd-pr-branch.md +25 -0
- package/commands/gsd/gsd-profile-user.md +46 -0
- package/commands/gsd/gsd-quick.md +4 -2
- package/commands/gsd/gsd-reapply-patches.md +10 -6
- package/commands/gsd/gsd-remove-workspace.md +26 -0
- package/commands/gsd/gsd-research-phase.md +5 -0
- package/commands/gsd/gsd-resume-work.md +1 -1
- package/commands/gsd/gsd-review-backlog.md +61 -0
- package/commands/gsd/gsd-review.md +37 -0
- package/commands/gsd/gsd-session-report.md +19 -0
- package/commands/gsd/gsd-set-profile.md +24 -23
- package/commands/gsd/gsd-ship.md +23 -0
- package/commands/gsd/gsd-stats.md +18 -0
- package/commands/gsd/gsd-thread.md +127 -0
- package/commands/gsd/gsd-ui-phase.md +34 -0
- package/commands/gsd/gsd-ui-review.md +32 -0
- package/commands/gsd/gsd-workstreams.md +66 -0
- package/get-shit-done/bin/gsd-tools.cjs +410 -84
- package/get-shit-done/bin/lib/commands.cjs +429 -18
- package/get-shit-done/bin/lib/config.cjs +318 -45
- package/get-shit-done/bin/lib/core.cjs +822 -84
- package/get-shit-done/bin/lib/frontmatter.cjs +78 -41
- package/get-shit-done/bin/lib/init.cjs +836 -104
- package/get-shit-done/bin/lib/milestone.cjs +44 -33
- package/get-shit-done/bin/lib/model-profiles.cjs +68 -0
- package/get-shit-done/bin/lib/phase.cjs +293 -306
- package/get-shit-done/bin/lib/profile-output.cjs +952 -0
- package/get-shit-done/bin/lib/profile-pipeline.cjs +539 -0
- package/get-shit-done/bin/lib/roadmap.cjs +55 -24
- package/get-shit-done/bin/lib/security.cjs +382 -0
- package/get-shit-done/bin/lib/state.cjs +363 -53
- package/get-shit-done/bin/lib/template.cjs +2 -2
- package/get-shit-done/bin/lib/uat.cjs +282 -0
- package/get-shit-done/bin/lib/verify.cjs +104 -36
- package/get-shit-done/bin/lib/workstream.cjs +491 -0
- package/get-shit-done/references/checkpoints.md +12 -10
- package/get-shit-done/references/decimal-phase-calculation.md +2 -3
- package/get-shit-done/references/git-integration.md +47 -0
- package/get-shit-done/references/model-profile-resolution.md +2 -0
- package/get-shit-done/references/model-profiles.md +62 -16
- package/get-shit-done/references/phase-argument-parsing.md +2 -2
- package/get-shit-done/references/planning-config.md +3 -1
- package/get-shit-done/references/user-profiling.md +681 -0
- package/get-shit-done/references/workstream-flag.md +58 -0
- package/get-shit-done/templates/UAT.md +21 -3
- package/get-shit-done/templates/UI-SPEC.md +100 -0
- package/get-shit-done/templates/claude-md.md +122 -0
- package/get-shit-done/templates/config.json +10 -3
- package/get-shit-done/templates/context.md +61 -6
- package/get-shit-done/templates/dev-preferences.md +21 -0
- package/get-shit-done/templates/discussion-log.md +63 -0
- package/get-shit-done/templates/phase-prompt.md +46 -5
- package/get-shit-done/templates/project.md +2 -0
- package/get-shit-done/templates/state.md +2 -2
- package/get-shit-done/templates/user-profile.md +146 -0
- package/get-shit-done/workflows/add-phase.md +2 -2
- package/get-shit-done/workflows/add-tests.md +4 -4
- package/get-shit-done/workflows/add-todo.md +3 -3
- package/get-shit-done/workflows/audit-milestone.md +13 -5
- package/get-shit-done/workflows/audit-uat.md +109 -0
- package/get-shit-done/workflows/autonomous.md +891 -0
- package/get-shit-done/workflows/check-todos.md +2 -2
- package/get-shit-done/workflows/cleanup.md +4 -4
- package/get-shit-done/workflows/complete-milestone.md +9 -6
- package/get-shit-done/workflows/diagnose-issues.md +15 -3
- package/get-shit-done/workflows/discovery-phase.md +2 -2
- package/get-shit-done/workflows/discuss-phase-assumptions.md +653 -0
- package/get-shit-done/workflows/discuss-phase.md +411 -38
- package/get-shit-done/workflows/do.md +104 -0
- package/get-shit-done/workflows/execute-phase.md +405 -18
- package/get-shit-done/workflows/execute-plan.md +77 -12
- package/get-shit-done/workflows/fast.md +105 -0
- package/get-shit-done/workflows/forensics.md +265 -0
- package/get-shit-done/workflows/health.md +28 -6
- package/get-shit-done/workflows/help.md +124 -7
- package/get-shit-done/workflows/insert-phase.md +2 -2
- package/get-shit-done/workflows/list-phase-assumptions.md +2 -2
- package/get-shit-done/workflows/list-workspaces.md +56 -0
- package/get-shit-done/workflows/manager.md +362 -0
- package/get-shit-done/workflows/map-codebase.md +74 -13
- package/get-shit-done/workflows/milestone-summary.md +223 -0
- package/get-shit-done/workflows/new-milestone.md +120 -18
- package/get-shit-done/workflows/new-project.md +178 -39
- package/get-shit-done/workflows/new-workspace.md +237 -0
- package/get-shit-done/workflows/next.md +97 -0
- package/get-shit-done/workflows/node-repair.md +92 -0
- package/get-shit-done/workflows/note.md +156 -0
- package/get-shit-done/workflows/pause-work.md +62 -8
- package/get-shit-done/workflows/plan-milestone-gaps.md +4 -5
- package/get-shit-done/workflows/plan-phase.md +332 -33
- package/get-shit-done/workflows/plant-seed.md +169 -0
- package/get-shit-done/workflows/pr-branch.md +129 -0
- package/get-shit-done/workflows/profile-user.md +450 -0
- package/get-shit-done/workflows/progress.md +145 -20
- package/get-shit-done/workflows/quick.md +205 -49
- package/get-shit-done/workflows/remove-phase.md +2 -2
- package/get-shit-done/workflows/remove-workspace.md +90 -0
- package/get-shit-done/workflows/research-phase.md +11 -3
- package/get-shit-done/workflows/resume-project.md +35 -16
- package/get-shit-done/workflows/review.md +228 -0
- package/get-shit-done/workflows/session-report.md +146 -0
- package/get-shit-done/workflows/set-profile.md +2 -2
- package/get-shit-done/workflows/settings.md +80 -11
- package/get-shit-done/workflows/ship.md +228 -0
- package/get-shit-done/workflows/stats.md +60 -0
- package/get-shit-done/workflows/transition.md +147 -20
- package/get-shit-done/workflows/ui-phase.md +302 -0
- package/get-shit-done/workflows/ui-review.md +165 -0
- package/get-shit-done/workflows/update.md +108 -25
- package/get-shit-done/workflows/validate-phase.md +15 -8
- package/get-shit-done/workflows/verify-phase.md +16 -5
- package/get-shit-done/workflows/verify-work.md +72 -18
- package/package.json +1 -1
- package/skills/gsd-audit-milestone/SKILL.md +29 -0
- package/skills/gsd-cleanup/SKILL.md +19 -0
- package/skills/gsd-complete-milestone/SKILL.md +131 -0
- package/skills/gsd-discuss-phase/SKILL.md +54 -0
- package/skills/gsd-execute-phase/SKILL.md +49 -0
- package/skills/gsd-plan-phase/SKILL.md +37 -0
- package/skills/gsd-ui-phase/SKILL.md +24 -0
- package/skills/gsd-ui-review/SKILL.md +24 -0
- package/skills/gsd-verify-work/SKILL.md +30 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
<objective>
|
|
2
|
+
Create a pull request from completed phase/milestone work, generate a rich PR body from planning artifacts, optionally run code review, and prepare for merge. Closes the plan → execute → verify → ship loop.
|
|
3
|
+
</objective>
|
|
4
|
+
|
|
5
|
+
<required_reading>
|
|
6
|
+
read all files referenced by the invoking prompt's execution_context before starting.
|
|
7
|
+
</required_reading>
|
|
8
|
+
|
|
9
|
+
<process>
|
|
10
|
+
|
|
11
|
+
<step name="initialize">
|
|
12
|
+
Parse arguments and load project state:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
INIT=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" init phase-op "${PHASE_ARG}")
|
|
16
|
+
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Parse from init JSON: `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `padded_phase`, `commit_docs`.
|
|
20
|
+
|
|
21
|
+
Also load config for branching strategy:
|
|
22
|
+
```bash
|
|
23
|
+
CONFIG=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state load)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Extract: `branching_strategy`, `branch_name`.
|
|
27
|
+
</step>
|
|
28
|
+
|
|
29
|
+
<step name="preflight_checks">
|
|
30
|
+
Verify the work is ready to ship:
|
|
31
|
+
|
|
32
|
+
1. **Verification passed?**
|
|
33
|
+
```bash
|
|
34
|
+
VERIFICATION=$(cat ${PHASE_DIR}/*-VERIFICATION.md 2>/dev/null)
|
|
35
|
+
```
|
|
36
|
+
Check for `status: passed` or `status: human_needed` (with human approval).
|
|
37
|
+
If no VERIFICATION.md or status is `gaps_found`: warn and ask user to confirm.
|
|
38
|
+
|
|
39
|
+
2. **Clean working tree?**
|
|
40
|
+
```bash
|
|
41
|
+
git status --short
|
|
42
|
+
```
|
|
43
|
+
If uncommitted changes exist: ask user to commit or stash first.
|
|
44
|
+
|
|
45
|
+
3. **On correct branch?**
|
|
46
|
+
```bash
|
|
47
|
+
CURRENT_BRANCH=$(git branch --show-current)
|
|
48
|
+
```
|
|
49
|
+
If on `main`/`master`: warn — should be on a feature branch.
|
|
50
|
+
If branching_strategy is `none`: offer to create a branch now.
|
|
51
|
+
|
|
52
|
+
4. **Remote configured?**
|
|
53
|
+
```bash
|
|
54
|
+
git remote -v | head -2
|
|
55
|
+
```
|
|
56
|
+
Detect `origin` remote. If no remote: error — can't create PR.
|
|
57
|
+
|
|
58
|
+
5. **`gh` CLI available?**
|
|
59
|
+
```bash
|
|
60
|
+
which gh && gh auth status 2>&1
|
|
61
|
+
```
|
|
62
|
+
If `gh` not found or not authenticated: provide setup instructions and exit.
|
|
63
|
+
</step>
|
|
64
|
+
|
|
65
|
+
<step name="push_branch">
|
|
66
|
+
Push the current branch to remote:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
git push origin ${CURRENT_BRANCH} 2>&1
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
If push fails (e.g., no upstream): set upstream:
|
|
73
|
+
```bash
|
|
74
|
+
git push --set-upstream origin ${CURRENT_BRANCH} 2>&1
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Report: "Pushed `{branch}` to origin ({commit_count} commits ahead of main)"
|
|
78
|
+
</step>
|
|
79
|
+
|
|
80
|
+
<step name="generate_pr_body">
|
|
81
|
+
Auto-generate a rich PR body from planning artifacts:
|
|
82
|
+
|
|
83
|
+
**1. Title:**
|
|
84
|
+
```
|
|
85
|
+
Phase {phase_number}: {phase_name}
|
|
86
|
+
```
|
|
87
|
+
Or for milestone: `Milestone {version}: {name}`
|
|
88
|
+
|
|
89
|
+
**2. Summary section:**
|
|
90
|
+
read ROADMAP.md for phase goal. read VERIFICATION.md for verification status.
|
|
91
|
+
|
|
92
|
+
```markdown
|
|
93
|
+
## Summary
|
|
94
|
+
|
|
95
|
+
**Phase {N}: {Name}**
|
|
96
|
+
**Goal:** {goal from ROADMAP.md}
|
|
97
|
+
**Status:** Verified ✓
|
|
98
|
+
|
|
99
|
+
{One paragraph synthesized from SUMMARY.md files — what was built}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**3. Changes section:**
|
|
103
|
+
For each SUMMARY.md in the phase directory:
|
|
104
|
+
```markdown
|
|
105
|
+
## Changes
|
|
106
|
+
|
|
107
|
+
### Plan {plan_id}: {plan_name}
|
|
108
|
+
{one_liner from SUMMARY.md frontmatter}
|
|
109
|
+
|
|
110
|
+
**Key files:**
|
|
111
|
+
{key-files.created and key-files.modified from SUMMARY.md frontmatter}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**4. Requirements section:**
|
|
115
|
+
```markdown
|
|
116
|
+
## Requirements Addressed
|
|
117
|
+
|
|
118
|
+
{REQ-IDs from plan frontmatter, linked to REQUIREMENTS.md descriptions}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**5. Testing section:**
|
|
122
|
+
```markdown
|
|
123
|
+
## Verification
|
|
124
|
+
|
|
125
|
+
- [x] Automated verification: {pass/fail from VERIFICATION.md}
|
|
126
|
+
- {human verification items from VERIFICATION.md, if any}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**6. Decisions section:**
|
|
130
|
+
```markdown
|
|
131
|
+
## Key Decisions
|
|
132
|
+
|
|
133
|
+
{Decisions from STATE.md accumulated context relevant to this phase}
|
|
134
|
+
```
|
|
135
|
+
</step>
|
|
136
|
+
|
|
137
|
+
<step name="create_pr">
|
|
138
|
+
Create the PR using the generated body:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
gh pr create \
|
|
142
|
+
--title "Phase ${PHASE_NUMBER}: ${PHASE_NAME}" \
|
|
143
|
+
--body "${PR_BODY}" \
|
|
144
|
+
--base main
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
If `--draft` flag was passed: add `--draft`.
|
|
148
|
+
|
|
149
|
+
Report: "PR #{number} created: {url}"
|
|
150
|
+
</step>
|
|
151
|
+
|
|
152
|
+
<step name="optional_review">
|
|
153
|
+
Ask if user wants to trigger a code review:
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
question:
|
|
157
|
+
question: "PR created. Run a code review before merge?"
|
|
158
|
+
options:
|
|
159
|
+
- label: "Skip review"
|
|
160
|
+
description: "PR is ready — merge when CI passes"
|
|
161
|
+
- label: "Self-review"
|
|
162
|
+
description: "I'll review the diff in the PR myself"
|
|
163
|
+
- label: "Request review"
|
|
164
|
+
description: "Request review from a teammate"
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**If "Request review":**
|
|
168
|
+
```bash
|
|
169
|
+
gh pr edit ${PR_NUMBER} --add-reviewer "${REVIEWER}"
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**If "Self-review":**
|
|
173
|
+
Report the PR URL and suggest: "Review the diff at {url}/files"
|
|
174
|
+
</step>
|
|
175
|
+
|
|
176
|
+
<step name="track_shipping">
|
|
177
|
+
Update STATE.md to reflect the shipping action:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state update "Last Activity" "$(date +%Y-%m-%d)"
|
|
181
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state update "Status" "Phase ${PHASE_NUMBER} shipped — PR #${PR_NUMBER}"
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
If `commit_docs` is true:
|
|
185
|
+
```bash
|
|
186
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" commit "docs(${padded_phase}): ship phase ${PHASE_NUMBER} — PR #${PR_NUMBER}" --files .planning/STATE.md
|
|
187
|
+
```
|
|
188
|
+
</step>
|
|
189
|
+
|
|
190
|
+
<step name="report">
|
|
191
|
+
```
|
|
192
|
+
───────────────────────────────────────────────────────────────
|
|
193
|
+
|
|
194
|
+
## ✓ Phase {X}: {Name} — Shipped
|
|
195
|
+
|
|
196
|
+
PR: #{number} ({url})
|
|
197
|
+
Branch: {branch} → main
|
|
198
|
+
Commits: {count}
|
|
199
|
+
Verification: ✓ Passed
|
|
200
|
+
Requirements: {N} REQ-IDs addressed
|
|
201
|
+
|
|
202
|
+
Next steps:
|
|
203
|
+
- Review/approve PR
|
|
204
|
+
- Merge when CI passes
|
|
205
|
+
- /gsd-complete-milestone (if last phase in milestone)
|
|
206
|
+
- /gsd-progress (to see what's next)
|
|
207
|
+
|
|
208
|
+
───────────────────────────────────────────────────────────────
|
|
209
|
+
```
|
|
210
|
+
</step>
|
|
211
|
+
|
|
212
|
+
</process>
|
|
213
|
+
|
|
214
|
+
<offer_next>
|
|
215
|
+
After shipping:
|
|
216
|
+
|
|
217
|
+
- /gsd-complete-milestone — if all phases in milestone are done
|
|
218
|
+
- /gsd-progress — see overall project state
|
|
219
|
+
- /gsd-execute-phase {next} — continue to next phase
|
|
220
|
+
</offer_next>
|
|
221
|
+
|
|
222
|
+
<success_criteria>
|
|
223
|
+
- [ ] Preflight checks passed (verification, clean tree, branch, remote, gh)
|
|
224
|
+
- [ ] Branch pushed to remote
|
|
225
|
+
- [ ] PR created with rich auto-generated body
|
|
226
|
+
- [ ] STATE.md updated with shipping status
|
|
227
|
+
- [ ] User knows PR number and next steps
|
|
228
|
+
</success_criteria>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<objective>
|
|
2
|
+
Display comprehensive project statistics including phases, plans, requirements, git metrics, and timeline.
|
|
3
|
+
</objective>
|
|
4
|
+
|
|
5
|
+
<required_reading>
|
|
6
|
+
read all files referenced by the invoking prompt's execution_context before starting.
|
|
7
|
+
</required_reading>
|
|
8
|
+
|
|
9
|
+
<process>
|
|
10
|
+
|
|
11
|
+
<step name="gather_stats">
|
|
12
|
+
Gather project statistics:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
STATS=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" stats json)
|
|
16
|
+
if [[ "$STATS" == @file:* ]]; then STATS=$(cat "${STATS#@file:}"); fi
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Extract fields from JSON: `milestone_version`, `milestone_name`, `phases`, `phases_completed`, `phases_total`, `total_plans`, `total_summaries`, `percent`, `plan_percent`, `requirements_total`, `requirements_complete`, `git_commits`, `git_first_commit_date`, `last_activity`.
|
|
20
|
+
</step>
|
|
21
|
+
|
|
22
|
+
<step name="present_stats">
|
|
23
|
+
Present to the user with this format:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
# 📊 Project Statistics — {milestone_version} {milestone_name}
|
|
27
|
+
|
|
28
|
+
## Progress
|
|
29
|
+
[████████░░] X/Y phases (Z%)
|
|
30
|
+
|
|
31
|
+
## Plans
|
|
32
|
+
X/Y plans complete (Z%)
|
|
33
|
+
|
|
34
|
+
## Phases
|
|
35
|
+
| Phase | Name | Plans | Completed | Status |
|
|
36
|
+
|-------|------|-------|-----------|--------|
|
|
37
|
+
| ... | ... | ... | ... | ... |
|
|
38
|
+
|
|
39
|
+
## Requirements
|
|
40
|
+
✅ X/Y requirements complete
|
|
41
|
+
|
|
42
|
+
## Git
|
|
43
|
+
- **Commits:** N
|
|
44
|
+
- **Started:** YYYY-MM-DD
|
|
45
|
+
- **Last activity:** YYYY-MM-DD
|
|
46
|
+
|
|
47
|
+
## Timeline
|
|
48
|
+
- **Project age:** N days
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
If no `.planning/` directory exists, inform the user to run `/gsd-new-project` first.
|
|
52
|
+
</step>
|
|
53
|
+
|
|
54
|
+
</process>
|
|
55
|
+
|
|
56
|
+
<success_criteria>
|
|
57
|
+
- [ ] Statistics gathered from project state
|
|
58
|
+
- [ ] Results formatted clearly
|
|
59
|
+
- [ ] Displayed to user
|
|
60
|
+
</success_criteria>
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
<internal_workflow>
|
|
2
|
+
|
|
3
|
+
**This is an INTERNAL workflow — NOT a user-facing command.**
|
|
4
|
+
|
|
5
|
+
There is no `/gsd-transition` command. This workflow is invoked automatically by
|
|
6
|
+
`execute-phase` during auto-advance, or inline by the orchestrator after phase
|
|
7
|
+
verification. Users should never be told to run `/gsd-transition`.
|
|
8
|
+
|
|
9
|
+
**Valid user commands for phase progression:**
|
|
10
|
+
- `/gsd-discuss-phase {N}` — discuss a phase before planning
|
|
11
|
+
- `/gsd-plan-phase {N}` — plan a phase
|
|
12
|
+
- `/gsd-execute-phase {N}` — execute a phase
|
|
13
|
+
- `/gsd-progress` — see roadmap progress
|
|
14
|
+
|
|
15
|
+
</internal_workflow>
|
|
16
|
+
|
|
1
17
|
<required_reading>
|
|
2
18
|
|
|
3
19
|
**read these files NOW:**
|
|
@@ -10,13 +26,13 @@
|
|
|
10
26
|
|
|
11
27
|
</required_reading>
|
|
12
28
|
|
|
13
|
-
<
|
|
29
|
+
<objective>
|
|
14
30
|
|
|
15
31
|
Mark current phase complete and advance to next. This is the natural point where progress tracking and PROJECT.md evolution happen.
|
|
16
32
|
|
|
17
33
|
"Planning next phase" = "current phase is done"
|
|
18
34
|
|
|
19
|
-
</
|
|
35
|
+
</objective>
|
|
20
36
|
|
|
21
37
|
<process>
|
|
22
38
|
|
|
@@ -25,8 +41,8 @@ Mark current phase complete and advance to next. This is the natural point where
|
|
|
25
41
|
Before transition, read project state:
|
|
26
42
|
|
|
27
43
|
```bash
|
|
28
|
-
cat .planning/STATE.md 2>/dev/null
|
|
29
|
-
cat .planning/PROJECT.md 2>/dev/null
|
|
44
|
+
cat .planning/STATE.md 2>/dev/null || true
|
|
45
|
+
cat .planning/PROJECT.md 2>/dev/null || true
|
|
30
46
|
```
|
|
31
47
|
|
|
32
48
|
Parse current position to verify we're transitioning the right phase.
|
|
@@ -39,8 +55,8 @@ Note accumulated context that may need updating after transition.
|
|
|
39
55
|
Check current phase has all plan summaries:
|
|
40
56
|
|
|
41
57
|
```bash
|
|
42
|
-
ls .planning/phases/XX-current/*-PLAN.md 2>/dev/null | sort
|
|
43
|
-
ls .planning/phases/XX-current/*-SUMMARY.md 2>/dev/null | sort
|
|
58
|
+
(ls .planning/phases/XX-current/*-PLAN.md 2>/dev/null || true) | sort
|
|
59
|
+
(ls .planning/phases/XX-current/*-SUMMARY.md 2>/dev/null || true) | sort
|
|
44
60
|
```
|
|
45
61
|
|
|
46
62
|
**Verification logic:**
|
|
@@ -53,11 +69,35 @@ ls .planning/phases/XX-current/*-SUMMARY.md 2>/dev/null | sort
|
|
|
53
69
|
<config-check>
|
|
54
70
|
|
|
55
71
|
```bash
|
|
56
|
-
cat .planning/config.json 2>/dev/null
|
|
72
|
+
cat .planning/config.json 2>/dev/null || true
|
|
57
73
|
```
|
|
58
74
|
|
|
59
75
|
</config-check>
|
|
60
76
|
|
|
77
|
+
**Check for verification debt in this phase:**
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# Count outstanding items in current phase
|
|
81
|
+
OUTSTANDING=""
|
|
82
|
+
for f in .planning/phases/XX-current/*-UAT.md .planning/phases/XX-current/*-VERIFICATION.md; do
|
|
83
|
+
[ -f "$f" ] || continue
|
|
84
|
+
grep -q "result: pending\|result: blocked\|status: partial\|status: human_needed\|status: diagnosed" "$f" && OUTSTANDING="$OUTSTANDING\n$(basename $f)"
|
|
85
|
+
done
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**If OUTSTANDING is not empty:**
|
|
89
|
+
|
|
90
|
+
Append to the completion confirmation message (regardless of mode):
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
Outstanding verification items in this phase:
|
|
94
|
+
{list filenames}
|
|
95
|
+
|
|
96
|
+
These will carry forward as debt. Review: `/gsd-audit-uat`
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
This does NOT block transition — it ensures the user sees the debt before confirming.
|
|
100
|
+
|
|
61
101
|
**If all plans complete:**
|
|
62
102
|
|
|
63
103
|
<if mode="yolo">
|
|
@@ -111,7 +151,7 @@ Wait for user decision.
|
|
|
111
151
|
Check for lingering handoffs:
|
|
112
152
|
|
|
113
153
|
```bash
|
|
114
|
-
ls .planning/phases/XX-current/.continue-here*.md 2>/dev/null
|
|
154
|
+
ls .planning/phases/XX-current/.continue-here*.md 2>/dev/null || true
|
|
115
155
|
```
|
|
116
156
|
|
|
117
157
|
If found, delete them — phase is complete, handoffs are stale.
|
|
@@ -341,7 +381,7 @@ Resume file: None
|
|
|
341
381
|
|
|
342
382
|
The `is_last_phase` field from the phase complete result tells you directly:
|
|
343
383
|
- `is_last_phase: false` → More phases remain → Go to **Route A**
|
|
344
|
-
- `is_last_phase: true` →
|
|
384
|
+
- `is_last_phase: true` → Last phase done → **Check for workstream collisions first**
|
|
345
385
|
|
|
346
386
|
The `next_phase` and `next_phase_name` fields give you the next phase details.
|
|
347
387
|
|
|
@@ -354,6 +394,34 @@ This returns all phases with goals, disk status, and completion info.
|
|
|
354
394
|
|
|
355
395
|
---
|
|
356
396
|
|
|
397
|
+
**Workstream collision check (when `is_last_phase: true`):**
|
|
398
|
+
|
|
399
|
+
Before routing to Route B, check whether other workstreams are still active.
|
|
400
|
+
This prevents one workstream from advancing or completing the milestone while
|
|
401
|
+
other workstreams are still working on their phases.
|
|
402
|
+
|
|
403
|
+
**Skip this check if NOT in workstream mode** (i.e., `GSD_WORKSTREAM` is not set / flat mode).
|
|
404
|
+
In flat mode, go directly to **Route B**.
|
|
405
|
+
|
|
406
|
+
```bash
|
|
407
|
+
# Only check if we're in workstream mode
|
|
408
|
+
if [ -n "$GSD_WORKSTREAM" ]; then
|
|
409
|
+
WS_LIST=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" workstream list --raw)
|
|
410
|
+
fi
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
Parse the JSON result. The output has `{ mode, workstreams: [...] }`.
|
|
414
|
+
Each workstream entry has: `name`, `status`, `current_phase`, `phase_count`, `completed_phases`.
|
|
415
|
+
|
|
416
|
+
Filter out the current workstream (`$GSD_WORKSTREAM`) and any workstreams with
|
|
417
|
+
status containing "milestone complete" or "archived" (case-insensitive).
|
|
418
|
+
The remaining entries are **other active workstreams**.
|
|
419
|
+
|
|
420
|
+
- **If other active workstreams exist** → Go to **Route B1**
|
|
421
|
+
- **If NO other active workstreams** (or flat mode) → Go to **Route B**
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
357
425
|
**Route A: More phases remain in milestone**
|
|
358
426
|
|
|
359
427
|
read ROADMAP.md to get the next phase's name and goal.
|
|
@@ -361,7 +429,7 @@ read ROADMAP.md to get the next phase's name and goal.
|
|
|
361
429
|
**Check if next phase has CONTEXT.md:**
|
|
362
430
|
|
|
363
431
|
```bash
|
|
364
|
-
ls .planning/phases/*[X+1]*/*-CONTEXT.md 2>/dev/null
|
|
432
|
+
ls .planning/phases/*[X+1]*/*-CONTEXT.md 2>/dev/null || true
|
|
365
433
|
```
|
|
366
434
|
|
|
367
435
|
**If next phase exists:**
|
|
@@ -378,7 +446,7 @@ Next: Phase [X+1] — [Name]
|
|
|
378
446
|
⚡ Auto-continuing: Plan Phase [X+1] in detail
|
|
379
447
|
```
|
|
380
448
|
|
|
381
|
-
Exit skill and invoke command("/gsd-plan-phase [X+1] --auto")
|
|
449
|
+
Exit skill and invoke command("/gsd-plan-phase [X+1] --auto ${GSD_WS}")
|
|
382
450
|
|
|
383
451
|
**If CONTEXT.md does NOT exist:**
|
|
384
452
|
|
|
@@ -390,7 +458,7 @@ Next: Phase [X+1] — [Name]
|
|
|
390
458
|
⚡ Auto-continuing: Discuss Phase [X+1] first
|
|
391
459
|
```
|
|
392
460
|
|
|
393
|
-
Exit skill and invoke command("/gsd-discuss-phase [X+1] --auto")
|
|
461
|
+
Exit skill and invoke command("/gsd-discuss-phase [X+1] --auto ${GSD_WS}")
|
|
394
462
|
|
|
395
463
|
</if>
|
|
396
464
|
|
|
@@ -407,15 +475,15 @@ Exit skill and invoke command("/gsd-discuss-phase [X+1] --auto")
|
|
|
407
475
|
|
|
408
476
|
**Phase [X+1]: [Name]** — [Goal from ROADMAP.md]
|
|
409
477
|
|
|
410
|
-
`/gsd-discuss-phase [X+1]` — gather context and clarify approach
|
|
478
|
+
`/gsd-discuss-phase [X+1] ${GSD_WS}` — gather context and clarify approach
|
|
411
479
|
|
|
412
480
|
*`/new` first → fresh context window*
|
|
413
481
|
|
|
414
482
|
---
|
|
415
483
|
|
|
416
484
|
**Also available:**
|
|
417
|
-
- `/gsd-plan-phase [X+1]` — skip discussion, plan directly
|
|
418
|
-
- `/gsd-research-phase [X+1]` — investigate unknowns
|
|
485
|
+
- `/gsd-plan-phase [X+1] ${GSD_WS}` — skip discussion, plan directly
|
|
486
|
+
- `/gsd-research-phase [X+1] ${GSD_WS}` — investigate unknowns
|
|
419
487
|
|
|
420
488
|
---
|
|
421
489
|
```
|
|
@@ -432,26 +500,85 @@ Exit skill and invoke command("/gsd-discuss-phase [X+1] --auto")
|
|
|
432
500
|
**Phase [X+1]: [Name]** — [Goal from ROADMAP.md]
|
|
433
501
|
*✓ Context gathered, ready to plan*
|
|
434
502
|
|
|
435
|
-
`/gsd-plan-phase [X+1]`
|
|
503
|
+
`/gsd-plan-phase [X+1] ${GSD_WS}`
|
|
436
504
|
|
|
437
505
|
*`/new` first → fresh context window*
|
|
438
506
|
|
|
439
507
|
---
|
|
440
508
|
|
|
441
509
|
**Also available:**
|
|
442
|
-
- `/gsd-discuss-phase [X+1]` — revisit context
|
|
443
|
-
- `/gsd-research-phase [X+1]` — investigate unknowns
|
|
510
|
+
- `/gsd-discuss-phase [X+1] ${GSD_WS}` — revisit context
|
|
511
|
+
- `/gsd-research-phase [X+1] ${GSD_WS}` — investigate unknowns
|
|
512
|
+
|
|
513
|
+
---
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
</if>
|
|
444
517
|
|
|
445
518
|
---
|
|
519
|
+
|
|
520
|
+
**Route B1: Workstream done, other workstreams still active**
|
|
521
|
+
|
|
522
|
+
This route is reached when `is_last_phase: true` AND the collision check found
|
|
523
|
+
other active workstreams. Do NOT suggest completing the milestone or advancing
|
|
524
|
+
to the next milestone — other workstreams are still working.
|
|
525
|
+
|
|
526
|
+
**Clear auto-advance chain flag** — workstream boundary is the natural stopping point:
|
|
527
|
+
|
|
528
|
+
```bash
|
|
529
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-set workflow._auto_chain_active false
|
|
446
530
|
```
|
|
447
531
|
|
|
532
|
+
<if mode="yolo">
|
|
533
|
+
|
|
534
|
+
Override auto-advance: do NOT auto-continue to milestone completion.
|
|
535
|
+
Present the blocking information and stop.
|
|
536
|
+
|
|
448
537
|
</if>
|
|
449
538
|
|
|
539
|
+
Present (all modes):
|
|
540
|
+
|
|
541
|
+
```
|
|
542
|
+
## ✓ Phase {X}: {Phase Name} Complete
|
|
543
|
+
|
|
544
|
+
This workstream's phases are complete. Other workstreams are still active:
|
|
545
|
+
|
|
546
|
+
| Workstream | Status | Phase | Progress |
|
|
547
|
+
|------------|--------|-------|----------|
|
|
548
|
+
| {name} | {status} | {current_phase} | {completed_phases}/{phase_count} |
|
|
549
|
+
| ... | ... | ... | ... |
|
|
550
|
+
|
|
551
|
+
---
|
|
552
|
+
|
|
553
|
+
## Next Steps
|
|
554
|
+
|
|
555
|
+
Archive this workstream:
|
|
556
|
+
|
|
557
|
+
`/gsd-workstreams complete {current_ws_name} ${GSD_WS}`
|
|
558
|
+
|
|
559
|
+
See overall milestone progress:
|
|
560
|
+
|
|
561
|
+
`/gsd-workstreams progress ${GSD_WS}`
|
|
562
|
+
|
|
563
|
+
*Milestone completion will be available once all workstreams finish.*
|
|
564
|
+
|
|
565
|
+
---
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
Do NOT suggest `/gsd-complete-milestone` or `/gsd-new-milestone`.
|
|
569
|
+
Do NOT auto-invoke any further slash commands.
|
|
570
|
+
|
|
571
|
+
**Stop here.** The user must explicitly decide what to do next.
|
|
572
|
+
|
|
450
573
|
---
|
|
451
574
|
|
|
452
575
|
**Route B: Milestone complete (all phases done)**
|
|
453
576
|
|
|
577
|
+
**This route is only reached when:**
|
|
578
|
+
- `is_last_phase: true` AND no other active workstreams exist (or flat mode)
|
|
579
|
+
|
|
454
580
|
**Clear auto-advance chain flag** — milestone boundary is the natural stopping point:
|
|
581
|
+
|
|
455
582
|
```bash
|
|
456
583
|
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-set workflow._auto_chain_active false
|
|
457
584
|
```
|
|
@@ -466,7 +593,7 @@ Phase {X} marked complete.
|
|
|
466
593
|
⚡ Auto-continuing: Complete milestone and archive
|
|
467
594
|
```
|
|
468
595
|
|
|
469
|
-
Exit skill and invoke command("/gsd-complete-milestone {version}")
|
|
596
|
+
Exit skill and invoke command("/gsd-complete-milestone {version} ${GSD_WS}")
|
|
470
597
|
|
|
471
598
|
</if>
|
|
472
599
|
|
|
@@ -483,7 +610,7 @@ Exit skill and invoke command("/gsd-complete-milestone {version}")
|
|
|
483
610
|
|
|
484
611
|
**Complete Milestone {version}** — archive and prepare for next
|
|
485
612
|
|
|
486
|
-
`/gsd-complete-milestone {version}`
|
|
613
|
+
`/gsd-complete-milestone {version} ${GSD_WS}`
|
|
487
614
|
|
|
488
615
|
*`/new` first → fresh context window*
|
|
489
616
|
|