Skip to content

Releases: racuna/FilePodSync

Release list

1.3

Choose a tag to compare

@racuna racuna released this 11 May 18:26
ff25fb5

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 .jsonl files, 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 new consolidated_through_ts field in queue.json to skip already-applied ops on reconstruction.
  • Queue replay is now deterministic on timestamp ties. All ops carry a device_id field. When two ops share the same ts, 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 update mtime when verifying or transferring files, making mtime-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 own updated_at/updated_by fields, enabling housekeeping of stale device entries.
  • Device ID is stored as plain UTF-8, not JSON-encoded. json.dumps on a plain string wraps it in quotes, producing an invalid UUID when read back. The reference implementation and spec now use a direct write_text call.