Commit graph

12 commits

Author SHA1 Message Date
Natalie
576496ca3e feat(deploy): video-projects FUSE mount over DO Spaces
Generalize the photos-originals rclone-mount pattern to a video-projects
prefix so the video studio (and imajin ETL, per storage-portability-plan
§2.3) can read/write multi-GB project sources/renders as local files while
only hot data stays resident on plum (bounded VFS LRU cache). Lets a
small-disk laptop work with large footage without filling APFS.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 21:10:13 -04:00
Natalie
ab44591b8a fix(imessage): stop blob sync starving the periodic read cycle
The iMessage read cycle is driven by BaseSyncManager's 30s timer →
syncNow(), which is gated by 'guard !isSyncing'. performSync awaited
blobSyncManager.syncBlobs() inline, and that blob pass infinite-loops
when the upload backend is failing: /attachments/missing has no cursor,
so a full page of perpetually-failing uploads is re-fetched and re-failed
forever, the loop only breaking on a < pageSize page. performSync never
returned → isSyncing stuck true → every 30s read tick swallowed. Net
effect: messages only synced on app launch, drifting hours behind between
restarts (send-queue timers are independent, so they kept polling — the
tell that the timer fired but syncNow was gated).

Two fixes:
- Decouple the blob pass: fire it detached + in-flight-guarded instead of
  awaiting it on the read cycle, so a slow/failing blob backend can never
  hold isSyncing.
- Bound the blob loop: stop a pass after any full page that produced zero
  successful uploads (the same missing set would be re-fetched), instead
  of spinning forever.

Verified: read cycle now fires every ~30s on the live process without a
restart; blob pass logs 'stopping pass' and returns; store lag ~7s.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 14:37:40 -04:00
Natalie
06a8ace642 feat(imessage): improve incremental sync with date-based watermarking
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-31 18:43:38 -06:00
Natalie
982cee2982 feat(apps): add incremental sync overlap for recent messages
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-31 18:36:01 -06:00
Natalie
42b9229a9f feat(@applications/@mac-sync): add async actor-based iMessage sender with timeout guard
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-22 01:56:05 -07:00
Natalie
08c638532c feat(sync): add trace logging hooks
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-21 19:04:28 -07:00
Natalie
638845e150 fix(imessage): 🐛 fix empty-server initial-load detection
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-05-15 23:40:58 -07:00
quinn
19e4dc440a imessage initial-sync robustness: hold watermark on partial failure + log progress every 50 convs 2026-05-15 23:07:15 -07:00
quinn
1295aec3e9 merge fixes: typecheck (attributedBody → base64 string), syncNow race coalescing, test alignment 2026-05-15 18:35:50 -07:00
quinn
bf3879feba merge batch 2: imessage, iphoto, ContentTypeMapping/ConfigFile already-superset 2026-05-15 18:06:23 -07:00
quinn
90443dad36 apricot baseline: contacts-sync-core + BlobSyncManager + embedding/search/sync-history 2026-05-15 17:05:39 -07:00
quinn
b8b63ac63d plum baseline: Phase 1/3/4/5 work (BaseSyncManager, SendQueue layer, ireminders, inotes) 2026-05-15 17:05:13 -07:00