533 lines
12 KiB
Markdown
533 lines
12 KiB
Markdown
---
|
|
name: troubleshooting-execute
|
|
description: Use when execute command encounters errors - diagnostic guide for phase failures, parallel agent failures, merge conflicts, worktree issues, and recovery strategies
|
|
---
|
|
|
|
# Troubleshooting Execute Command
|
|
|
|
## Overview
|
|
|
|
**Reference guide for diagnosing and recovering from execute command failures.**
|
|
|
|
This skill provides recovery strategies for common execute command errors. Use it when execution fails or produces unexpected results.
|
|
|
|
## When to Use
|
|
|
|
Use this skill when:
|
|
- Phase execution fails (sequential or parallel)
|
|
- Parallel agent fails or doesn't complete
|
|
- Merge conflicts occur during stacking
|
|
- Worktree creation fails
|
|
- Main worktree not found
|
|
- Need to resume execution after fixing an issue
|
|
|
|
**This is a reference skill** - consult when errors occur, not part of normal execution flow.
|
|
|
|
## Error Categories
|
|
|
|
### 1. Sequential Phase Execution Failure
|
|
|
|
**Symptoms:**
|
|
- Task agent fails mid-execution
|
|
- Quality checks fail (test, lint, build)
|
|
- Branch not created after task completes
|
|
|
|
**Error message format:**
|
|
```markdown
|
|
❌ Phase {id} Execution Failed
|
|
|
|
**Task**: {task-id}
|
|
**Error**: {error-message}
|
|
```
|
|
|
|
**Resolution steps:**
|
|
|
|
1. **Review the error output** - Understand what failed (test? build? implementation?)
|
|
|
|
2. **Check current state:**
|
|
```bash
|
|
cd .worktrees/{runid}-main
|
|
git status
|
|
git log --oneline -5
|
|
```
|
|
|
|
3. **Fix manually if needed:**
|
|
```bash
|
|
# Current branch already has completed work from previous tasks
|
|
# Fix the issue in the working directory
|
|
|
|
# Run quality checks
|
|
bash <<'EOF'
|
|
npm test
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ Tests failed"
|
|
exit 1
|
|
fi
|
|
|
|
npm run lint
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ Lint failed"
|
|
exit 1
|
|
fi
|
|
|
|
npm run build
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ Build failed"
|
|
exit 1
|
|
fi
|
|
EOF
|
|
|
|
# Create branch if task completed but branch wasn't created
|
|
gs branch create {runid}-task-{phase}-{task}-{name} -m "[Task {phase}.{task}] {description}"
|
|
```
|
|
|
|
4. **Resume execution:**
|
|
- If fixed manually: Continue to next task
|
|
- If need fresh attempt: Reset branch and re-run task
|
|
- If plan was wrong: Update plan and re-execute from this phase
|
|
|
|
### 2. Parallel Phase - Agent Failure
|
|
|
|
**Symptoms:**
|
|
- One or more parallel agents fail
|
|
- Some task branches created, others missing
|
|
- Error during concurrent execution
|
|
|
|
**Error message format:**
|
|
```markdown
|
|
❌ Parallel Phase {id} - Agent Failure
|
|
|
|
**Failed Task**: {task-id}
|
|
**Branch**: {task-branch}
|
|
**Error**: {error-message}
|
|
|
|
**Successful Tasks**: {list}
|
|
```
|
|
|
|
**Resolution options:**
|
|
|
|
#### Option A: Fix in Existing Branch
|
|
|
|
Use when fix is small and task mostly completed:
|
|
|
|
```bash
|
|
# Navigate to task's worktree
|
|
cd .worktrees/{runid}-task-{phase}-{task}
|
|
|
|
# Debug and fix issue
|
|
# Edit files, fix code
|
|
|
|
# Run quality checks
|
|
bash <<'EOF'
|
|
npm test
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ Tests failed"
|
|
exit 1
|
|
fi
|
|
|
|
npm run lint
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ Lint failed"
|
|
exit 1
|
|
fi
|
|
|
|
npm run build
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ Build failed"
|
|
exit 1
|
|
fi
|
|
EOF
|
|
|
|
# Commit fix on existing branch
|
|
git add --all
|
|
git commit -m "[Task {phase}.{task}] Fix: {description}"
|
|
|
|
# Return to main repo
|
|
cd "$REPO_ROOT"
|
|
|
|
# Proceed with stacking (failed branch now exists)
|
|
```
|
|
|
|
#### Option B: Create Stacked Fix Branch
|
|
|
|
Use when fix is significant or logically separate:
|
|
|
|
```bash
|
|
# Navigate to task's worktree
|
|
cd .worktrees/{runid}-task-{phase}-{task}
|
|
|
|
# Ensure original work is committed
|
|
git status # Should be clean
|
|
|
|
# Create stacked fix branch
|
|
gs branch create {runid}-task-{phase}-{task}-fix-{issue} -m "[Task {phase}.{task}] Fix: {issue}"
|
|
|
|
# Implement fix
|
|
# Edit files
|
|
|
|
# Commit fix
|
|
git add --all
|
|
git commit -m "[Task {phase}.{task}] Fix: {description}"
|
|
|
|
# Return to main repo
|
|
cd "$REPO_ROOT"
|
|
```
|
|
|
|
#### Option C: Restart Failed Agent
|
|
|
|
Use when task implementation is fundamentally wrong:
|
|
|
|
```bash
|
|
# Navigate to main repo
|
|
cd "$REPO_ROOT"
|
|
|
|
# Remove task worktree
|
|
git worktree remove .worktrees/{runid}-task-{phase}-{task}
|
|
|
|
# Delete failed branch if it exists
|
|
git branch -D {runid}-task-{phase}-{task}-{name}
|
|
|
|
# Recreate worktree from base
|
|
BASE_BRANCH=$(git -C .worktrees/{runid}-main branch --show-current)
|
|
git worktree add .worktrees/{runid}-task-{phase}-{task} --detach "$BASE_BRANCH"
|
|
|
|
# Install dependencies
|
|
cd .worktrees/{runid}-task-{phase}-{task}
|
|
{install-command}
|
|
{postinstall-command}
|
|
|
|
# Spawn fresh agent for this task only
|
|
# [Use Task tool with task prompt]
|
|
```
|
|
|
|
#### Option D: Continue Without Failed Task
|
|
|
|
Use when task is non-critical or can be addressed later:
|
|
|
|
1. Stack successful task branches
|
|
2. Mark failed task as follow-up work
|
|
3. Continue to next phase
|
|
4. Address failed task in separate branch later
|
|
|
|
### 3. Merge Conflicts During Stacking
|
|
|
|
**Symptoms:**
|
|
- Stacking parallel branches causes conflicts
|
|
- `gs upstack onto` fails with merge conflict
|
|
- Git reports conflicting changes in same files
|
|
|
|
**Error message format:**
|
|
```markdown
|
|
❌ Merge Conflict - Tasks Modified Same Files
|
|
|
|
**Conflict**: {file-path}
|
|
**Branches**: {branch-1}, {branch-2}
|
|
|
|
This should not happen if task independence was verified correctly.
|
|
```
|
|
|
|
**Root cause:** Tasks were marked parallel but have file dependencies.
|
|
|
|
**Resolution steps:**
|
|
|
|
1. **Verify task independence:**
|
|
```bash
|
|
# Check which files each task modified
|
|
git diff {base-branch}..{task-1-branch} --name-only
|
|
git diff {base-branch}..{task-2-branch} --name-only
|
|
# Should have no overlap for parallel tasks
|
|
```
|
|
|
|
2. **Resolve conflict manually:**
|
|
```bash
|
|
cd .worktrees/{runid}-main
|
|
|
|
# Checkout first task branch
|
|
git checkout {task-1-branch}
|
|
|
|
# Attempt merge with second task
|
|
git merge {task-2-branch}
|
|
# Conflict will occur
|
|
|
|
# Resolve in editor
|
|
# Edit conflicted files
|
|
|
|
# Complete merge
|
|
git add {conflicted-files}
|
|
git commit -m "Merge {task-2-branch} into {task-1-branch}"
|
|
|
|
# Continue stacking remaining branches
|
|
```
|
|
|
|
3. **Update plan for future:**
|
|
- Mark tasks as sequential, not parallel
|
|
- File dependencies mean tasks aren't independent
|
|
- Prevents conflict in future executions
|
|
|
|
### 4. Worktree Not Found
|
|
|
|
**Symptoms:**
|
|
- Execute command can't find `{runid}-main` worktree
|
|
- Error: `.worktrees/{runid}-main does not exist`
|
|
|
|
**Error message format:**
|
|
```markdown
|
|
❌ Worktree Not Found
|
|
|
|
**Error**: .worktrees/{run-id}-main does not exist
|
|
|
|
This means `/spectacular:spec` was not run, or the worktree was removed.
|
|
```
|
|
|
|
**Root cause:** Spec command not run, or worktree manually deleted.
|
|
|
|
**Resolution:**
|
|
|
|
Run the spec command first to create workspace:
|
|
|
|
```bash
|
|
/spectacular:spec {feature-name}
|
|
```
|
|
|
|
**This will:**
|
|
1. Create `.worktrees/{runid}-main/` directory
|
|
2. Generate `specs/{runid}-{feature-slug}/spec.md`
|
|
3. Create base branch `{runid}-main`
|
|
|
|
**Then:**
|
|
1. Run `/spectacular:plan` to generate execution plan
|
|
2. Run `/spectacular:execute` to execute the plan
|
|
|
|
**Never skip spec** - execute depends on worktree structure created by spec.
|
|
|
|
### 5. Parallel Task Worktree Creation Failure
|
|
|
|
**Symptoms:**
|
|
- `git worktree add` fails for parallel tasks
|
|
- Error: "path already exists"
|
|
- Error: "working tree contains modified files"
|
|
|
|
**Error message format:**
|
|
```markdown
|
|
❌ Parallel Task Worktree Creation Failed
|
|
|
|
**Error**: {error-message}
|
|
```
|
|
|
|
**Common causes and fixes:**
|
|
|
|
#### Cause 1: Path Already Exists
|
|
|
|
```bash
|
|
# Clean existing path
|
|
rm -rf .worktrees/{runid}-task-{phase}-{task}
|
|
|
|
# Prune stale worktree entries
|
|
git worktree prune
|
|
|
|
# Retry worktree creation
|
|
git worktree add .worktrees/{runid}-task-{phase}-{task} --detach {base-branch}
|
|
```
|
|
|
|
#### Cause 2: Uncommitted Changes on Current Branch
|
|
|
|
```bash
|
|
# Stash changes
|
|
git stash
|
|
|
|
# Or commit changes
|
|
git add --all
|
|
git commit -m "WIP: Save progress before parallel phase"
|
|
|
|
# Retry worktree creation
|
|
```
|
|
|
|
#### Cause 3: Working Directory Not Clean
|
|
|
|
```bash
|
|
# Check status
|
|
git status
|
|
|
|
# Either commit or stash changes
|
|
git add --all
|
|
git commit -m "[Task {X}.{Y}] Complete task"
|
|
|
|
# Or stash if work is incomplete
|
|
git stash
|
|
|
|
# Retry worktree creation
|
|
```
|
|
|
|
#### Cause 4: Running from Wrong Directory
|
|
|
|
```bash
|
|
# Verify not in worktree
|
|
REPO_ROOT=$(git rev-parse --show-toplevel)
|
|
if [[ "$REPO_ROOT" =~ \.worktrees ]]; then
|
|
echo "Error: In worktree, navigate to main repo"
|
|
cd "$(dirname "$(dirname "$REPO_ROOT")")"
|
|
fi
|
|
|
|
# Navigate to main repo root
|
|
MAIN_REPO=$(git rev-parse --show-toplevel | sed 's/\.worktrees.*//')
|
|
cd "$MAIN_REPO"
|
|
|
|
# Retry worktree creation
|
|
```
|
|
|
|
## Diagnostic Commands
|
|
|
|
**Check execution state:**
|
|
|
|
```bash
|
|
# List all worktrees
|
|
git worktree list
|
|
|
|
# View current branches
|
|
git branch | grep "{runid}-"
|
|
|
|
# View stack structure
|
|
cd .worktrees/{runid}-main
|
|
gs log short
|
|
|
|
# Check main worktree state
|
|
cd .worktrees/{runid}-main
|
|
git status
|
|
git branch --show-current
|
|
```
|
|
|
|
**Verify phase readiness:**
|
|
|
|
```bash
|
|
# Before parallel phase
|
|
cd .worktrees/{runid}-main
|
|
BASE_BRANCH=$(git branch --show-current)
|
|
echo "Parallel phase will build from: $BASE_BRANCH"
|
|
|
|
# Before sequential phase
|
|
cd .worktrees/{runid}-main
|
|
CURRENT_BRANCH=$(git branch --show-current)
|
|
echo "Sequential phase starting from: $CURRENT_BRANCH"
|
|
```
|
|
|
|
**Check task completion:**
|
|
|
|
```bash
|
|
# Verify all task branches exist
|
|
TASK_BRANCHES=({runid}-task-{phase}-1-{name} {runid}-task-{phase}-2-{name})
|
|
for BRANCH in "${TASK_BRANCHES[@]}"; do
|
|
if git rev-parse --verify "$BRANCH" >/dev/null 2>&1; then
|
|
echo "✅ $BRANCH exists"
|
|
else
|
|
echo "❌ $BRANCH missing"
|
|
fi
|
|
done
|
|
```
|
|
|
|
## Recovery Strategies
|
|
|
|
### Resume After Manual Fix
|
|
|
|
If you fixed an issue manually:
|
|
|
|
1. Verify state is clean:
|
|
```bash
|
|
cd .worktrees/{runid}-main
|
|
git status # Should be clean
|
|
git log --oneline -3 # Verify commits exist
|
|
```
|
|
|
|
2. Continue to next task/phase:
|
|
- Sequential: Next task creates branch from current HEAD
|
|
- Parallel: Remaining tasks execute in parallel
|
|
|
|
### Reset Phase and Retry
|
|
|
|
If phase is fundamentally broken:
|
|
|
|
1. **Reset main worktree to pre-phase state:**
|
|
```bash
|
|
cd .worktrees/{runid}-main
|
|
git reset --hard {base-branch}
|
|
```
|
|
|
|
2. **Remove failed task branches:**
|
|
```bash
|
|
git branch -D {failed-task-branches}
|
|
```
|
|
|
|
3. **Re-run phase:**
|
|
- Fix plan if needed
|
|
- Re-execute phase from execute command
|
|
|
|
### Abandon Feature and Clean Up
|
|
|
|
If feature implementation should be abandoned:
|
|
|
|
1. **Remove all worktrees:**
|
|
```bash
|
|
git worktree remove .worktrees/{runid}-main
|
|
git worktree remove .worktrees/{runid}-task-*
|
|
git worktree prune
|
|
```
|
|
|
|
2. **Delete all feature branches:**
|
|
```bash
|
|
git branch | grep "^ {runid}-" | xargs git branch -D
|
|
```
|
|
|
|
3. **Clean spec directory:**
|
|
```bash
|
|
rm -rf specs/{runid}-{feature-slug}
|
|
```
|
|
|
|
## Prevention
|
|
|
|
**Prevent failures before they occur:**
|
|
|
|
1. **Validate plan before execution:**
|
|
- Check task independence for parallel phases
|
|
- Verify file paths are explicit, not wildcards
|
|
- Ensure no circular dependencies
|
|
|
|
2. **Run setup validation:**
|
|
- Use `validating-setup-commands` skill
|
|
- Verify CLAUDE.md has install/postinstall commands
|
|
- Test quality check commands exist
|
|
|
|
3. **Use skills correctly:**
|
|
- `executing-parallel-phase` for ALL parallel phases
|
|
- `executing-sequential-phase` for ALL sequential phases
|
|
- `understanding-cross-phase-stacking` for phase boundaries
|
|
|
|
4. **Verify before proceeding:**
|
|
- Check branches exist after each phase
|
|
- Verify stack structure with `gs log short`
|
|
- Run quality checks manually if agents skip them
|
|
|
|
## Quick Reference
|
|
|
|
**Common error patterns:**
|
|
|
|
| Error | Quick Fix |
|
|
|-------|-----------|
|
|
| Phase execution failed | Check error, fix manually, resume or retry |
|
|
| Parallel agent failed | Fix in branch, restart agent, or continue without |
|
|
| Merge conflict | Resolve manually, update plan to sequential |
|
|
| Worktree not found | Run `/spectacular:spec` first |
|
|
| Worktree creation failed | Clean path, stash changes, prune worktrees |
|
|
|
|
**Diagnostic sequence:**
|
|
|
|
1. Read error message carefully
|
|
2. Check execution state (worktrees, branches, commits)
|
|
3. Identify root cause (plan issue? implementation? environment?)
|
|
4. Choose recovery strategy (fix, retry, or continue)
|
|
5. Verify state is clean before proceeding
|
|
|
|
## The Bottom Line
|
|
|
|
**Most failures are recoverable.** Understand the error, verify state, fix the issue, and resume execution.
|
|
|
|
The execute command is designed to be resilient - you can fix issues manually and continue from any phase.
|