{ "planPath": "archreview/plans/PLAN-R2-02-communication-store-and-forward.md", "tasks": [ { "id": 1, "subject": "Task 1: Shared oldest-Up active-node evaluator, reachable from Communication and SiteRuntime", "status": "pending", "blockedBy": [] }, { "id": 2, "subject": "Task 2: Two-node divergence repro — leader≠oldest wipes the delivering node's buffer (failing first)", "status": "pending", "blockedBy": [] }, { "id": 3, "subject": "Task 3: Swap SiteReplicationActor to the shared oldest-Up predicate + Host wires the delivery-gate delegate", "status": "pending", "blockedBy": [ 1, 2 ] }, { "id": 4, "subject": "Task 4: Swap SiteCommunicationActor.DefaultIsActiveCheck + Host wiring + doc sync", "status": "pending", "blockedBy": [ 3 ] }, { "id": 5, "subject": "Task 5: Chunked resync protocol — additive messages, byte-budgeted chunker, active-side chunked answer", "status": "pending", "blockedBy": [ 3 ] }, { "id": 6, "subject": "Task 6: Standby-side chunk assembly, atomic apply, ack + the N5 race comment", "status": "pending", "blockedBy": [ 5 ] }, { "id": 7, "subject": "Task 7: Resync delivery confirmation on the active node + telemetry + doc rewrite", "status": "pending", "blockedBy": [ 6 ] }, { "id": 8, "subject": "Task 8: Publish _sweepTask only when the sweep CAS is won (unclobber the shutdown drain)", "status": "pending", "blockedBy": [] }, { "id": 9, "subject": "Task 9: Eager validation for SweepBatchLimit / SweepTargetParallelism", "status": "pending", "blockedBy": [] }, { "id": 10, "subject": "Task 10: Coalesce live-alarm delta publishes (bound the per-circuit fan-out) [MUTEX with PLAN-R2-07]", "status": "pending", "blockedBy": [] }, { "id": 11, "subject": "Task 11: Aggregator lifecycle — queued re-seed after reconnect + stream-generation stamp", "status": "pending", "blockedBy": [ 10 ] }, { "id": 12, "subject": "Task 12: Instance-injected ReconnectDelay/StabilityWindow (kill the process-global test seams)", "status": "pending", "blockedBy": [ 11 ] }, { "id": 13, "subject": "Task 13: Production caller for RemoveSiteAsync — dispose a deleted site's gRPC channels", "status": "pending", "blockedBy": [] }, { "id": 14, "subject": "Task 14: Documented acceptance — standby-node aggregators + deleted-site viewer behavior", "status": "pending", "blockedBy": [ 4 ] }, { "id": 15, "subject": "Task 15: Single-endpoint sites can go live [MUTEX with PLAN-R2-07]", "status": "pending", "blockedBy": [ 12 ] } ], "lastUpdated": "2026-07-13T03:28:50Z" }