Add two-way network split playbook#181
Conversation
Adds a Kurtosis devnet playbook that uses the disruptoor HTTP API to partition the network into two halves, verifies finality stalls during the split, heals it, and verifies finality recovers. Also passes --privileged to `kurtosis run` when disruptoor is in the args file, which it requires. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
🤖 qu0b-reviewerNow I have enough context. Let me write the review. SummaryThe PR adds a new Issues
Suggestions
Reviewed @ |
Replaces the hardcoded splitLeftParticipants/splitRightParticipants config with jq expressions that compute the two halves from the check_clients_are_healthy totalCount output: nodes 1..floor(N/2) on the left, floor(N/2)+1..N on the right. For odd N the right half gets the extra node. minClientCount (default 4) keeps either half below the 2/3 finality threshold. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two nodes is the minimum that supports a two-way split (1 vs 1). At N=3 the larger half retains a 2/3 finality majority; that's an operator choice rather than something this playbook should refuse. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Disruptoor can take a few seconds to bind its HTTP listener after the enclave starts, so the immediate curl in the health-check task would fail before the API was reachable. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replaces the hardcoded slotsPerEpoch=32 config with a get_consensus_specs task that exposes the value via tasks.get_specs.outputs.specs.SLOTS_PER_EPOCH, matching the established pattern in other playbooks. Also documents the limited YAML shapes the run.sh disruptoor grep recognises. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: pk910 <philipp@pk910.de>
Summary
playbooks/dev/two-way-network-split.yaml— a Kurtosis devnet playbook that uses the disruptoor HTTP API to partition the network into two halves, verifies finality stalls forsplitObservationEpochs, clears the split, then verifies finality recovers withinrecoveryEpochs..hack/devnet/run.shto pass--privilegedtokurtosis runwhendisruptooris present in the args file (disruptoor requires it).playbooks/_index.yamlto include the new playbook.Test plan
make devnet-runGET /v1/statewhile the playbook runsrecoveryEpochsafter clearing🤖 Generated with Claude Code