v1.0.11: Engineering audit implementation: correctness and safety fixes, a modular GUI views package, faster duplicate hashing and storage analysis, wider cleanup coverage, and machine-readable CLI progress
LatestEngineering audit implementation: correctness and safety fixes, a modular GUI views package, faster duplicate hashing and storage analysis, wider cleanup coverage, and machine-readable CLI progress.
Fixed
- Duplicate cleanup category IDs:
directx_shader_cachenow has a single owner (Windows provider) and the .NET provider's JetBrains entry becameresharper_caches, so no two categories share an ID or scan the same path twice. Enforced by tests. - Individual file cleanup targets: a target pointing at a single file (stray
.pycfiles) is now sized, previewed, and deleted correctly through the normal pipeline instead of being silently skipped. - Platform-specific categories: Windows-only targets are no longer registered on Linux and vice versa. This covers the application providers (winget, Chocolatey, Scoop vs apt, dnf, pacman, Flatpak, Snap) and the Windows system provider, so a Linux install no longer lists Prefetch, CBS logs, or Windows TEMP. Emptying the trash stays available on both platforms.
- Windows drive formatting: drive letters render one colon (
Drive C:), Linux mount points are printed unchanged. - Storage analyzer traversal: the analyzer uses the shared reparse-point guard and skips junctions and symlinks instead of resolving through them, so data that lives on another volume is never billed to the scanned drive.
- Recursive CSV storage export: a list-rooted storage report now exports every descendant instead of stopping at the top level.
- Linux storage health: capacity comes from byte-accurate
lsblk -boutput and free space is correlated through the device's mount point. An unmounted device keeps its real capacity rather than reporting zeros. - Cold cleanup preview reported zero:
crapcleaner --cleanup-previewruns without a prior scan, so categories that discover their targets through a finder (__pycache__, stray.pyc, Python tool caches, AI models) previewed as empty while the cleanup would have removed thousands of files. The preview now resolves those finders when no scan data exists. - Blank volume label and filesystem on Windows: PC Specs printed drives with no label or filesystem because
get_drive_infonever queried them. Both now come fromGetVolumeInformationW, and a drive that cannot be queried reports blank rather than a placeholder. - Ruff and mypy: both pass with zero errors across the package, with no suppressions or broad
Anycasts added. - PyInstaller packaging: stale hidden imports were replaced with modules that actually exist, and
onedirbuilds a real folder distribution (EXE+COLLECT) instead of silently producing a onefile build. Both build scripts pass their mode through and report the matching output path.
Added
- Running-browser detection before cleanup: one process listing identifies every relevant browser; the confirmation dialog, status bar, and CLI warn that locked cache files will be skipped. Browsers are never terminated, and a cleanup that skipped locked files is reported as partial rather than complete.
- Wider browser coverage: Thorium on Windows and Linux, Floorp on Linux, alongside the existing Chromium and Firefox derivatives. Only cache directories are targeted.
- Wider developer cache coverage: shared
sccacheand Zig compiler caches, project-local.ruff_cache,.mypy_cache,.pytest_cache, and.toxfolders discovered through the existing single scan-root walk, and the Docker Buildx cache exposed as a confirmeddocker buildx pruneaction rather than a file delete. - Vendor-neutral GPU telemetry: AMD and Intel load, temperature, and VRAM through Linux DRM sysfs, NVML retained for NVIDIA, and any Windows display adapter contributing its name and VRAM size. A metric the hardware does not expose is shown as
N/Ainstead of a fabricated zero. - Wider local AI model discovery: Jan.ai, ComfyUI, and text-generation-webui model stores in their conventional locations. Models remain inspection-only and are never auto-selected.
--progress-jsonlstreaming CLI progress: scans and cleanups emit one standalone JSON object per line covering start, per-category progress and results, warnings, errors, cancellation, and completion (including apartialflag). Standard output is unchanged without the flag.
Changed
- GUI views modularized: the 9,000-line
gui/views.pybecame agui/views/package with one module per major view plus a shared widgets module. Public imports and lazy view creation are unchanged. - Centralized subprocess execution:
run_commandreturns a typedCommandResultwith consistent timeout, working-directory, and environment handling, and every capturing subprocess call site now goes through it, so a failed command can never look like empty-but-successful output. - Parallel duplicate hashing: full SHA-256 hashing runs on a bounded worker pool and consumes results in submission order, keeping grouping deterministic while staying responsive to cancellation.
- Scan cache invalidation: continuously rewritten groups (browser caches, Windows Temp) use a short TTL so a stale entry cannot outlive its data, while static categories keep the full TTL.
- On-demand storage drill-down: navigating past the analyzed depth measures that folder in a worker and keeps the result, instead of requiring a slower whole-drive pass at a higher depth.