Releases: racuna/FilePodSync
Releases · racuna/FilePodSync
Release list
1.3
v1.3 fixes correctness issues and implementation ambiguities discovered in v1.2 client implementations:
- Queue consolidation no longer touches other devices' files. In v1.2, consolidation truncated all
.jsonlfiles, including those belonging to other devices — a data-loss risk when another device was mid-write. Consolidation now only resets the local device's own op file, using a newconsolidated_through_tsfield inqueue.jsonto skip already-applied ops on reconstruction. - Queue replay is now deterministic on timestamp ties. All ops carry a
device_idfield. When two ops share the samets, they are ordered by(ts, device_id), producing identical results regardless of filesystem iteration order. - Conflict file detection covers all major sync providers. v1.2 only filtered Syncthing-style names (
.sync-conflict). v1.3 adds Dropbox ((conflicted copy)), Google Drive ((1).json), and generic patterns. - Log rotation uses filename dates, not filesystem
mtime. Sync providers routinely updatemtimewhen verifying or transferring files, makingmtime-based age calculations unreliable. - Bootstrap no longer resurrects deleted feeds. If a feed exists in the remote folder with
status: "deleted", bootstrapping a new device with that feed locally will not override the deletion. - Snapshot restore preserves original timestamps. In v1.2, restoring from a snapshot re-stamped all records with the current time, causing them to incorrectly win LWW conflicts against other devices' more recent edits.
- Device records now track status. Devices carry
status: "active" | "retired"and their ownupdated_at/updated_byfields, enabling housekeeping of stale device entries. - Device ID is stored as plain UTF-8, not JSON-encoded.
json.dumpson a plain string wraps it in quotes, producing an invalid UUID when read back. The reference implementation and spec now use a directwrite_textcall.