get-shit-done-cc 1.7.0 → 1.8.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-debugger.md +20 -1
- package/agents/gsd-executor.md +15 -0
- package/agents/gsd-phase-researcher.md +9 -0
- package/agents/gsd-planner.md +19 -0
- package/agents/gsd-research-synthesizer.md +9 -0
- package/commands/gsd/add-todo.md +11 -0
- package/commands/gsd/check-todos.md +11 -0
- package/commands/gsd/execute-phase.md +3 -1
- package/commands/gsd/help.md +27 -0
- package/commands/gsd/new-milestone.md +246 -262
- package/commands/gsd/new-project.md +15 -2
- package/commands/gsd/pause-work.md +11 -0
- package/commands/gsd/plan-milestone-gaps.md +11 -0
- package/commands/gsd/progress.md +6 -0
- package/commands/gsd/quick.md +13 -13
- package/commands/gsd/remove-phase.md +11 -0
- package/get-shit-done/references/planning-config.md +94 -0
- package/get-shit-done/templates/config.json +4 -0
- package/get-shit-done/workflows/complete-milestone.md +11 -0
- package/get-shit-done/workflows/diagnose-issues.md +11 -0
- package/get-shit-done/workflows/discuss-phase.md +11 -0
- package/get-shit-done/workflows/execute-phase.md +23 -0
- package/get-shit-done/workflows/execute-plan.md +23 -0
- package/get-shit-done/workflows/map-codebase.md +11 -0
- package/get-shit-done/workflows/verify-work.md +11 -0
- package/hooks/gsd-check-update.js +14 -4
- package/package.json +1 -1
|
@@ -237,7 +237,7 @@ EOF
|
|
|
237
237
|
|
|
238
238
|
## Phase 5: Workflow Preferences
|
|
239
239
|
|
|
240
|
-
Ask all workflow preferences in a single AskUserQuestion call (
|
|
240
|
+
Ask all workflow preferences in a single AskUserQuestion call (4 questions):
|
|
241
241
|
|
|
242
242
|
```
|
|
243
243
|
questions: [
|
|
@@ -268,11 +268,24 @@ questions: [
|
|
|
268
268
|
{ label: "Parallel (Recommended)", description: "Independent plans run simultaneously" },
|
|
269
269
|
{ label: "Sequential", description: "One plan at a time" }
|
|
270
270
|
]
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
header: "Git Tracking",
|
|
274
|
+
question: "Commit planning docs to git?",
|
|
275
|
+
multiSelect: false,
|
|
276
|
+
options: [
|
|
277
|
+
{ label: "Yes (Recommended)", description: "Planning docs tracked in version control" },
|
|
278
|
+
{ label: "No", description: "Keep .planning/ local-only (add to .gitignore)" }
|
|
279
|
+
]
|
|
271
280
|
}
|
|
272
281
|
]
|
|
273
282
|
```
|
|
274
283
|
|
|
275
|
-
Create `.planning/config.json` with chosen mode, depth, and
|
|
284
|
+
Create `.planning/config.json` with chosen mode, depth, parallelization, and commit_docs setting.
|
|
285
|
+
|
|
286
|
+
**If commit_docs = No:**
|
|
287
|
+
- Set `planning.commit_docs: false` in config.json
|
|
288
|
+
- Add `.planning/` to `.gitignore` (create if needed)
|
|
276
289
|
|
|
277
290
|
**Commit config.json:**
|
|
278
291
|
|
|
@@ -90,6 +90,17 @@ Be specific enough for a fresh Claude to understand immediately.
|
|
|
90
90
|
</step>
|
|
91
91
|
|
|
92
92
|
<step name="commit">
|
|
93
|
+
**Check planning config:**
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
|
97
|
+
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
|
|
101
|
+
|
|
102
|
+
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
|
103
|
+
|
|
93
104
|
```bash
|
|
94
105
|
git add .planning/phases/*/.continue-here.md
|
|
95
106
|
git commit -m "wip: [phase-name] paused at task [X]/[Y]"
|
|
@@ -158,6 +158,17 @@ mkdir -p ".planning/phases/{NN}-{name}"
|
|
|
158
158
|
|
|
159
159
|
## 8. Commit Roadmap Update
|
|
160
160
|
|
|
161
|
+
**Check planning config:**
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
|
165
|
+
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
|
|
169
|
+
|
|
170
|
+
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
|
171
|
+
|
|
161
172
|
```bash
|
|
162
173
|
git add .planning/ROADMAP.md
|
|
163
174
|
git commit -m "docs(roadmap): add gap closure phases {N}-{M}"
|
package/commands/gsd/progress.md
CHANGED
|
@@ -21,6 +21,12 @@ Provides situational awareness before continuing work.
|
|
|
21
21
|
<step name="verify">
|
|
22
22
|
**Verify planning structure exists:**
|
|
23
23
|
|
|
24
|
+
Use Bash (not Glob) to check—Glob respects .gitignore but .planning/ is often gitignored:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
test -d .planning && echo "exists" || echo "missing"
|
|
28
|
+
```
|
|
29
|
+
|
|
24
30
|
If no `.planning/` directory:
|
|
25
31
|
|
|
26
32
|
```
|
package/commands/gsd/quick.md
CHANGED
|
@@ -140,7 +140,7 @@ Task(
|
|
|
140
140
|
</constraints>
|
|
141
141
|
|
|
142
142
|
<output>
|
|
143
|
-
Write
|
|
143
|
+
Write plan to: ${QUICK_DIR}/${next_num}-PLAN.md
|
|
144
144
|
Return: ## PLANNING COMPLETE with plan path
|
|
145
145
|
</output>
|
|
146
146
|
",
|
|
@@ -150,11 +150,11 @@ Return: ## PLANNING COMPLETE with plan path
|
|
|
150
150
|
```
|
|
151
151
|
|
|
152
152
|
After planner returns:
|
|
153
|
-
1. Verify
|
|
153
|
+
1. Verify plan exists at `${QUICK_DIR}/${next_num}-PLAN.md`
|
|
154
154
|
2. Extract plan count (typically 1 for quick tasks)
|
|
155
|
-
3. Report: "Plan created: ${QUICK_DIR}
|
|
155
|
+
3. Report: "Plan created: ${QUICK_DIR}/${next_num}-PLAN.md"
|
|
156
156
|
|
|
157
|
-
If
|
|
157
|
+
If plan not found, error: "Planner failed to create ${next_num}-PLAN.md"
|
|
158
158
|
|
|
159
159
|
---
|
|
160
160
|
|
|
@@ -167,13 +167,13 @@ Task(
|
|
|
167
167
|
prompt="
|
|
168
168
|
Execute quick task ${next_num}.
|
|
169
169
|
|
|
170
|
-
Plan: @${QUICK_DIR}
|
|
170
|
+
Plan: @${QUICK_DIR}/${next_num}-PLAN.md
|
|
171
171
|
Project state: @.planning/STATE.md
|
|
172
172
|
|
|
173
173
|
<constraints>
|
|
174
174
|
- Execute all tasks in the plan
|
|
175
175
|
- Commit each task atomically
|
|
176
|
-
- Create SUMMARY.md
|
|
176
|
+
- Create summary at: ${QUICK_DIR}/${next_num}-SUMMARY.md
|
|
177
177
|
- Do NOT update ROADMAP.md (quick tasks are separate from planned phases)
|
|
178
178
|
</constraints>
|
|
179
179
|
",
|
|
@@ -183,11 +183,11 @@ Project state: @.planning/STATE.md
|
|
|
183
183
|
```
|
|
184
184
|
|
|
185
185
|
After executor returns:
|
|
186
|
-
1. Verify
|
|
186
|
+
1. Verify summary exists at `${QUICK_DIR}/${next_num}-SUMMARY.md`
|
|
187
187
|
2. Extract commit hash from executor output
|
|
188
188
|
3. Report completion status
|
|
189
189
|
|
|
190
|
-
If
|
|
190
|
+
If summary not found, error: "Executor failed to create ${next_num}-SUMMARY.md"
|
|
191
191
|
|
|
192
192
|
Note: For quick tasks producing multiple plans (rare), spawn executors in parallel waves per execute-phase patterns.
|
|
193
193
|
|
|
@@ -235,8 +235,8 @@ Stage and commit quick task artifacts:
|
|
|
235
235
|
|
|
236
236
|
```bash
|
|
237
237
|
# Stage quick task artifacts
|
|
238
|
-
git add ${QUICK_DIR}
|
|
239
|
-
git add ${QUICK_DIR}
|
|
238
|
+
git add ${QUICK_DIR}/${next_num}-PLAN.md
|
|
239
|
+
git add ${QUICK_DIR}/${next_num}-SUMMARY.md
|
|
240
240
|
git add .planning/STATE.md
|
|
241
241
|
|
|
242
242
|
# Commit with quick task format
|
|
@@ -263,7 +263,7 @@ GSD > QUICK TASK COMPLETE
|
|
|
263
263
|
|
|
264
264
|
Quick Task ${next_num}: ${DESCRIPTION}
|
|
265
265
|
|
|
266
|
-
Summary: ${QUICK_DIR}
|
|
266
|
+
Summary: ${QUICK_DIR}/${next_num}-SUMMARY.md
|
|
267
267
|
Commit: ${commit_hash}
|
|
268
268
|
|
|
269
269
|
---
|
|
@@ -279,8 +279,8 @@ Ready for next task: /gsd:quick
|
|
|
279
279
|
- [ ] Slug generated (lowercase, hyphens, max 40 chars)
|
|
280
280
|
- [ ] Next number calculated (001, 002, 003...)
|
|
281
281
|
- [ ] Directory created at `.planning/quick/NNN-slug/`
|
|
282
|
-
- [ ] PLAN.md created by planner
|
|
283
|
-
- [ ] SUMMARY.md created by executor
|
|
282
|
+
- [ ] `${next_num}-PLAN.md` created by planner
|
|
283
|
+
- [ ] `${next_num}-SUMMARY.md` created by executor
|
|
284
284
|
- [ ] STATE.md updated with quick task row
|
|
285
285
|
- [ ] Artifacts committed
|
|
286
286
|
</success_criteria>
|
|
@@ -252,6 +252,17 @@ Update any internal references to reflect new numbering.
|
|
|
252
252
|
<step name="commit">
|
|
253
253
|
Stage and commit the removal:
|
|
254
254
|
|
|
255
|
+
**Check planning config:**
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
|
259
|
+
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
|
|
263
|
+
|
|
264
|
+
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
|
265
|
+
|
|
255
266
|
```bash
|
|
256
267
|
git add .planning/
|
|
257
268
|
git commit -m "chore: remove phase {target} ({original-phase-name})"
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
<planning_config>
|
|
2
|
+
|
|
3
|
+
Configuration options for `.planning/` directory behavior.
|
|
4
|
+
|
|
5
|
+
<config_schema>
|
|
6
|
+
```json
|
|
7
|
+
"planning": {
|
|
8
|
+
"commit_docs": true,
|
|
9
|
+
"search_gitignored": false
|
|
10
|
+
}
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
| Option | Default | Description |
|
|
14
|
+
|--------|---------|-------------|
|
|
15
|
+
| `commit_docs` | `true` | Whether to commit planning artifacts to git |
|
|
16
|
+
| `search_gitignored` | `false` | Add `--no-ignore` to broad rg searches |
|
|
17
|
+
</config_schema>
|
|
18
|
+
|
|
19
|
+
<commit_docs_behavior>
|
|
20
|
+
|
|
21
|
+
**When `commit_docs: true` (default):**
|
|
22
|
+
- Planning files committed normally
|
|
23
|
+
- SUMMARY.md, STATE.md, ROADMAP.md tracked in git
|
|
24
|
+
- Full history of planning decisions preserved
|
|
25
|
+
|
|
26
|
+
**When `commit_docs: false`:**
|
|
27
|
+
- Skip all `git add`/`git commit` for `.planning/` files
|
|
28
|
+
- User must add `.planning/` to `.gitignore`
|
|
29
|
+
- Useful for: OSS contributions, client projects, keeping planning private
|
|
30
|
+
|
|
31
|
+
**Checking the config:**
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Check config.json first
|
|
35
|
+
COMMIT_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
|
36
|
+
|
|
37
|
+
# Auto-detect gitignored (overrides config)
|
|
38
|
+
git check-ignore -q .planning 2>/dev/null && COMMIT_DOCS=false
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Auto-detection:** If `.planning/` is gitignored, `commit_docs` is automatically `false` regardless of config.json. This prevents git errors when users have `.planning/` in `.gitignore`.
|
|
42
|
+
|
|
43
|
+
**Conditional git operations:**
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
if [ "$COMMIT_DOCS" = "true" ]; then
|
|
47
|
+
git add .planning/STATE.md
|
|
48
|
+
git commit -m "docs: update state"
|
|
49
|
+
fi
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
</commit_docs_behavior>
|
|
53
|
+
|
|
54
|
+
<search_behavior>
|
|
55
|
+
|
|
56
|
+
**When `search_gitignored: false` (default):**
|
|
57
|
+
- Standard rg behavior (respects .gitignore)
|
|
58
|
+
- Direct path searches work: `rg "pattern" .planning/` finds files
|
|
59
|
+
- Broad searches skip gitignored: `rg "pattern"` skips `.planning/`
|
|
60
|
+
|
|
61
|
+
**When `search_gitignored: true`:**
|
|
62
|
+
- Add `--no-ignore` to broad rg searches that should include `.planning/`
|
|
63
|
+
- Only needed when searching entire repo and expecting `.planning/` matches
|
|
64
|
+
|
|
65
|
+
**Note:** Most GSD operations use direct file reads or explicit paths, which work regardless of gitignore status.
|
|
66
|
+
|
|
67
|
+
</search_behavior>
|
|
68
|
+
|
|
69
|
+
<setup_uncommitted_mode>
|
|
70
|
+
|
|
71
|
+
To use uncommitted mode:
|
|
72
|
+
|
|
73
|
+
1. **Set config:**
|
|
74
|
+
```json
|
|
75
|
+
"planning": {
|
|
76
|
+
"commit_docs": false,
|
|
77
|
+
"search_gitignored": true
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
2. **Add to .gitignore:**
|
|
82
|
+
```
|
|
83
|
+
.planning/
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
3. **Existing tracked files:** If `.planning/` was previously tracked:
|
|
87
|
+
```bash
|
|
88
|
+
git rm -r --cached .planning/
|
|
89
|
+
git commit -m "chore: stop tracking planning docs"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
</setup_uncommitted_mode>
|
|
93
|
+
|
|
94
|
+
</planning_config>
|
|
@@ -620,6 +620,17 @@ git push origin v[X.Y]
|
|
|
620
620
|
|
|
621
621
|
Commit milestone completion including archive files and deletions.
|
|
622
622
|
|
|
623
|
+
**Check planning config:**
|
|
624
|
+
|
|
625
|
+
```bash
|
|
626
|
+
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
|
627
|
+
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
|
628
|
+
```
|
|
629
|
+
|
|
630
|
+
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
|
|
631
|
+
|
|
632
|
+
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
|
633
|
+
|
|
623
634
|
```bash
|
|
624
635
|
# Stage archive files (new)
|
|
625
636
|
git add .planning/milestones/v[X.Y]-ROADMAP.md
|
|
@@ -156,6 +156,17 @@ For each gap in the Gaps section, add artifacts and missing fields:
|
|
|
156
156
|
|
|
157
157
|
Update status in frontmatter to "diagnosed".
|
|
158
158
|
|
|
159
|
+
**Check planning config:**
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
|
163
|
+
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
|
|
167
|
+
|
|
168
|
+
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
|
169
|
+
|
|
159
170
|
Commit the updated UAT.md:
|
|
160
171
|
```bash
|
|
161
172
|
git add ".planning/phases/XX-name/{phase}-UAT.md"
|
|
@@ -393,6 +393,17 @@ Created: .planning/phases/${PADDED_PHASE}-${SLUG}/${PADDED_PHASE}-CONTEXT.md
|
|
|
393
393
|
<step name="git_commit">
|
|
394
394
|
Commit phase context:
|
|
395
395
|
|
|
396
|
+
**Check planning config:**
|
|
397
|
+
|
|
398
|
+
```bash
|
|
399
|
+
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
|
400
|
+
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
|
|
404
|
+
|
|
405
|
+
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
|
406
|
+
|
|
396
407
|
```bash
|
|
397
408
|
git add "${PHASE_DIR}/${PADDED_PHASE}-CONTEXT.md"
|
|
398
409
|
git commit -m "$(cat <<'EOF'
|
|
@@ -8,6 +8,7 @@ The orchestrator's job is coordination, not execution. Each subagent loads the f
|
|
|
8
8
|
|
|
9
9
|
<required_reading>
|
|
10
10
|
Read STATE.md before any operation to load project context.
|
|
11
|
+
Read config.json for planning behavior settings.
|
|
11
12
|
</required_reading>
|
|
12
13
|
|
|
13
14
|
<process>
|
|
@@ -33,6 +34,17 @@ Options:
|
|
|
33
34
|
```
|
|
34
35
|
|
|
35
36
|
**If .planning/ doesn't exist:** Error - project not initialized.
|
|
37
|
+
|
|
38
|
+
**Load planning config:**
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Check if planning docs should be committed (default: true)
|
|
42
|
+
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
|
43
|
+
# Auto-detect gitignored (overrides config)
|
|
44
|
+
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Store `COMMIT_PLANNING_DOCS` for use in git operations.
|
|
36
48
|
</step>
|
|
37
49
|
|
|
38
50
|
<step name="validate_phase">
|
|
@@ -456,6 +468,17 @@ Update ROADMAP.md to reflect phase completion:
|
|
|
456
468
|
# Update status
|
|
457
469
|
```
|
|
458
470
|
|
|
471
|
+
**Check planning config:**
|
|
472
|
+
|
|
473
|
+
If `COMMIT_PLANNING_DOCS=false` (set in load_project_state):
|
|
474
|
+
- Skip all git operations for .planning/ files
|
|
475
|
+
- Planning docs exist locally but are gitignored
|
|
476
|
+
- Log: "Skipping planning docs commit (commit_docs: false)"
|
|
477
|
+
- Proceed to offer_next step
|
|
478
|
+
|
|
479
|
+
If `COMMIT_PLANNING_DOCS=true` (default):
|
|
480
|
+
- Continue with git operations below
|
|
481
|
+
|
|
459
482
|
Commit phase completion (roadmap, state, verification):
|
|
460
483
|
```bash
|
|
461
484
|
git add .planning/ROADMAP.md .planning/STATE.md .planning/phases/{phase_dir}/*-VERIFICATION.md
|
|
@@ -4,6 +4,7 @@ Execute a phase prompt (PLAN.md) and create the outcome summary (SUMMARY.md).
|
|
|
4
4
|
|
|
5
5
|
<required_reading>
|
|
6
6
|
Read STATE.md before any operation to load project context.
|
|
7
|
+
Read config.json for planning behavior settings.
|
|
7
8
|
|
|
8
9
|
@~/.claude/get-shit-done/references/git-integration.md
|
|
9
10
|
</required_reading>
|
|
@@ -36,6 +37,17 @@ Options:
|
|
|
36
37
|
**If .planning/ doesn't exist:** Error - project not initialized.
|
|
37
38
|
|
|
38
39
|
This ensures every execution has full project context.
|
|
40
|
+
|
|
41
|
+
**Load planning config:**
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Check if planning docs should be committed (default: true)
|
|
45
|
+
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
|
46
|
+
# Auto-detect gitignored (overrides config)
|
|
47
|
+
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Store `COMMIT_PLANNING_DOCS` for use in git operations.
|
|
39
51
|
</step>
|
|
40
52
|
|
|
41
53
|
<step name="identify_plan">
|
|
@@ -1513,6 +1525,17 @@ Commit execution metadata (SUMMARY + STATE + ROADMAP):
|
|
|
1513
1525
|
**Note:** All task code has already been committed during execution (one commit per task).
|
|
1514
1526
|
PLAN.md was already committed during plan-phase. This final commit captures execution results only.
|
|
1515
1527
|
|
|
1528
|
+
**Check planning config:**
|
|
1529
|
+
|
|
1530
|
+
If `COMMIT_PLANNING_DOCS=false` (set in load_project_state):
|
|
1531
|
+
- Skip all git operations for .planning/ files
|
|
1532
|
+
- Planning docs exist locally but are gitignored
|
|
1533
|
+
- Log: "Skipping planning docs commit (commit_docs: false)"
|
|
1534
|
+
- Proceed to next step
|
|
1535
|
+
|
|
1536
|
+
If `COMMIT_PLANNING_DOCS=true` (default):
|
|
1537
|
+
- Continue with git operations below
|
|
1538
|
+
|
|
1516
1539
|
**1. Stage execution artifacts:**
|
|
1517
1540
|
|
|
1518
1541
|
```bash
|
|
@@ -211,6 +211,17 @@ Continue to commit_codebase_map.
|
|
|
211
211
|
<step name="commit_codebase_map">
|
|
212
212
|
Commit the codebase map:
|
|
213
213
|
|
|
214
|
+
**Check planning config:**
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
|
218
|
+
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
|
|
222
|
+
|
|
223
|
+
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
|
224
|
+
|
|
214
225
|
```bash
|
|
215
226
|
git add .planning/codebase/*.md
|
|
216
227
|
git commit -m "$(cat <<'EOF'
|
|
@@ -285,6 +285,17 @@ Clear Current Test section:
|
|
|
285
285
|
[testing complete]
|
|
286
286
|
```
|
|
287
287
|
|
|
288
|
+
**Check planning config:**
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
|
292
|
+
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
|
|
296
|
+
|
|
297
|
+
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
|
298
|
+
|
|
288
299
|
Commit the UAT file:
|
|
289
300
|
```bash
|
|
290
301
|
git add ".planning/phases/XX-name/{phase}-UAT.md"
|
|
@@ -5,12 +5,16 @@
|
|
|
5
5
|
const fs = require('fs');
|
|
6
6
|
const path = require('path');
|
|
7
7
|
const os = require('os');
|
|
8
|
-
const {
|
|
8
|
+
const { spawn } = require('child_process');
|
|
9
9
|
|
|
10
10
|
const homeDir = os.homedir();
|
|
11
|
+
const cwd = process.cwd();
|
|
11
12
|
const cacheDir = path.join(homeDir, '.claude', 'cache');
|
|
12
13
|
const cacheFile = path.join(cacheDir, 'gsd-update-check.json');
|
|
13
|
-
|
|
14
|
+
|
|
15
|
+
// VERSION file locations (check project first, then global)
|
|
16
|
+
const projectVersionFile = path.join(cwd, '.claude', 'get-shit-done', 'VERSION');
|
|
17
|
+
const globalVersionFile = path.join(homeDir, '.claude', 'get-shit-done', 'VERSION');
|
|
14
18
|
|
|
15
19
|
// Ensure cache directory exists
|
|
16
20
|
if (!fs.existsSync(cacheDir)) {
|
|
@@ -23,11 +27,17 @@ const child = spawn(process.execPath, ['-e', `
|
|
|
23
27
|
const { execSync } = require('child_process');
|
|
24
28
|
|
|
25
29
|
const cacheFile = ${JSON.stringify(cacheFile)};
|
|
26
|
-
const
|
|
30
|
+
const projectVersionFile = ${JSON.stringify(projectVersionFile)};
|
|
31
|
+
const globalVersionFile = ${JSON.stringify(globalVersionFile)};
|
|
27
32
|
|
|
33
|
+
// Check project directory first (local install), then global
|
|
28
34
|
let installed = '0.0.0';
|
|
29
35
|
try {
|
|
30
|
-
|
|
36
|
+
if (fs.existsSync(projectVersionFile)) {
|
|
37
|
+
installed = fs.readFileSync(projectVersionFile, 'utf8').trim();
|
|
38
|
+
} else if (fs.existsSync(globalVersionFile)) {
|
|
39
|
+
installed = fs.readFileSync(globalVersionFile, 'utf8').trim();
|
|
40
|
+
}
|
|
31
41
|
} catch (e) {}
|
|
32
42
|
|
|
33
43
|
let latest = null;
|
package/package.json
CHANGED