Makes storage operations work when storage folders live on a separate volume, falling back to copies when a rename would cross devices instead of failing.
Cross-volume moves
New cross_volume::move_path tries a plain rename first and, on a cross-device error, copies the tree, publishes it under the destination name, and removes the source; a failed copy leaves the source untouched.
Legacy folder repairs (root backups, bash tasks, filter folders, state files) now use this fallback and keep the source in place with a warning when the move still fails.
Callgraph orphan sweeping now reaches another key's build temporaries when the callgraph folder is a mount point, instead of skipping the whole folder.
A simulated-volume test seam makes CI reproduce EXDEV errors without a second filesystem.
Retention and migration preflight
Retention retires a mount-point cache folder by emptying it on its own volume instead of renaming it into the domain trash; the emptied mount point counts as gone on later passes.
Retirement publishes a durable pending marker under admission before moving entries, so reapers skip mount scans without it, resume interrupted retirements, and keep it until tombstone cleanup succeeds.
A concurrent reaper or retirement can no longer strand mount-local trash: snapshots are taken under admission, unlinks run outside it, and container creation retries if a previous reaper removed it.
Storage migration preflight now checks free space on each destination volume (the target root plus any cache folder on another volume), charging each volume only the bytes headed for it.
Confidence Score: 4/5
Fix the migration retry disk check before merging.
Adds copy-based fallback for cross-volume legacy repairs, mount-local cache retirement, and disk checks for each migration destination volume.
Legacy storage files can move into harness folders on another volume.
Callgraph cleanup reaches keys on a mounted callgraph volume.
Retention clears mounted cache folders without moving their mount.
Migration checks free space on every destination volume.
Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Move legacy path] --> B{Rename succeeds?}
B -->|Yes| C[Done]
B -->|Cross-device error| D[Copy into destination staging path]
D --> E{Copy succeeds?}
E -->|No| F[Keep source and report error]
E -->|Yes| G[Publish and sync destination]
G --> H[Remove source]