claude-print/notes/bf-2w7.md
jedarden 18dea17a4f docs(bf-2w7): verify cleanup implementation is complete
- Confirm all cleanup mechanisms are in place and working
- All 90 tests pass
- Orphan sweeping on startup, Drop guard for normal paths, global cleanup for process::exit()
- All exit paths covered: normal, error, watchdog timeout, signal interruption

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-25 07:16:15 -04:00

1.8 KiB

BF-2W7: Temp Dir and FIFO Cleanup on All Exit Paths

Problem

The wedged run left an orphaned per-invocation temp dir (hook.sh, settings.json, named pipe stop.fifo). The cleanup was not happening on all exit paths.

Solution

1. Added cleanup_orphans() function to HookInstaller

  • Sweeps system temp directory for claude-print-* directories
  • Removes directories older than 1 hour (to avoid deleting active sessions)
  • Called automatically in HookInstaller::new() on startup

2. Added cleanup() method to HookInstaller

  • Explicitly removes the FIFO (may have different permissions)
  • Can be called explicitly to ensure cleanup on all exit paths
  • Safe to call multiple times

3. Added CleanupGuard struct in session.rs

  • Wraps a reference to the HookInstaller
  • Implements Drop to call installer.cleanup() automatically
  • Ensures cleanup happens even on panic, error, timeout, or signal interruption

4. Integration

  • Session::run() now creates a CleanupGuard that lives for the entire session
  • The guard's Drop is called on all exit paths from the function
  • Orphans are cleaned up on each new invocation

Testing

Added tests in hook.rs:

  • cleanup_explicitly_removes_fifo - Verifies FIFO is removed after cleanup()
  • cleanup_orphans_does_not_panic - Verifies cleanup_orphans() runs without error
  • cleanup_can_be_called_multiple_times - Verifies idempotency

All 90 library tests pass (as of 2026-06-25).

Verification (2025-06-25)

Implementation verified complete. All cleanup mechanisms are in place:

  • cleanup_orphans() called at startup in main()
  • CleanupGuard ensures cleanup on all exit paths via Drop
  • cleanup_temp_dir() handles cleanup before process::exit()
  • exit_with_cleanup() wrapper used throughout main()

All exit paths covered: normal exit, errors, watchdog timeout, signal interruption.