| name | close-all |
| description | Batch-close all complete increments by delegating each one to `sw:done`. Discovers active/ready-for-review increments with zero pending tasks, then iterates and calls `sw:done` per increment. Use when saying "close all", "close stuck increments", or "batch close". |
| version | 1.0.0 |
| argument-hint | [--dry-run] |
Batch Close All Complete Increments
Closes all active increments that have reached 100% task completion by delegating each one to sw:done. This skill is a thin batch-discovery loop; all actual closure logic (gates, reports, sync) lives in sw:done.
Step 1: Discover Closeable Increments
for meta in $(find .specweave/increments -maxdepth 2 -name "metadata.json" | sort); do
st=$(jq -r '.status' "$meta" 2>/dev/null)
[ "$st" != "active" ] && [ "$st" != "in-progress" ] && [ "$st" != "ready_for_review" ] && continue
d=$(dirname "$meta"); id=$(basename "$d"); tasks="$d/tasks.md"
[ ! -f "$tasks" ] && continue
pending=$(grep -c '\[ \]' "$tasks" 2>/dev/null || echo 0)
done_count=$(grep -c '\[x\]' "$tasks" 2>/dev/null || echo 0)
if [ "$pending" -eq 0 ] && [ "$done_count" -gt 0 ]; then
echo "CLOSEABLE: $id"
fi
done
If no closeable increments are found, report "No increments ready for closure" and stop.
Step 2: Dry-run
If the user passed --dry-run, print the discovered list and stop without closing anything.
Step 3: Delegate each to sw:done
Iterate the discovered list sequentially. For each <ID>:
Skill({ skill: "sw:done", args: "<ID>" })
sw:done owns the actual closure workflow: code-review, simplify, grill, judge-llm, PM validation, external sync, and final status transition. Close sequentially to respect dependency order; if sw:done fails for an increment, log the failure and continue with the next.
Step 4: Summary
Print a final summary with CLOSED / FAILED counts per increment. Failures are not retried here — the user re-runs sw:done <ID> individually once blockers are resolved.
Notes
- All gate logic lives in
sw:done. This skill MUST NOT duplicate closure behaviour.
- Parallel closure is intentionally not supported — race conditions on shared living docs are a real hazard.