Release v0.13.0
Arch Network v0.13.0 (2026-10-29)
Compare: v0.12.2...v0.13.0
Date range: 2026-10-15 → 2026-10-29
Stats: 338 files changed, 15675 insertions(+), 20394 deletions(-)
Top impact areas: roast (38), antithesis (35), arch-cli (26), validator (24), e2e-tests (22), o11y (18), docker (17), structs (14), network (14), db_utils (13), sdk (12), ha (11), examples (8), .github (8), scripts (7), common (7), bootnode (7), resharing (6), testing_suite (5), program (4)
Highlights
Consensus (roast): Many fixes target leader and replica recovery, catch-up, and execution result cleanup. Dead consensus code was deleted, and consensus time is now read through a WallClock port.
Networking: Kademlia and dead network commands, events and errors were removed. An in-memory stream transport was added, and gossip payload decoding is now bounded.
Validator, RPC and SDK hardening: Several panic paths were removed, including the panic hook, ELF verification and DataContent filter offsets. RPC and WebSocket paths now enforce bounds and avoid blocking on slow subscribers. RUNTIME_TX_SIZE_LIMIT was raised to 4096 bytes.
Testing and infrastructure: A new Antithesis workload covers consistency, liveness, balance and fault-injection scenarios, and golden-value tests pin hash-committed encodings and genesis. arch-cli was removed, the toolchain moved to Rust 1.99.1, and several dependencies were bumped for RUSTSEC advisories.
Added
- Antithesis Test Composer workload with consistency, liveness and balance checks (#2791).
- Antithesis assertions for node safety properties and coverage of consensus events (#2790).
- Antithesis workload template, leader failover and fault-prone Titan (#2792).
- In-memory stream transport for the network crate, with a stream contract test (#2801).
- Consensus latency probe script (#2797).
- Seeded node-setup helpers in db_utils tests (#2799).
- Golden-value tests pinning hash-committed encodings and genesis (#2775).
- TPU test checking that leader and signer re-execution agree on generated blocks (#2776).
- dst-inventory.sh and a clippy guard for nondeterministic calls in roast (#2798).
- Nonce V2 (#2751).
- Binary version exposed via Prometheus (#2806).
- O11y report version and pagination support (#2845), with an o11y migration (app_table_add_id).
Changed
- Raised RUNTIME_TX_SIZE_LIMIT to 4096 bytes (#2846).
- Bumped the Rust toolchain to 1.99.1 (#2843).
- Removed Kademlia from the network crate (#2808).
- Removed dead commands, events and errors from the network crate (#2810).
- Removed arch-cli (#2795).
- Deleted dead consensus code in roast (#2796).
- roast now reads consensus time through a WallClock port (#2800).
- Decoders now accept exactly one encoding per value (#2772).
- Pinned the Titan image to v2.0.0 (#2788).
- Dependency bumps:
- tokio 1.53.3 and ctutils 0.4.4 (RUSTSEC-2026-0385, RUSTSEC-2026-0386) (#2809).
- crypto-bigint 0.7.10, with RUSTSEC-2026-0387 ignored for 0.5.5 (#2836).
- rustls-webpki and webpki-roots (#2793).
- quinn-proto and rustls (#2756).
- Testing suite: lowered bootnode leader_inactivity_period to 2s (#2759) and stopped waiting 60 s on a feed tx while leadership settles (#2763).
- Antithesis: restart_fresh now keeps only the identity secret, like an operator wipe (#2840).
- CI: APL program caches are keyed on the root lockfile and goldens re-pinned (#2844), and root profiles are hashed into every eBPF cache key (#2773).
Fixed
- roast: restart the coordinator when storage holds a block its ledger lacks (#2834).
- roast: follow whitelist changes on the allow list during catch-up (#2831).
- roast: evict aborted blocks' execution results on clear (#2837).
- roast: restart a replaced leader as a replica without panicking (#2784).
- roast: sync an empty ledger from the storage service before leading (#2786).
- validator: set up the bootstrap role before leaving WaitingForBootNodeResponse (#2832).
- validator: exit with a dedicated code when the disk is full (#2833).
- validator: don't panic inside the panic hook when a RocksDB flush fails (#2825).
- validator: serve RPC without waiting for Titan at startup (#2747).
- validator: expect dead_code on disabled ensure_faucet_enabled (#2755).
- sdk: don't panic verifying an ELF on an account shorter than the loader header (#2827).
- sdk: reject DataContent filters whose offset overflows instead of panicking (#2818).
- sdk: wait for Titan to index the prepare_fees funding transaction (#2802).
- rpc: bound recent_transactions offset, get_multiple_accounts keys and HTTP batches (#2821).
- websocket: never block publish on a subscriber that stops reading (#2819).
- structs/network: bound gossip payload decoding (#2771).
- Avoid read timeout between requests (#2803).
- Load test regression fix (#2769).
- load-tests: keep antithesis_sdk's full feature out of release builds (#2794).
- antithesis: restart a stepped-down validator inside its container (#2829).
- antithesis: measure liveness two thirds against the validator set (#2830).
- antithesis: run one program deploy at a time, at most 10 per timeline (#2828).
Performance and Observability
- validator: poll the bootnode while a fresh network's leader waits for votes (#2761).
- ha: size storage-service HTTP/2 windows for WAN block streams (#2754).
- Binary version exposed via Prometheus (#2806).
- O11y reports version and supports pagination (#2845).
- Consensus latency probe script for measuring consensus latency (#2797).
RPC and API Changes
- No breaking RPC method changes are identifiable from the commit log.
- RPC now bounds the recent_transactions offset, get_multiple_accounts key count and HTTP batch size (#2821). Requests exceeding these limits may now be rejected.
- WebSocket publishing no longer blocks on a subscriber that stops reading (#2819).
- S