DEL B chunk `interview` (+ discover/status/cleanup/help). Fasit written before the run predicted 8 defects and refuted 4 candidates; all 8 confirmed, all 4 refutations held, and three predictions turned out too narrow. - M-BUG-36: `drift --list` reached the command as 0 bytes. drift-cli accepted --output-file but list mode ignored it, and the listing goes to stderr, which the command discards per ux-rules rule 2. Fixing the caller alone would not have helped. - M-BUG-37: feature-gap's "Create backup" step ran fix-cli without --apply. Dry-run is the default, so no backup existed (backupId: null) while the command went on to edit config believing it could roll back. - M-BUG-38: fix-cli told users to recover with scanners/rollback-cli.mjs, which does not exist. Dead reference in the one message read after a bad fix. - M-BUG-21 fourth arm: five templates carried literal [--global]/[--full-machine] inside executable bash blocks. A bracketed placeholder does not start with a dash, so every scanner's arg loop takes it as the scan target. - interview and analyze never said which session they act on; interview could rewind a finished session; cleanup interpolated an unvalidated id into rm -rf (an empty id deletes every session); status advertised a `resume` command that does not exist and documented an `all` argument it never parsed. TDD: 9 red tests first, including a machine sweep for dead /config-audit references and for bracketed flags in bash blocks. Suite 1432 -> 1441/0. Frozen v5.0.0 snapshots untouched; --raw/--json contracts unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UGvA1uUQn2hPBPMaCKK6x3
4.3 KiB
4.3 KiB
| name | description | allowed-tools | model |
|---|---|---|---|
| config-audit:cleanup | Clean up old config-audit sessions to reclaim disk space | Read, Write, Glob, Bash, AskUserQuestion | sonnet |
Config-Audit: Session Cleanup
Manage and clean up accumulated config-audit sessions in ~/.claude/config-audit/sessions/.
Usage
/config-audit cleanup
/config-audit cleanup --raw # pass-through accepted; no-op (cleanup is file-management only, no findings prose)
Implementation Steps
-
Parse flags:
RAW_FLAG="" if echo "$ARGUMENTS" | grep -q -- "--raw"; then RAW_FLAG="--raw"; fi--rawis accepted for CLI surface consistency but is a no-op here — cleanup manages session directories on disk, it does not produce findings prose. -
List all sessions:
- Glob
~/.claude/config-audit/sessions/*/state.yaml - Use the Read tool on each session's state.yaml and extract:
- Session ID
- Created timestamp
- Current phase
- Whether session is active (has
next_phaseandcurrent_phaseis notverifyorcomplete)
- Glob
-
Calculate disk usage:
- Use
du -sh ~/.claude/config-audit/sessions/{session-id}/for each session - Calculate the total amount of disk space used
- Use
-
Display session table:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Config-Audit Sessions ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ | # | Session ID | Age | Phase | Status | Size | |---|------------|-----|-------|--------|------| | 1 | 20260127_102527 | 15d | implement | active | 12K | | 2 | quick-20260126 | 16d | analyze | complete | 8K | | 3 | 20260120_091500 | 22d | analyze | complete | 6K | Total: 3 sessions, 26K disk usage -
Ask cleanup action:
AskUserQuestion: question: "Which sessions should I clean up?" header: "Cleanup" options: - label: "Completed sessions only (Recommended)" description: "Delete sessions where phase is verify/complete. Keeps active sessions safe." - label: "Older than 14 days" description: "Delete all sessions older than 14 days, regardless of status." - label: "All except current" description: "Delete everything except the most recent active session." - label: "Cancel" description: "Don't delete anything." -
Safety guards:
- NEVER delete sessions where
current_phaseis notverifyorcompleteANDnext_phaseexists, unless user explicitly chose age-based or all-except-current - Warn before deleting active sessions: "Session {id} is still active (phase: {phase}). Delete anyway?"
- NEVER delete sessions where
-
Execute cleanup:
- Validate the id before it ever reaches
rm -rf. Each{session-id}must match^[0-9]{8}_[0-9]{6}$(the id formatdiscovergenerates) or be an existing directory name read verbatim from the Glob in step 1. If an id is empty or fails to match, refuse to delete it, report it, and continue with the rest. An empty id expands the path to~/.claude/config-audit/sessions//, which deletes every session. - For each validated session:
rm -rf ~/.claude/config-audit/sessions/{session-id}/ - Track deleted count and freed space
- Validate the id before it ever reaches
-
Output summary:
✓ Cleanup complete Deleted: 2 sessions Freed: 14K disk space Remaining: 1 session (active)
Session Status Detection
A session is considered active if ALL of these are true:
current_phaseis notverifyand notcompletenext_phaseexists and is not empty
A session is considered complete if ANY of these are true:
current_phaseisverifyorcompletenext_phaseis empty or null
Error Handling
- Legacy path: Also check
~/.config-audit/sessions/for sessions created before v2.2.0. If found, include them in the session list and note: "Found {n} session(s) at legacy path (~/.config-audit/). These will be cleaned up normally." - If
~/.claude/config-audit/sessions/doesn't exist (and no legacy sessions): "No sessions found. Nothing to clean up." - If no sessions match criteria: "No sessions match the selected criteria."
- If deletion fails: Log error, continue with other sessions