Fastio Desktop sync and file management
Desktop App

Fastio Desktop 0.5.2 and 0.5.3: Delete Correctness and Faster Listings

Fastio Desktop now confirms deletes with the server before removing files, resolves concurrent edits correctly, and stops Finder listings from queuing.


A file you deleted somewhere else should disappear here, and a folder listing should not make you wait. 0.5.2 handles the first: what happens to your files when a delete, a rename, or two people editing at once passes through the sync engine. 0.5.3 handles the second: how long Finder makes you wait.

Deletes Now Require Server Confirmation

The sweep that removes stale nodes from your local copy used to act on its own reading of the world. It now requires confirmation from the server before it removes a file from disk. If the server has not confirmed the file is gone, the file stays.

The rest of the delete path got the same treatment:

  • A delete is remembered past the row it deleted, so a file that was removed cannot resurrect on a later pass.
  • “Already deleted” is treated as success. It is not an error, and dispatch is skipped entirely for nodes already known to be tombstoned.
  • Transfer history records the real outcome, not an optimistic one, so what you see in the app matches what actually happened.

Concurrent Edits and Conflict Copies

Two changes here, both of which decide whether you can trust a sync client.

Concurrent edits no longer resolve by whoever syncs last. Previously, ordering of the sync itself could decide which version survived.

And a local overwrite is no longer diverted into a conflict copy. If you deliberately replace a file on your Mac, that is an overwrite, and it is treated as one.

Part of the cause was on the Finder side: the extension now predicts which hash algorithm the server will use, so it compares like with like instead of comparing two different digests and concluding the file changed.

Keeping Up With Server Activity

The events poll, which is how the app learns what changed elsewhere, was losing work under rate limiting:

  • Pages that succeeded are kept when a later page in the same walk is rate limited, so a rate limit late in a walk no longer costs the pages that already came back.
  • The page walk is paced and honours the rate limit gate rather than pushing through it.
  • Page size went from 50 to 250, and audit log event classes are skipped, so fewer requests carry more of what matters.
  • Rate limit backoff escalates by elapsed time rather than by success count.
  • A stalled events cursor escalates on its own instead of waiting for a full walk to finish first.
  • A timestamp parser that rejected every activity timestamp is fixed.

Finder Integration and Troubleshooting

A domain reset no longer re-syncs your entire account, and both its description and its results are honest about what it actually does. The reset now clears signal gates, debounce state, and serviced container state.

“Clear all failed uploads” works past 32,766 rows, and orphaned jobs left behind by earlier failures are retired. Extension registrations and propagation latency are now measured and reported, so troubleshooting starts from numbers.

0.5.3: Finder Stops Waiting

Every request from Finder arrives on a single serial queue. Enumeration pages were being built on that queue, which meant a folder listing or a cold file read could sit behind a background pass that had nothing to do with it. In one case a 2.5 KB file took 62 seconds to open.

Enumeration pages now run off the delivery queue, and callbacks return in microseconds. Pacing delays apply only to the container being paced instead of every request in the process, and enumeration concurrency is bounded to 3.

Wide folders had a second problem. Each page of a listing rebuilt the full child list, so paging deeper into a folder got quadratically slower. Listings are now served by a keyset pager: one page read per page delivered.

Supporting that work:

  • New composite indexes across the tables behind node lookups and queued mutations, with redundant single column indexes dropped.
  • Share ids are prefetched once per listing instead of one query per folder.
  • New file name checks use a targeted child lookup rather than scanning the parent’s full listing.
  • New timing logs for fetch phases, the enumeration wait breakdown, and delivery queue hold time.
  • A panic while building a page is reported as a retryable error instead of taking down the Finder extension.

Both releases are macOS only. Download the latest build from the Desktop App page.

Ready to get started?

Start with a 14-day Business Trial.