921edab454
MaxBatchSize 500 -> 16. The default is a ROW count, not a byte budget, so the batch size in bytes is set by the widest replicated column — config_json, which Task 1 measured at up to ~60-70 KB in production. 70 KB x 500 is ~35 MB against gRPC's 4 MB default receive limit; 16 keeps a worst-case batch near 1.1 MB. MaxOplogRows 1,000,000 -> 250,000 and MaxOplogAge 7d -> 2d, sized from the soak's 0.80 sf_messages rows/sec (~69k rows/day). Tighter than default is correct here because exceeding a cap is not data loss: the oplog prunes to the ceiling and sets needs_snapshot, so the peer catches up by snapshot resync instead of incrementally. That trades a rare full resync for a bounded file. site-b and site-c stay unreplicated, so the default-OFF posture is still proven side by side on one rig. Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts