P0-04: Reclaim Audit — measured, not guessed

Method: read-only du -sh/du -sk, find, tmutil listlocalsnapshots. No sudo used; anything that required privilege is marked “not measured (requires privilege)”. No files were deleted, moved, or modified. Measured on 2026-08-08, one machine, one user account.

Machine profile

Ranked table — measured bytes on this machine

Rank Category Measured Regrowth Counts toward headline? Notes
1 ~/Library/Application Support/videowallpaper/ 72G NONE (user-generated renders) NO Single app’s rendered output, not a generic OS/dev category. This user built a video-wallpaper product; its own render cache lives here. Biggest single folder on the whole disk — proof that a fixed category list will miss the real #1 offender on some machines. See caveats.
2 ~/code/dfacto.ai/finance/{backend-crypto-trading-signal-generator,NeuroQuant.ai} 39G (22G+17G, mostly not node_modules — models/venvs/data, not measured further) NONE NO Active source repos = user data, not cleanup targets. Out of scope for the spec’s categories; flagged only because it explains where ~/code’s 113G actually is.
3 CoreSimulator: runtimes (16G, single iOS 26.4 image) + devices (7.7G, 3 of 22 devices carry all the weight) 23.7G PARTIAL (runtime re-download on demand; 19/22 stale near-empty devices are free wins with NONE regrowth) YES Xcode.app IS installed but DerivedData=0B, Archives=not found, iOS DeviceSupport=0B, Xcode’s own cache=not found — this dev is not actively building. All the “Xcode weight” is sitting in the simulator, not Xcode itself.
4 Package manager caches (Gradle 4.1G, npm 2.9G, Maven 1.9G, cargo 1.0G, pnpm store 1.0G, Go mod 239M + go-build 235M, Homebrew 219M) 11.6G FULL — every entry regenerates on next install/build YES (but low priority — regrowth is instant) Biggest FULL-regrowth bucket on the machine. Confirms these must never be counted as durable reclaim.
5 Docker: ~/Library/Containers/com.docker.docker (4.2G) + colima VM (1.4G) 5.6G PARTIAL YES, with caution Docker daemon (colima) was not running at measurement time — docker system df -v failed to connect, so image/volume-level breakdown wasn’t obtainable; measured the container-support directory instead per the spec’s fallback.
6 node_modules (46 dirs found, ~/code + ~/Documents + ~/Desktop + ~/Projects, depth ≤6) 10G FULL — npm/pnpm install rebuilds from lockfile+cache YES, but only for stale projects Deleting an actively-worked project’s node_modules blocks the next command until reinstall — needs a staleness/last-modified filter, not blanket deletion.
7 Downloads: *.dmg installers 3.94G (18 files) NONE YES — high value, zero risk Includes 3 literal duplicates of UTM.dmg (UTM.dmg, UTM (1).dmg, UTM (2).dmg, 238M each = 714M of pure waste) plus a 769M Dia installer, 750M oMLX installer, 432M Acronis installer, etc. Classic “already installed, forgot to delete” pile.
8 User caches ~/Library/Caches 2.9G FULL YES, but small Dominated by Google (Chrome/GCP tooling, 1.3G) and ms-playwright (554M, browser binaries for test automation — regrows on next playwright install). Refutes “generic cache cleaning is the big win” — it’s 25x smaller than the simulator bucket and 4x smaller than package-manager caches.
9 Large & old files >1GB, atime >180d (home dir, depth ≤6) 12.8G (3 files) NONE (not caches — judgment calls) YES, but not auto-deletable ~/Movies/dfacto_ai_demo_final_ProRes.mov (6.5G, personal creative asset) + two LM Studio GGUF model weights (5.0G, 1.3G — re-downloadable but multi-GB each). Good “surface for human review” feature, bad “auto-delete” feature.
10 Logs: user ~/Library/Logs (1.1G) + system /Library/Logs (350M) 1.45G PARTIAL YES, small User total is almost entirely one item: com.apple.diagnosticextensionsd (1.1G alone). Rest of the ~10 log sources are all <6M each.
11 Trash ~/.Trash 1.1G NONE — literally already marked for deletion by the user YES — safest possible win No .Trashes found on the two other mounted volumes (checked with nullglob; none present).
12 System caches /Library/Caches 16M measured FULL NO — not fully measured Most of /Library/Caches is root-owned and wasn’t readable without sudo; 16M is a floor, not the real total. Reported honestly as incomplete rather than guessed.
13 .lproj language bundles, sampled in /Applications (900 bundles found, depth ≤4) 227M sampled NONE if stripped, but regrows on app update Marginal Too small to matter here and risks breaking code-signing on modern macOS SIP-protected apps; low ROI.
14 Photos library ~/Pictures/Photos Library.photoslibrary 354M (whole library) N/A — can’t isolate “derivatives” from user photos without deeper introspection NO Whole-library size, not a caches-only figure. Modest here; would be very different on a photography-heavy machine (see caveats).
15 Mail container ~/Library/Containers/com.apple.mail 9M PARTIAL NO — negligible This user’s Mail.app footprint is essentially empty.
16 iOS backups ~/Library/Application Support/MobileSync/Backup 0B / empty N/A NO Directory exists but is empty — no legacy iTunes/Finder backups on this machine.
17 Time Machine local snapshots (tmutil listlocalsnapshots /) 24 hourly snapshots found (2026-08-07 12:02 → 2026-08-08 11:14), sizes not measured (requires privilege) FULL — macOS creates/thins these automatically based on free space NO Not a real reclaim opportunity on a machine with 135G free; APFS snapshots are copy-on-write and mostly self-manage. Only relevant messaging when free space is critically low.
Xcode DerivedData / Archives / iOS DeviceSupport / Caches/com.apple.dt.Xcode 0B / not found / not found / not found NO — nothing there Xcode.app is installed (/Applications/Utilities/IDE/Xcode.app) but shows zero build/archive/cache history. Directly refutes the “20-50GB of Xcode alone” framing for this machine.

