From 8e8fba2793d14432bfbd6b0c3344db29a8b30ac6 Mon Sep 17 00:00:00 2001 From: Lex Christopherson Date: Mon, 12 Jan 2026 13:23:16 -0600 Subject: [PATCH] fix(10-02): load execute-plan.md context in execute-phase command - Command now loads both workflows (execution + orchestration) - Agents commit tasks normally (removed DON'T COMMIT instruction) - Orchestrator only commits metadata after all agents complete - No duplication - single source of truth for execution logic --- commands/gsd/execute-phase.md | 2 + get-shit-done/workflows/execute-phase.md | 136 +++++------------------ 2 files changed, 28 insertions(+), 110 deletions(-) diff --git a/commands/gsd/execute-phase.md b/commands/gsd/execute-phase.md index 47b5a6ebb..e334c55eb 100644 --- a/commands/gsd/execute-phase.md +++ b/commands/gsd/execute-phase.md @@ -27,8 +27,10 @@ Use this command when: +@~/.claude/get-shit-done/workflows/execute-plan.md @~/.claude/get-shit-done/workflows/execute-phase.md @~/.claude/get-shit-done/templates/summary.md +@~/.claude/get-shit-done/references/checkpoints.md diff --git a/get-shit-done/workflows/execute-phase.md b/get-shit-done/workflows/execute-phase.md index 4c135af08..1cc51f09e 100644 --- a/get-shit-done/workflows/execute-phase.md +++ b/get-shit-done/workflows/execute-phase.md @@ -406,11 +406,10 @@ For each plan in Wave 1: You are executing plan: {plan_path} as part of a PARALLEL phase execution. -1. Execute ALL tasks in the plan following deviation rules -2. DO NOT run git commit - orchestrator handles commits -3. DO NOT run git add - orchestrator stages files -4. Track all files you create or modify -5. Create SUMMARY.md in the phase directory when complete +1. Execute ALL tasks in the plan following deviation rules from execute-plan.md +2. Commit each task atomically (standard task_commit protocol) +3. Create SUMMARY.md in the phase directory when complete +4. Report files modified and commit hashes when done @@ -435,6 +434,9 @@ When complete, output this exact format: PARALLEL_AGENT_COMPLETE plan_id: {phase}-{plan} tasks_completed: [count]/[total] +task_commits: + - task_1: abc123f + - task_2: def456g files_modified: - path/to/file1.ts - path/to/file2.md @@ -446,9 +448,7 @@ END_REPORT -- git commit -- git add -- git push +- git push (orchestrator may push after all complete) - Modifying files outside plan scope - Running long-blocking network operations @@ -704,114 +704,23 @@ Failed: 0 -**Batch commit after all agents complete.** +**Commit metadata after all agents complete.** -**1. Collect files from all agents:** +Agents commit their own task code (per-task atomic commits). The orchestrator only commits metadata. + +**1. Verify all agents committed successfully:** ```bash -# Read agent-history.json -# For each agent in this parallel_group: -# Collect files_modified arrays -# Merge into master list - -ALL_FILES=() -for entry in $(jq -r ".entries[] | select(.parallel_group==\"$PARALLEL_GROUP\") | .files_modified[]" .planning/agent-history.json); do - ALL_FILES+=("$entry") -done -``` - -**2. Check for merge conflicts (failsafe):** - -```bash -# Build file-to-agent mapping -declare -A FILE_AGENTS -for entry in $(jq -c ".entries[] | select(.parallel_group==\"$PARALLEL_GROUP\" and .status==\"completed\")" .planning/agent-history.json); do - agent_id=$(echo "$entry" | jq -r '.agent_id') - for file in $(echo "$entry" | jq -r '.files_modified[]'); do - FILE_AGENTS["$file"]="${FILE_AGENTS[$file]} $agent_id" - done -done - -# Detect conflicts (file modified by multiple agents) -CONFLICTS=() -for file in "${!FILE_AGENTS[@]}"; do - agents=(${FILE_AGENTS[$file]}) - if [ ${#agents[@]} -gt 1 ]; then - CONFLICTS+=("$file: ${agents[*]}") - fi -done - -# Handle conflicts -if [ ${#CONFLICTS[@]} -gt 0 ]; then - echo "" - echo "═══════════════════════════════════════════════════" - echo "⚠ MERGE CONFLICT DETECTED" - echo "═══════════════════════════════════════════════════" - echo "" - echo "Multiple agents modified the same files:" - for conflict in "${CONFLICTS[@]}"; do - echo " - $conflict" - done - echo "" - echo "Options:" - echo "1. Review and merge manually" - echo "2. Re-run sequential with /gsd:execute-plan" - echo "3. Accept last-write-wins (risky)" - echo "" - - # Present to user - AskUserQuestion( - header="Merge Conflict", - question="How to resolve file conflicts?", - options=[ - "Manual review", - "Abort and retry sequential", - "Accept last-write-wins" - ] - ) - - # Handle based on response - if response == "Abort": - git checkout -- . # Discard changes - exit 1 - elif response == "Manual review": - echo "Review files and run: git add && /gsd:execute-phase --resume" - exit 0 -fi -``` - -**Conflict prevention (dependency analysis should catch this):** -The analyze_plan_dependencies step should detect file conflicts and add dependencies. -This step is a failsafe for edge cases where: -- Agents create new files with same name -- File patterns weren't caught during analysis -- Context files are modified unexpectedly - -**3. Stage and commit per-plan:** -```bash -# For each completed agent (in execution order): -for agent in $(jq -r ".entries[] | select(.parallel_group==\"$PARALLEL_GROUP\" and .status==\"completed\") | .agent_id" .planning/agent-history.json | sort); do +# Check git log for expected commits from each agent +for agent in $(jq -r ".entries[] | select(.parallel_group==\"$PARALLEL_GROUP\" and .status==\"completed\") | .agent_id" .planning/agent-history.json); do PLAN=$(jq -r ".entries[] | select(.agent_id==\"$agent\") | .plan" .planning/agent-history.json) - FILES=$(jq -r ".entries[] | select(.agent_id==\"$agent\") | .files_modified[]" .planning/agent-history.json) - - # Stage files for this plan - for f in $FILES; do - git add "$f" - done - - # Commit with plan context - git commit -m "feat({phase}-{plan}): [plan name from PLAN.md] - -- [task 1] -- [task 2] -- [task 3] - -Executed by parallel agent: $agent" + # Verify commits exist for this plan + git log --oneline --grep="(${PHASE}-${PLAN}):" | head -5 done ``` -**4. Stage and commit metadata:** +**2. Stage and commit metadata:** ```bash -# Stage all SUMMARY.md files created +# Stage all SUMMARY.md files created by agents git add .planning/phases/${PHASE_DIR}/*-SUMMARY.md # Stage STATE.md and ROADMAP.md @@ -828,7 +737,7 @@ Agents: $(for a in "${COMPLETED[@]}"; do echo "- $a"; done)" ``` -**5. Generate timing stats:** +**3. Generate timing stats:** ```bash START_TIME=$(jq -r ".entries[] | select(.parallel_group==\"$PARALLEL_GROUP\") | .timestamp" .planning/agent-history.json | sort | head -1) END_TIME=$(jq -r ".entries[] | select(.parallel_group==\"$PARALLEL_GROUP\") | .completion_timestamp" .planning/agent-history.json | sort -r | head -1) @@ -839,6 +748,13 @@ echo "- Wall clock time: $(time_diff $START_TIME $END_TIME)" echo "- Sequential estimate: $(sum of individual plan durations)" echo "- Time saved: ~X%" ``` + +**Note on merge conflicts:** +Since agents commit independently, git will catch conflicts at commit time if they occur. +The dependency analysis step should prevent this, but if an agent fails to commit due to conflict: +- That agent's status will be "failed" +- Other agents continue normally +- User can resolve and retry the failed plan with /gsd:execute-plan