# Calibration scenario paired with deployment bundle `1779733878`. # `N3_SWIM_TUNING_SPEC.md §5.3` is normative: the calibration scenario # configured to mirror the deployment's latency and topology must # produce fewer than 300 `SwimTransition` events in a 7-minute # virtual run (an order-of-magnitude reduction from the # deployment-observed 1701). # # Topology: four SWIM peers (orchestrator + three stages) routed # through a single own-relay. `conn_type=Relay` everywhere matches # the postmortem's "every peer connection is Relay" observation. # # Per-link latency mirrors the tier-2 RTT distribution from the # postmortem (§"UDP echo probes"): # - orchestrator: 293 ms RTT → ~147 ms one-way to relay # - stage-0: 181 ms RTT → ~91 ms one-way # - stage-1: 405 ms RTT → ~202 ms one-way # - stage-2: 184 ms RTT → ~92 ms one-way # # Because the scenario uses a single `default_link` policy, the # central value is set to ~200 ms (between the high-RTT stage-1 and # the lower-RTT others) with wide jitter (75 ms stddev) so the # distribution covers the deployment's spread per peer. name = "n3_1779733878_repro" seed = 1779733878 duration_ns = 420_000_000_000 # 7 min [default_tick] # 100 ms tick: a compromise between the production driver's # ~20 ms inner loop and the prior calibration scenarios' 200 ms # tick. The finer granularity gives sharper probe-timeout # enforcement than 200 ms while keeping the 7-minute run # under 5k ticks per peer. period_ns = 100_000_000 # 100 ms [default_link] # Latency band mirrors the deployment's tier-2 RTT distribution # (181–405 ms). One-way per-link latency near the median plus # jitter models the relay HOL queueing on the slower legs. The # 30 ms stddev is calibrated so the simulated p99 ack RTT # (≈ 2*(200 + 3*30) = 580 ms) sits near the postmortem's # stage-1 405 ms tier-2 RTT plus a relay-amplification margin. latency_ns = 200_000_000 # 200 ms one-way jitter_stddev_ns = 30_000_000 # 30 ms — intra-node RTT spread loss_prob_ppm = 0 reorder_prob_ppm = 0 bandwidth_bps = 25_000_000 cold_dial_penalty_ns = 200_000_000 cache_warm_after_ns = 200_000_000 cache_invalidate_after_idle_ns = 30_000_000_000 [[relays]] id = "own_relay" ingress_capacity_bps = 1_000_000_000 egress_capacity_bps_per_link = 100_000_000 queue_depth_bytes = 65_536 cold_start_penalty_ns = 0 [[peers]] id = "orchestrator" kind = "swim" initial_state = "alive" # Retuned operating point, mirrored at the scenario's 200 ms tick. kind_config = { probe_interval_ns = 2_000_000_000, probe_timeout_ns = 15_000_000_000, suspicion_timeout_ns = 45_000_000_000, indirect_ping_fanout = 2 } [[peers]] id = "stage-0" kind = "swim" initial_state = "alive" kind_config = { probe_interval_ns = 2_000_000_000, probe_timeout_ns = 15_000_000_000, suspicion_timeout_ns = 45_000_000_000, indirect_ping_fanout = 2 } [[peers]] id = "stage-1" kind = "swim" initial_state = "alive" kind_config = { probe_interval_ns = 2_000_000_000, probe_timeout_ns = 15_000_000_000, suspicion_timeout_ns = 45_000_000_000, indirect_ping_fanout = 2 } [[peers]] id = "stage-2" kind = "swim" initial_state = "alive" kind_config = { probe_interval_ns = 2_000_000_000, probe_timeout_ns = 15_000_000_000, suspicion_timeout_ns = 45_000_000_000, indirect_ping_fanout = 2 } # Every host pair routes through the own-relay (every connection # is `conn_type=Relay`, per the postmortem's topology section). [[links]] from = "orchestrator" to = "stage-0" via = "own_relay" [[links]] from = "stage-0" to = "orchestrator" via = "own_relay" [[links]] from = "orchestrator" to = "stage-1" via = "own_relay" [[links]] from = "stage-1" to = "orchestrator" via = "own_relay" [[links]] from = "orchestrator" to = "stage-2" via = "own_relay" [[links]] from = "stage-2" to = "orchestrator" via = "own_relay" [[links]] from = "stage-0" to = "stage-1" via = "own_relay" [[links]] from = "stage-1" to = "stage-0" via = "own_relay" [[links]] from = "stage-0" to = "stage-2" via = "own_relay" [[links]] from = "stage-2" to = "stage-0" via = "own_relay" [[links]] from = "stage-1" to = "stage-2" via = "own_relay" [[links]] from = "stage-2" to = "stage-1" via = "own_relay" [[snapshots]] at_ns = 1_000_000_000 [[snapshots]] at_ns = 30_000_000_000 [[snapshots]] at_ns = 120_000_000_000 [[snapshots]] at_ns = 300_000_000_000 [[snapshots]] at_ns = 419_000_000_000 # Acceptance §5.5: self_incarnation_peak stays in the prior # tune's 7–10 band. Set the bound on every peer at 10. [[assertions]] kind = "self_incarnation_bounded" peer = "orchestrator" max_value = 10 [[assertions]] kind = "self_incarnation_bounded" peer = "stage-0" max_value = 10 [[assertions]] kind = "self_incarnation_bounded" peer = "stage-1" max_value = 10 [[assertions]] kind = "self_incarnation_bounded" peer = "stage-2" max_value = 10