mirror of
https://github.com/spacedriveapp/spacedrive.git
synced 2026-11-04 14:23:43 -05:00
A location was fifteen fields rooted at an entry. It is six now: a name, the source holding it, a path relative to that source's root, and whether someone put it there. It owns nothing, so unpinning is a DELETE of one row and the volume index does not notice. Everything dropped lives somewhere that already had it, and mostly had it better. scan_state and last_scan_at are the source's. total_size and file_count come off the arena's rollups, which are current rather than as of the last scan and can say a subtree was summarised where a stored integer cannot. index_mode and job_policies configured an indexer and a job pipeline that are both gone. entry_id is the ownership this phase exists to remove. The path is relative so a pin survives its drive mounting somewhere else, which is the whole reason a source carries a root and a location does not. Sources nest, so the innermost one containing the path wins. IndexMode goes with it. It was set on every IndexerJobConfig, threaded through the walk, and never read: the phase that consulted it was deleted with the persistent indexer, and content identity is its own job now. Four CLI flags and two modals were choosing between values nothing looked at. No rows carry over. Every one was anchored to an entry_id in a table this series removes. The five folders a person recognises are written at library creation instead, which is why there is no longer anything to add: Home, Desktop, Documents, Downloads and Pictures are simply there. Three more things fell out. File::from_entry_uuids and its siblings became File::at_path, for_record and announce, which is the pattern five call sites had each written by hand. SdPath::Content resolves through copies_of_content rather than joining entries to locations to devices, so it finds a copy on any drive rather than only where a location happened to be. And the peer file protocols allow source roots instead of location paths, which reaches at least as far and costs no query. One thing removed rather than ported: user_metadata_tag checked that a file-scoped tag came from the device owning the entry, via the location holding it. A record belongs to whichever machine walked it and carries no device column, so that check wants re-deriving when sync returns on top of sources rather than being rewritten to always pass. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>