Invariants / DC-PROTO-02

DC-PROTO-02

DC derived enforced

Transcript-equivalent miniprotocol behavior with Haskell node

Source

Project constitution §3, T-DET-01

Enforcement trace

Tests 48

  • chain_sync::transition::tests::idle_request_next_with_immediate_data_yields_can_await_then_roll_forward
  • chain_sync::transition::tests::idle_request_next_with_no_data_yields_must_reply_via_await
  • chain_sync::transition::tests::roll_forward_signal_carries_header_and_tip_byte_identical
  • chain_sync::transition::tests::roll_backward_signal_carries_point_and_tip_byte_identical
  • chain_sync::transition::tests::find_intersect_with_known_point_yields_intersected_signal
  • chain_sync::transition::tests::find_intersect_with_unknown_points_yields_no_intersection
  • chain_sync::transition::tests::client_done_terminates_session
  • chain_sync::transition::tests::illegal_message_in_idle_returns_error
  • chain_sync::transition::tests::wrong_agency_returns_error
  • chain_sync::transition::tests::version_gating_rejects_out_of_version_message
  • chain_sync::transition::tests::empty_find_intersect_points_returns_malformed
  • signal_trace_synthetic_divergence_corpus
  • block_fetch::transition::tests::idle_request_range_yields_busy_then_start_batch
  • block_fetch::transition::tests::busy_no_blocks_returns_to_idle_with_event
  • block_fetch::transition::tests::streaming_block_delivers_bytes_byte_identical
  • block_fetch::transition::tests::streaming_batch_done_returns_to_idle
  • block_fetch::transition::tests::multi_block_streaming_preserves_order
  • block_fetch::transition::tests::client_done_terminates_session
  • block_fetch::transition::tests::illegal_message_in_idle_returns_error
  • block_fetch::transition::tests::wrong_agency_returns_error
  • block_fetch::transition::tests::version_gating_rejects_out_of_version_message
  • block_fetch::transition::tests::inverted_range_returns_malformed
  • block_fetch::transition::tests::block_delivered_event_carries_bytes_verbatim
  • block_fetch_frame_corpus
  • tx_submission::transition::tests::init_handshake_opens_session
  • tx_submission::transition::tests::request_blocking_ids_then_reply_round_trips
  • tx_submission::transition::tests::request_non_blocking_ids_with_empty_reply_round_trips
  • tx_submission::transition::tests::request_txs_then_reply_delivers_bytes_byte_identical
  • tx_submission::transition::tests::request_txs_with_partial_reply_legal
  • tx_submission::transition::tests::blocking_reply_empty_is_malformed
  • tx_submission::transition::tests::reply_ids_overfill_is_malformed
  • tx_submission::transition::tests::request_txs_empty_is_malformed
  • tx_submission::transition::tests::reply_txs_overfill_is_malformed
  • tx_submission::transition::tests::done_terminates_session
  • tx_submission::transition::tests::illegal_message_in_init_returns_error
  • tx_submission::transition::tests::wrong_agency_returns_error
  • tx_submission::transition::tests::version_gating_rejects_out_of_version_message
  • tx_submission2_mempool_trace
  • chain_sync_real_capture_corpus::real_capture_round_trips_byte_identical
  • chain_sync_real_capture_corpus::rollforward_header_opaque_pass_through
  • block_fetch_real_capture_corpus::real_capture_round_trips_byte_identical
  • block_fetch_real_capture_corpus::block_body_is_wrapped_cbor_item
  • keep_alive_real_capture_corpus::real_capture_round_trips_byte_identical
  • keep_alive_real_capture_corpus::cookie_echo_invariant_holds
  • peer_sharing_real_capture_corpus::real_capture_round_trips_byte_identical
  • tx_submission2_real_capture_corpus::real_capture_round_trips_byte_identical
  • tx_submission2_real_capture_corpus::reply_txids_entries_are_real_32_byte_txids
  • codec::tx_submission::tests::real_cardano_reply_txids_decodes_and_re_encodes_byte_identical

Strengthened in

Evidence notes

FLIP (2026-06-14, slice TXSUB2-CODEC-REALWIRE): with the tx-submission2 real-wire codec fix (DC-PROTO-11) + a live server-side full-exchange capture, ALL 11 N2N+N2C mini-protocol surfaces now have real-capture byte-identical round-trips (decode a real cardano-node frame -> re-encode -> byte-identical). The last gap (tx_submission2 rich messages) is closed: the docker public-preprod cardano-node 11.0.1 dialed Ade and completed Init -> RequestTxIds -> ReplyTxIds -> RequestTxs -> ReplyTxs; the node-originated MsgReplyTxIds (era-tagged txid [6,hash] + indefinite array) and MsgReplyTxs (era-wrapped tx body + indefinite array) both re-encode byte-identically (corpus/network/n2n/tx_submission2/preprod_server_txsub_{reply_txids,reply_txs}_00_recv.cbor; tx_submission2_real_capture_corpus round-trip + ci_check_tx_submission2_real_capture.sh). Combined with the chain_sync / block_fetch / keep_alive / peer_sharing / handshake + 5 N2C real-capture corpora and the per-protocol transition state-machine tests, Ade's codec is transcript-equivalent with the Haskell node across the mini-protocol surface.