2026-06-09 09:29:07 +00:00
|
|
|
# Partition the cluster into {a} | {b, c}, then heal. Asserts the cluster
|
|
|
|
|
# converges back to all-Alive within a bounded window AND that the isolated
|
|
|
|
|
# node's death is *resolved* — the Dead→Alive resurrection arc (Goal 3, "death
|
|
|
|
|
# is provisional"), not just the post-heal endpoint. `dead_reprobe_interval_ns`
|
|
|
|
|
# is non-zero so the partition-heal detector (SWIM_ACTOR_SPEC §9.8) actually
|
|
|
|
|
# re-probes the isolated node and lets it refute back to Alive.
|
feat(sim): add swim host adapter and network model
Restructures the crate to the SIM_SPEC six-component model (engine, network, host,
bundle, evaluator, scenario) and relocates SIM_SPEC.md into the crate. Adds the SWIM
host adapter wrapping production distribution::swim::SwimNode, the swim codec, a
virtual network model, the scenario loader, an assertion evaluator, deterministic RNG,
property-based tests, and reproduction/smoke/topology scenario TOMLs; drops the
detector/divergence/lint/postproc/spec/runtime modules and prior spec docs.
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
2026-05-24 09:05:11 +00:00
|
|
|
# Expected verdict: pass-now.
|
|
|
|
|
|
|
|
|
|
name = "partition_heal"
|
|
|
|
|
seed = 7
|
|
|
|
|
duration_ns = 90_000_000_000
|
|
|
|
|
|
|
|
|
|
[default_tick]
|
|
|
|
|
period_ns = 200_000_000
|
|
|
|
|
|
|
|
|
|
[default_link]
|
|
|
|
|
latency_ns = 5_000_000
|
|
|
|
|
jitter_stddev_ns = 1_000_000
|
|
|
|
|
loss_prob_ppm = 0
|
|
|
|
|
reorder_prob_ppm = 0
|
|
|
|
|
bandwidth_bps = 100_000_000
|
|
|
|
|
cold_dial_penalty_ns = 50_000_000
|
|
|
|
|
cache_warm_after_ns = 100_000_000
|
|
|
|
|
cache_invalidate_after_idle_ns = 30_000_000_000
|
|
|
|
|
|
|
|
|
|
[[peers]]
|
|
|
|
|
id = "a"
|
|
|
|
|
kind = "swim"
|
|
|
|
|
initial_state = "alive"
|
2026-06-09 09:29:07 +00:00
|
|
|
kind_config = { probe_interval_ns = 1_000_000_000, suspicion_timeout_ns = 5_000_000_000, dead_reprobe_interval_ns = 1_000_000_000 }
|
feat(sim): add swim host adapter and network model
Restructures the crate to the SIM_SPEC six-component model (engine, network, host,
bundle, evaluator, scenario) and relocates SIM_SPEC.md into the crate. Adds the SWIM
host adapter wrapping production distribution::swim::SwimNode, the swim codec, a
virtual network model, the scenario loader, an assertion evaluator, deterministic RNG,
property-based tests, and reproduction/smoke/topology scenario TOMLs; drops the
detector/divergence/lint/postproc/spec/runtime modules and prior spec docs.
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
2026-05-24 09:05:11 +00:00
|
|
|
[[peers]]
|
|
|
|
|
id = "b"
|
|
|
|
|
kind = "swim"
|
|
|
|
|
initial_state = "alive"
|
2026-06-09 09:29:07 +00:00
|
|
|
kind_config = { probe_interval_ns = 1_000_000_000, suspicion_timeout_ns = 5_000_000_000, dead_reprobe_interval_ns = 1_000_000_000 }
|
feat(sim): add swim host adapter and network model
Restructures the crate to the SIM_SPEC six-component model (engine, network, host,
bundle, evaluator, scenario) and relocates SIM_SPEC.md into the crate. Adds the SWIM
host adapter wrapping production distribution::swim::SwimNode, the swim codec, a
virtual network model, the scenario loader, an assertion evaluator, deterministic RNG,
property-based tests, and reproduction/smoke/topology scenario TOMLs; drops the
detector/divergence/lint/postproc/spec/runtime modules and prior spec docs.
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
2026-05-24 09:05:11 +00:00
|
|
|
[[peers]]
|
|
|
|
|
id = "c"
|
|
|
|
|
kind = "swim"
|
|
|
|
|
initial_state = "alive"
|
2026-06-09 09:29:07 +00:00
|
|
|
kind_config = { probe_interval_ns = 1_000_000_000, suspicion_timeout_ns = 5_000_000_000, dead_reprobe_interval_ns = 1_000_000_000 }
|
feat(sim): add swim host adapter and network model
Restructures the crate to the SIM_SPEC six-component model (engine, network, host,
bundle, evaluator, scenario) and relocates SIM_SPEC.md into the crate. Adds the SWIM
host adapter wrapping production distribution::swim::SwimNode, the swim codec, a
virtual network model, the scenario loader, an assertion evaluator, deterministic RNG,
property-based tests, and reproduction/smoke/topology scenario TOMLs; drops the
detector/divergence/lint/postproc/spec/runtime modules and prior spec docs.
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
2026-05-24 09:05:11 +00:00
|
|
|
|
|
|
|
|
[[links]]
|
|
|
|
|
from = "a"
|
|
|
|
|
to = "b"
|
|
|
|
|
[[links]]
|
|
|
|
|
from = "b"
|
|
|
|
|
to = "a"
|
|
|
|
|
[[links]]
|
|
|
|
|
from = "a"
|
|
|
|
|
to = "c"
|
|
|
|
|
[[links]]
|
|
|
|
|
from = "c"
|
|
|
|
|
to = "a"
|
|
|
|
|
[[links]]
|
|
|
|
|
from = "b"
|
|
|
|
|
to = "c"
|
|
|
|
|
[[links]]
|
|
|
|
|
from = "c"
|
|
|
|
|
to = "b"
|
|
|
|
|
|
|
|
|
|
[[mutations]]
|
|
|
|
|
kind = "partition"
|
|
|
|
|
at_ns = 10_000_000_000
|
|
|
|
|
peers_a = ["a"]
|
|
|
|
|
peers_b = ["b", "c"]
|
|
|
|
|
|
|
|
|
|
[[mutations]]
|
|
|
|
|
kind = "heal"
|
|
|
|
|
at_ns = 30_000_000_000
|
|
|
|
|
|
2026-06-09 09:29:07 +00:00
|
|
|
# Snapshots spanning the post-heal convergence window so `convergence_after`
|
|
|
|
|
# has data to evaluate (snapshots are only emitted at these declared times).
|
|
|
|
|
[[snapshots]]
|
|
|
|
|
at_ns = 45_000_000_000
|
|
|
|
|
[[snapshots]]
|
|
|
|
|
at_ns = 55_000_000_000
|
|
|
|
|
[[snapshots]]
|
|
|
|
|
at_ns = 60_000_000_000
|
|
|
|
|
|
feat(sim): add swim host adapter and network model
Restructures the crate to the SIM_SPEC six-component model (engine, network, host,
bundle, evaluator, scenario) and relocates SIM_SPEC.md into the crate. Adds the SWIM
host adapter wrapping production distribution::swim::SwimNode, the swim codec, a
virtual network model, the scenario loader, an assertion evaluator, deterministic RNG,
property-based tests, and reproduction/smoke/topology scenario TOMLs; drops the
detector/divergence/lint/postproc/spec/runtime modules and prior spec docs.
Signed-off-by: Zachery Aaron Shores-Chmielewski <zacheryasc@gmail.com>
2026-05-24 09:05:11 +00:00
|
|
|
[[assertions]]
|
|
|
|
|
kind = "convergence_after"
|
|
|
|
|
after_ns = 30_000_000_000
|
|
|
|
|
within_ns = 30_000_000_000
|
|
|
|
|
peers = ["a", "b", "c"]
|
2026-06-09 09:29:07 +00:00
|
|
|
|
|
|
|
|
# Goal 3 — death is provisional: the isolated node "a" is detected Dead during
|
|
|
|
|
# the partition, then resurrected to Alive after the heal (within the window).
|
|
|
|
|
[[assertions]]
|
|
|
|
|
kind = "dead_peer_resurrects_within"
|
|
|
|
|
peer = "a"
|
|
|
|
|
after_ns = 10_000_000_000
|
|
|
|
|
within_ns = 60_000_000_000
|