Skip to content

Changelog

  • go-error-family integration — All errors now classify into 5 families: Rejection, Conflict, Transient, Corruption, Infrastructure
  • Per-cleaner error codesNotAvailableError derives codes like cleaner.nix.not_available, cleaner.docker.not_available
  • RetryProfile presets--retry-profile flag (default/aggressive/conservative/none) on both clean and scan commands
  • CLI exit codeserrorfamily.ExitCode() maps families to BSD sysexits codes (Rejection=1, Transient=75, Infrastructure=69, Corruption=65)
  • Structured error loggingerrorfamily.LogError() adds slog output with family/code/retryable fields
  • Smart retryerrorfamily.IsRetryable() returns false for non-Transient errors, preventing wasteful retries
  • NotAvailableError implements Classified + Coded via NewNotAvailableError(name, reason) factory
  • ValidationError implements Classified (Rejection) with code validation.rejected
  • *exec.ExitError classified as Transient (retryable)
  • *os.PathError with permanent errno (ENOSPC/EROFS/ELOOP) classified as Rejection
  • JSON output includes family/code/retryable fields for skipped/failed cleaners
  • Cleaners sorted by name in JSON output for deterministic results
  • Parallel execution via go-workflow DAG with configurable MaxConcurrency
  • Panic recovery in step functions — panics recorded as failed steps
  • Deterministic ordering — step results sorted by registration order regardless of parallel completion
  • --concurrency flag on clean command (0=unlimited)
  • Golangci-lint cleaner — Cleans ~/.cache/golangci-lint cache directory
  • Linux system cache types — pip, npm, yarn, ccache cache cleaning for Linux/NixOS
  • 27 type-safe CacheType enums — Compile-time constants for all cache types
  • Docker cleaner — refactored with proper prune modes (ALL, IMAGES, CONTAINERS, VOLUMES, BUILDS)
  • Go cleaner — bit-flag based cache type selection
  • Node cleaner — multi-PM support (npm, pnpm, yarn, bun) with graceful degradation
  • DI containersamber/do v2 with RegisterAllServices and typed accessors
  • encoding/json/v2 — Migrated from encoding/json to v2 (requires GOEXPERIMENT=jsonv2)
  • Result[T] type — Functional error handling in cleaner methods
  • internal/domain/ is a god package (23 files)
  • internal/cleaner/ has 50+ files flat (no sub-packages)
  • Cleaners use hardcoded defaults instead of user profile config
  • Logger uses mutable package-level globals (causes test race conditions)
  • 300+ test functions across 65+ test files
  • Ginkgo BDD tests for: GitHistory, Nix, CompiledBinaries, ProjectExecutables
  • Error classification tests: PathError matrix, NotAvailableError codes, exec.ErrNotFound
  • CLI integration test: dry-run JSON pipeline
  • Integration tests use testing.Short() skip guards for real-system tests