Cross-filed from BaseInfinity/claude-rdlc-wizard#3 — same fix applies to Codex-side RDLC projects.
Problem
Per-contact CloudKit sync stalls silently when ingesting iMessage from macOS chat.db. Some contacts current, others lag hours/days behind — no error signal.
What works
Messages > Settings > iMessage > Sync Now — Apple's official force-pull. Daemon restarts alone don't reset per-zone sync tokens.
4-step escalation ladder
- WAL checkpoint: `sqlite3 ~/Library/Messages/chat.db 'PRAGMA wal_checkpoint(PASSIVE);'`
- Kill imagent + identityservicesd
- Kill full cascade: `killall IMDPersistenceAgent soagent cloudd`
- AppleScript Sync Now button click (see claude-rdlc-wizard#3 for full script)
Smoke test fix
`imessage_account_sync_smoke.py` grouped by `h.account` — column removed in modern macOS. Fix: `GROUP BY h.id` (phone/email) for per-contact granularity.
Full script and details: BaseInfinity/claude-rdlc-wizard#3
Cross-filed from BaseInfinity/claude-rdlc-wizard#3 — same fix applies to Codex-side RDLC projects.
Problem
Per-contact CloudKit sync stalls silently when ingesting iMessage from macOS chat.db. Some contacts current, others lag hours/days behind — no error signal.
What works
Messages > Settings > iMessage > Sync Now — Apple's official force-pull. Daemon restarts alone don't reset per-zone sync tokens.
4-step escalation ladder
Smoke test fix
`imessage_account_sync_smoke.py` grouped by `h.account` — column removed in modern macOS. Fix: `GROUP BY h.id` (phone/email) for per-contact granularity.
Full script and details: BaseInfinity/claude-rdlc-wizard#3