Recallyx 0.79
Apply remote CloudKit changes live and stop clobbering imported edits (#66)
Device testing of the iPhone app (#64) showed sync only half-working:
new clips, pins, and deletes from another device never appeared in a
running app, a pin made on the phone silently reverted, and remote
deletes could resurrect.
Two root causes, both fixed:
- The store loaded its in-memory list once at launch and never noticed
CloudKit imports. It now enables persistent-history tracking +
remote-change notifications and merges imported changes into the running
app (debounced, flushing pending local edits first). The Mac panel keeps
its snapshot-per-open behavior; the iOS list updates live. - Persist mirrored the whole in-memory array — upserting every item and
deleting every row it didn't know about — so any local edit re-exported
stale fields over freshly imported ones (that's the reverted pin) and
re-created remotely deleted clips. Persist is now scoped to a
dirty/deleted id set and touches nothing else.
Also: image-orphan file cleanup is skipped when sync is on — image
payloads don't sync, so clips from another device legitimately have no
local file there.
Needs a two-device re-check before #64 merges (pin/delete propagation +
live Mac→phone), which is the plan anyway.