Imported from bare git on Zurich
Go to file
James 00b7105e18 Event-driven async replication (Commercial Only)
Replaces wasteful 30s polling with event-driven design:
- No polling - worker sleeps until woken by SignalReplication()
- Replication triggers immediately on write operations
- Perfect for low-change vaults (could be days without writes)

Changes:
- edition/replication.go: Event-driven worker with channel signaling
- edition/edition.go: Add SignalReplication var
- edition/community.go: No-op SignalReplication stub
- edition/commercial.go: Wire up signalReplication

Architecture:
1. Write handler marks entry dirty (replication_dirty = 1)
2. Calls edition.SignalReplication() (non-blocking)
3. Worker wakes, batches ALL dirty entries
4. POSTs to backup POP
5. Clears dirty flags on success
6. Worker sleeps until next signal

Retry logic:
- Exponential backoff: 1s, 5s, 25s, 125s...
- Max 5 retries, then operator alert
- Dirty entries persist in DB until replicated

Resource efficiency:
- CPU: Only wakes on actual writes (not 2,880x/day polling)
- Network: Only sends when data changes
- For 10 writes/day: ~288x fewer wakeups than polling

Documentation:
- SPEC-replication-async.md: Full event-driven design spec
2026-04-02 00:51:51 -04:00
clavis Event-driven async replication (Commercial Only) 2026-04-02 00:51:51 -04:00
clavitor.ai Replication v2: Active-Passive with Async Sync (Commercial Only) 2026-04-02 00:50:20 -04:00
design-system chore: auto-commit uncommitted changes 2026-03-24 06:02:53 -04:00
docs docs: add Futurepedia listing content for clavitor.ai (TASK-074) 2026-03-29 07:36:12 -04:00
marketing chore: auto-commit uncommitted changes 2026-03-24 06:02:53 -04:00
operations Replication v2: Active-Passive with Async Sync (Commercial Only) 2026-04-02 00:50:20 -04:00
.DS_Store chore: auto-commit uncommitted changes 2026-03-27 00:01:22 -04:00
._.DS_Store chore: auto-commit uncommitted changes 2026-03-24 06:02:53 -04:00
CLAUDE.md chore: auto-commit uncommitted changes 2026-03-26 06:03:15 -04:00