Sum of rows flagged “YES” (excluding the two out-of-scope 72G/39G outliers, excluding the unmeasured TM snapshots and incomplete system-cache floor): ≈ 60G of realistically reclaimable-or-reviewable data on this specific machine, concentrated almost entirely in developer tooling (simulator + package caches + docker + node_modules ≈ 51G of that 60G).

Expected finding: verify or refute?

Partially confirmed, with the composition being different than expected.

Net verdict: developer artifacts do dwarf generic OS caches on this machine (as hypothesized), but the specific Xcode/simulator numbers were wrong in direction — the weight moved from “Xcode build products” to “simulator + package manager + docker” — and the single biggest folder on disk was an idiosyncratic app-data blob the fixed hypothesis never named.

Module priority — driving P3 implementation order

  1. Trash empty — zero risk, zero regrowth, universal. Trivial to build, must exist.
  2. Downloads installer sweep (*.dmg/*.pkg), with duplicate detection — zero regrowth, high confidence; the 3x UTM.dmg duplicate on this machine is the exact pattern a “you already have this” dedup check should catch.
  3. Package manager cache sweep (npm/pnpm/yarn/cargo/go/gradle/maven/brew) — biggest FULL-regrowth bucket (11.6G here); safe because it always regenerates; universal across every dev machine regardless of what they’re building.
  4. Xcode/simulator module: DerivedData (always safe, FULL regrowth) + stale/unused simulator devices (PARTIAL regrowth, needs “not booted recently” heuristic — 19 of 22 devices here are already near-empty stale shells) + unused runtimes for iOS versions no longer targeted by any installed project. This is the largest generic dev bucket when Xcode is actually in use, even though it measured near-zero on this particular snapshot of this machine.
  5. node_modules sweep with staleness filter — only flag node_modules under projects whose git working tree / package.json hasn’t changed in N days; blanket deletion breaks the next npm run in an active project.
  6. Docker prune (dangling images/volumes only, default-safe) — requires the daemon to be running to introspect via docker system df -v; must degrade gracefully (as this audit did) when it isn’t, rather than reporting nothing.
  7. Generic “largest folders” scanner across ~/Library/Application Support and ~/Library/Containers, not a fixed category list — this is the meta-finding from rank #1 in the table above. A real product needs a fallback that surfaces “biggest folder we don’t have a named rule for” (LLM model weight dirs, VM disks, one-off app renders) because those can outweigh every named category combined.
  8. User/system cache cleaning — keep it (users expect it, it’s the “obvious” feature) but do not market it as the primary win; on this data it’s ~5x smaller than dev tooling and ~25x smaller than the single largest outlier folder.
  9. Log trimming with a retention window (e.g., keep 7-14 days) — moderate size, mostly one runaway log source (com.apple.diagnosticextensionsd, 1.1G alone here); don’t build per-source logic, just age-based trimming.
  10. Large & old file finder (surface, don’t auto-delete) — good insight feature for files like this machine’s 6.5G personal video and 6.3G of LLM model weights; requires human judgment, not automation.
  11. .lproj stripping — low priority; small yield (227M sampled here) and real risk of breaking code-signed app bundles on modern macOS. Consider skipping entirely for v1.
  12. Time Machine local snapshot management — low priority; macOS self-manages this already based on free space, and sizes aren’t even readable without privilege. Only worth building if the product targets “disk nearly full” emergency scenarios.
  13. Photos/Mail/iOS-backup cleanup — low priority on this measured machine (354M / 9M / 0B respectively) but see caveats: this is the category most likely to be completely wrong in priority order on a different kind of machine.

Caveats — n=1