feat: add uncommitted planning mode (#107)
* feat: add uncommitted planning mode Add config option to keep planning docs local-only (not committed to git). Useful for OSS contributions, client projects, or keeping planning private. Config options in .planning/config.json: - planning.commit_docs: true/false (default: true) - planning.search_gitignored: true/false (default: false) When commit_docs=false: - All git operations for .planning/ files are skipped - User should add .planning/ to .gitignore - Planning system works normally, just not tracked Updated files: - config.json template: added planning section - execute-plan.md: conditional git commits - execute-phase.md: conditional git commits - create-roadmap.md: conditional git commits - help.md: documented new config options - planning-config.md: reference doc for config behavior Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: extend commit_docs check to all agents/commands/workflows Add COMMIT_PLANNING_DOCS config check to all files that commit .planning/ artifacts, ensuring consistent behavior when commit_docs=false is set in config.json. Updated: - 5 agents (planner, executor, debugger, phase-researcher, synthesizer) - 8 commands (add-todo, check-todos, execute-phase, new-milestone, pause-work, plan-milestone-gaps, remove-phase, research-project) - 7 workflows (complete-milestone, create-milestone, define-requirements, diagnose-issues, discuss-phase, map-codebase, verify-work) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(progress): use Bash instead of Glob for .planning/ check Glob respects .gitignore, so projects with gitignored .planning/ directories would fail with "No planning structure found." Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(new-milestone): integrate full research/requirements/roadmap flow Previously routed to non-existent /gsd:research-project and /gsd:define-requirements commands. Now handles the full flow inline like new-project does: - Phase 7: Research Decision (spawns 4 milestone-aware researchers) - Phase 8: Define Requirements (scopes features, creates REQUIREMENTS.md) - Phase 9: Create Roadmap (continues phase numbering from previous milestone) - Phase 10: Done Key adaptations for milestones: - Research focuses on NEW features only - Requirements add to existing, don't start fresh - Phase numbering continues from previous milestone Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -620,6 +620,17 @@ git push origin v[X.Y]
|
||||
|
||||
Commit milestone completion including archive files and deletions.
|
||||
|
||||
**Check planning config:**
|
||||
|
||||
```bash
|
||||
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
||||
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
||||
```
|
||||
|
||||
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
|
||||
|
||||
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
||||
|
||||
```bash
|
||||
# Stage archive files (new)
|
||||
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:
|
||||
|
||||
Update status in frontmatter to "diagnosed".
|
||||
|
||||
**Check planning config:**
|
||||
|
||||
```bash
|
||||
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
||||
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
||||
```
|
||||
|
||||
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
|
||||
|
||||
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
||||
|
||||
Commit the updated UAT.md:
|
||||
```bash
|
||||
git add ".planning/phases/XX-name/{phase}-UAT.md"
|
||||
|
||||
@@ -393,6 +393,17 @@ Created: .planning/phases/${PADDED_PHASE}-${SLUG}/${PADDED_PHASE}-CONTEXT.md
|
||||
<step name="git_commit">
|
||||
Commit phase context:
|
||||
|
||||
**Check planning config:**
|
||||
|
||||
```bash
|
||||
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
||||
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
||||
```
|
||||
|
||||
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
|
||||
|
||||
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
||||
|
||||
```bash
|
||||
git add "${PHASE_DIR}/${PADDED_PHASE}-CONTEXT.md"
|
||||
git commit -m "$(cat <<'EOF'
|
||||
|
||||
@@ -8,6 +8,7 @@ The orchestrator's job is coordination, not execution. Each subagent loads the f
|
||||
|
||||
<required_reading>
|
||||
Read STATE.md before any operation to load project context.
|
||||
Read config.json for planning behavior settings.
|
||||
</required_reading>
|
||||
|
||||
<process>
|
||||
@@ -33,6 +34,17 @@ Options:
|
||||
```
|
||||
|
||||
**If .planning/ doesn't exist:** Error - project not initialized.
|
||||
|
||||
**Load planning config:**
|
||||
|
||||
```bash
|
||||
# Check if planning docs should be committed (default: true)
|
||||
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
||||
# Auto-detect gitignored (overrides config)
|
||||
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
||||
```
|
||||
|
||||
Store `COMMIT_PLANNING_DOCS` for use in git operations.
|
||||
</step>
|
||||
|
||||
<step name="validate_phase">
|
||||
@@ -456,6 +468,17 @@ Update ROADMAP.md to reflect phase completion:
|
||||
# Update status
|
||||
```
|
||||
|
||||
**Check planning config:**
|
||||
|
||||
If `COMMIT_PLANNING_DOCS=false` (set in load_project_state):
|
||||
- Skip all git operations for .planning/ files
|
||||
- Planning docs exist locally but are gitignored
|
||||
- Log: "Skipping planning docs commit (commit_docs: false)"
|
||||
- Proceed to offer_next step
|
||||
|
||||
If `COMMIT_PLANNING_DOCS=true` (default):
|
||||
- Continue with git operations below
|
||||
|
||||
Commit phase completion (roadmap, state, verification):
|
||||
```bash
|
||||
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).
|
||||
|
||||
<required_reading>
|
||||
Read STATE.md before any operation to load project context.
|
||||
Read config.json for planning behavior settings.
|
||||
|
||||
@~/.claude/get-shit-done/references/git-integration.md
|
||||
</required_reading>
|
||||
@@ -36,6 +37,17 @@ Options:
|
||||
**If .planning/ doesn't exist:** Error - project not initialized.
|
||||
|
||||
This ensures every execution has full project context.
|
||||
|
||||
**Load planning config:**
|
||||
|
||||
```bash
|
||||
# Check if planning docs should be committed (default: true)
|
||||
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
||||
# Auto-detect gitignored (overrides config)
|
||||
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
||||
```
|
||||
|
||||
Store `COMMIT_PLANNING_DOCS` for use in git operations.
|
||||
</step>
|
||||
|
||||
<step name="identify_plan">
|
||||
@@ -1513,6 +1525,17 @@ Commit execution metadata (SUMMARY + STATE + ROADMAP):
|
||||
**Note:** All task code has already been committed during execution (one commit per task).
|
||||
PLAN.md was already committed during plan-phase. This final commit captures execution results only.
|
||||
|
||||
**Check planning config:**
|
||||
|
||||
If `COMMIT_PLANNING_DOCS=false` (set in load_project_state):
|
||||
- Skip all git operations for .planning/ files
|
||||
- Planning docs exist locally but are gitignored
|
||||
- Log: "Skipping planning docs commit (commit_docs: false)"
|
||||
- Proceed to next step
|
||||
|
||||
If `COMMIT_PLANNING_DOCS=true` (default):
|
||||
- Continue with git operations below
|
||||
|
||||
**1. Stage execution artifacts:**
|
||||
|
||||
```bash
|
||||
|
||||
@@ -211,6 +211,17 @@ Continue to commit_codebase_map.
|
||||
<step name="commit_codebase_map">
|
||||
Commit the codebase map:
|
||||
|
||||
**Check planning config:**
|
||||
|
||||
```bash
|
||||
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
||||
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
||||
```
|
||||
|
||||
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
|
||||
|
||||
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
||||
|
||||
```bash
|
||||
git add .planning/codebase/*.md
|
||||
git commit -m "$(cat <<'EOF'
|
||||
|
||||
@@ -285,6 +285,17 @@ Clear Current Test section:
|
||||
[testing complete]
|
||||
```
|
||||
|
||||
**Check planning config:**
|
||||
|
||||
```bash
|
||||
COMMIT_PLANNING_DOCS=$(cat .planning/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
|
||||
git check-ignore -q .planning 2>/dev/null && COMMIT_PLANNING_DOCS=false
|
||||
```
|
||||
|
||||
**If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
|
||||
|
||||
**If `COMMIT_PLANNING_DOCS=true` (default):**
|
||||
|
||||
Commit the UAT file:
|
||||
```bash
|
||||
git add ".planning/phases/XX-name/{phase}-UAT.md"
|
||||
|
||||
Reference in New Issue
Block a user