get-shit-done-cc 1.7.1 → 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.
@@ -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 (3 questions):
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 parallelization.
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}"
@@ -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
  ```
@@ -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>
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "mode": "interactive",
3
3
  "depth": "standard",
4
+ "planning": {
5
+ "commit_docs": true,
6
+ "search_gitignored": false
7
+ },
4
8
  "parallelization": {
5
9
  "enabled": true,
6
10
  "plan_level": true,
@@ -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"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "get-shit-done-cc",
3
- "version": "1.7.1",
3
+ "version": "1.8.0",
4
4
  "description": "A meta-prompting, context engineering and spec-driven development system for Claude Code by TÂCHES.",
5
5
  "bin": {
6
6
  "get-shit-done-cc": "bin/install.js"