miroir/crates
jedarden af1273f538 P4.4 Replica group addition: implementing initializing → active flow
Implements plan §2 "Adding a new replica group (throughput scaling)":

Core components:
- GroupAdditionCoordinator: Manages group addition state machine
  (Initializing → Syncing → SyncComplete → Active)
- GroupSyncWorker: Background worker that copies documents from source
  groups to new group via pagination with filter=_miroir_shard={id}
- GroupState enum: Tracks Initializing vs Active state for replica groups
- query_group_active(): Routes queries only to active groups, skipping
  initializing groups during sync

Key features:
- Round-robin source group selection across active groups to spread load
- Write fan-out to new group begins immediately during sync (durability
  guarantee - only historical data is transient until sync completes)
- Per-shard sync progress tracking for pause/resume (Phase 6 Mode C)
- Failed sync pauses without corrupting new group; resumes when source returns

Acceptance criteria met:
- RG=1 → RG=2: During sync, queries route only to active group (no regression)
- After active: queries distribute round-robin between both groups
- Mid-sync writes: fan out to both groups immediately
- Failed sync: pauses gracefully, resumes on source recovery

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 23:30:13 -04:00
..
miroir-core P4.4 Replica group addition: implementing initializing → active flow 2026-05-23 23:30:13 -04:00
miroir-ctl P3: Phase 3 Task Registry + Persistence — COMPLETE 2026-05-02 16:50:42 -04:00
miroir-proxy P4.4 Replica group addition: implementing initializing → active flow 2026-05-23 23:30:13 -04:00