Invariants / RO-LIVE-04

RO-LIVE-04

RO release enforced

Live wire-smoke pass: operator runs ade_node --mode wire_only --peer ADDR --network NAME against a private cardano-node peer. The binary opens TCP, completes the N2N handshake, issues one chain-sync FindIntersect(Origin), reads the peer's announced tip, emits a closed-vocabulary JSONL log of the exchange, and exits cleanly. The JSONL event vocabulary is closed: only node_started / peer_dial_started / handshake_ok / peer_tip_read / peer_dial_failed / wire_smoke_complete / node_shutdown variants are emitted. The wire-only mode MUST NOT emit agreement_verdict / admitted_block / ledger_applied / projection_updated (CI grep enforces). The pass closes the wire-liveness half of RO-LIVE-03.

Source

docs/planning/phase4-n-l-live-wire-smoke-invariants.md §1

Enforcement trace

Tests 11

  • crates/ade_node/tests/wire_only_loopback.rs::main_wire_only_exits_zero_after_tip_read
  • crates/ade_node/tests/wire_only_loopback.rs::main_wire_only_emits_peer_tip_read_with_responder_tip
  • crates/ade_node/tests/wire_only_loopback.rs::main_wire_only_never_emits_agreement_verdict
  • crates/ade_node/tests/wire_only_loopback.rs::main_without_genesis_does_not_attempt_admission
  • crates/ade_node/tests/wire_only_loopback.rs::peer_dial_failure_exits_nonzero_with_error_event
  • crates/ade_node/tests/wire_only_loopback.rs::admission_mode_fails_closed_with_ledger_seed_unavailable
  • crates/ade_node/tests/wire_only_loopback.rs::jsonl_events_are_valid_one_object_per_line
  • crates/ade_node/src/live_log/writer.rs::tests::live_log_writer_emits_one_object_per_line
  • crates/ade_node/src/live_log/writer.rs::tests::live_log_writer_serializes_node_started_canonically
  • crates/ade_node/src/live_log/writer.rs::tests::live_log_writer_two_runs_are_byte_identical
  • crates/ade_node/src/live_log/event.rs::tests::live_log_event_match_is_exhaustive

Cross-references

Strengthened in

Evidence notes

PHASE4-N-L-LIVE (2026-05-26) operator pass against the local docker cardano-node-preprod (ghcr.io/intersectmbo/cardano-node:11.0.1, 127.0.0.1:3001, preprod magic=1): handshake_ok at negotiated_version=15, peer_tip_read at slot=23013663 block_no=720328 hash=2a2fd42f8f1a3f9fc4faf3d448c5b3d84a8c5d0b1039aa90b5c022e11cb4704f, wire_smoke_complete with admission_enabled=false, exit 0. Captured JSONL at docs/clusters/completed/PHASE4-N-L-LIVE/CE-N-L-LIVE-LIVE.log. The cluster's mechanical half (7 integration tests + 13 lib tests + 2 CI gates) shipped first; the operator pass is the live-evidence half.