mirror of
https://github.com/spacedriveapp/spacedrive.git
synced 2026-11-04 22:33:43 -05:00
The store half of P2. A walk becomes rows in the same record table the adapters write, through its own ingest. Ledger is the identity procedure the plan wanted as a table: every binding loaded into two maps at attach, resolution a hash lookup. Path hit with the same size and mtime writes nothing. Path hit with either changed keeps the record and drops the content identity, since a hash that names the old bytes is worse than none. Path miss with an inode hit rebinds only when size or mtime corroborates, because inode numbers get reused and a wrong rebind moves someone's assertions onto an unrelated file, while a missed one costs a re-tag. apply_files writes the batch, its removals and its watermark in one transaction, so a kill partway through leaves neither a partial batch nor a watermark claiming work that did not land. Both writers share INSERT_RECORD, now conflicting on the uuid rather than on (type, external_id): the walker resolves identity before writing, and a moved file is one row updated instead of a delete and an insert that would strand its assertions. UNIQUE (type, external_id) still stands, so two records claiming one path fails loudly. The filesystem is a declared data type, one model in Rust, so facet_file, the _schema row and the migration diff all come from the machinery the adapters use. FILE_SCHEMA goes: it was the same table declared twice. No index on facet_file.inode, against the design doc, because the only reader is one sequential scan at attach.
Spacedrive Documentation
This repository contains the Mintlify-powered documentation for Spacedrive.
Structure
docs/- Symlink to main spacedrive repo documentationmint.json- Mintlify configuration