What's Fixed
Cloudflare hybrid sync reliability and reporting accuracy — field-diagnosed from a two-node production deployment where sync appeared perpetually broken despite successful replication.
POST /api/sync/force reliably completes (PR #753)
Force-sync previously embedded all memories before checking whether they were already present in the secondary store. On any reasonably-sized database this exhausted the Cloudflare Workers AI embed rate limit mid-run, producing a misleading "0 synced / N failed" result. The deduplication step now runs first, comparing content hashes against the secondary store before any embedding occurs — already-synced memories are skipped at zero quota cost.
Sync status flag reflects current health, not lifetime failures (PR #751)
status.sync_ok was a latch: once any error occurred it stayed False forever, even after the underlying problem was resolved. It now reflects whether the most-recent sync attempt succeeded, so health dashboards and monitoring probes show accurate state.
CF stats exclude soft-deleted tombstones (PR #751)
The Cloudflare statistics endpoint was counting tombstoned (soft-deleted) records in memory totals, inflating the remote count relative to the live dataset.
Reduced timezone-mismatch log noise (PR #751)
Spurious drift warnings from comparing UTC timestamps from Cloudflare against local naive datetimes are suppressed.
CI / Dependency bumps
python-semantic-release/python-semantic-release— PR #748actions/setup-python5 → 6 — PR #749actions/setup-node4 → 6 — PR #747
Full Changelog: https://github.com/doobidoo/mcp-memory-service/blob/main/CHANGELOG.md