Mar 23, 10-11 AM (17)
Mar 23, 11-12 PM (97)
Mar 23, 12-1 PM (64)
Mar 23, 1-2 PM (53)
Mar 23, 2-3 PM (74)
Mar 23, 3-4 PM (69)
Mar 23, 4-5 PM (86)
Mar 23, 5-6 PM (65)
Mar 23, 6-7 PM (21)
Mar 23, 7-8 PM (18)
Mar 23, 8-9 PM (16)
Mar 23, 9-10 PM (19)
Mar 23, 10-11 PM (36)
Mar 23, 11-12 AM (31)
Mar 24, 12-1 AM (1)
Mar 24, 1-2 AM (3)
Mar 24, 2-3 AM (15)
Mar 24, 3-4 AM (4)
Mar 24, 4-5 AM (3)
Mar 24, 5-6 AM (4)
Mar 24, 6-7 AM (3)
Mar 24, 7-8 AM (102)
Mar 24, 8-9 AM (40)
Mar 24, 9-10 AM (30)
Mar 24, 10-11 AM (167)
Mar 24, 11-12 PM (26)
Mar 24, 12-1 PM (42)
Mar 24, 1-2 PM (129)
Mar 24, 2-3 PM (13)
Mar 24, 3-4 PM (41)
Mar 24, 4-5 PM (47)
Mar 24, 5-6 PM (111)
Mar 24, 6-7 PM (17)
Mar 24, 7-8 PM (9)
Mar 24, 8-9 PM (15)
Mar 24, 9-10 PM (16)
Mar 24, 10-11 PM (28)
Mar 24, 11-12 AM (14)
Mar 25, 12-1 AM (1)
Mar 25, 1-2 AM (2)
Mar 25, 2-3 AM (14)
Mar 25, 3-4 AM (2)
Mar 25, 4-5 AM (10)
Mar 25, 5-6 AM (5)
Mar 25, 6-7 AM (7)
Mar 25, 7-8 AM (14)
Mar 25, 8-9 AM (22)
Mar 25, 9-10 AM (48)
Mar 25, 10-11 AM (28)
Mar 25, 11-12 PM (36)
Mar 25, 12-1 PM (86)
Mar 25, 1-2 PM (29)
Mar 25, 2-3 PM (28)
Mar 25, 3-4 PM (65)
Mar 25, 4-5 PM (30)
Mar 25, 5-6 PM (16)
Mar 25, 6-7 PM (32)
Mar 25, 7-8 PM (10)
Mar 25, 8-9 PM (9)
Mar 25, 9-10 PM (6)
Mar 25, 10-11 PM (25)
Mar 25, 11-12 AM (16)
Mar 26, 12-1 AM (3)
Mar 26, 1-2 AM (9)
Mar 26, 2-3 AM (21)
Mar 26, 3-4 AM (10)
Mar 26, 4-5 AM (1)
Mar 26, 5-6 AM (14)
Mar 26, 6-7 AM (4)
Mar 26, 7-8 AM (8)
Mar 26, 8-9 AM (18)
Mar 26, 9-10 AM (33)
Mar 26, 10-11 AM (21)
Mar 26, 11-12 PM (34)
Mar 26, 12-1 PM (33)
Mar 26, 1-2 PM (77)
Mar 26, 2-3 PM (46)
Mar 26, 3-4 PM (51)
Mar 26, 4-5 PM (40)
Mar 26, 5-6 PM (19)
Mar 26, 6-7 PM (19)
Mar 26, 7-8 PM (15)
Mar 26, 8-9 PM (9)
Mar 26, 9-10 PM (17)
Mar 26, 10-11 PM (38)
Mar 26, 11-12 AM (11)
Mar 27, 12-1 AM (3)
Mar 27, 1-2 AM (1)
Mar 27, 2-3 AM (26)
Mar 27, 3-4 AM (12)
Mar 27, 4-5 AM (6)
Mar 27, 5-6 AM (3)
Mar 27, 6-7 AM (10)
Mar 27, 7-8 AM (18)
Mar 27, 8-9 AM (32)
Mar 27, 9-10 AM (26)
Mar 27, 10-11 AM (38)
Mar 27, 11-12 PM (26)
Mar 27, 12-1 PM (57)
Mar 27, 1-2 PM (31)
Mar 27, 2-3 PM (60)
Mar 27, 3-4 PM (40)
Mar 27, 4-5 PM (20)
Mar 27, 5-6 PM (29)
Mar 27, 6-7 PM (29)
Mar 27, 7-8 PM (13)
Mar 27, 8-9 PM (15)
Mar 27, 9-10 PM (13)
Mar 27, 10-11 PM (23)
Mar 27, 11-12 AM (15)
Mar 28, 12-1 AM (1)
Mar 28, 1-2 AM (1)
Mar 28, 2-3 AM (12)
Mar 28, 3-4 AM (1)
Mar 28, 4-5 AM (2)
Mar 28, 5-6 AM (1)
Mar 28, 6-7 AM (0)
Mar 28, 7-8 AM (2)
Mar 28, 8-9 AM (7)
Mar 28, 9-10 AM (7)
Mar 28, 10-11 AM (7)
Mar 28, 11-12 PM (7)
Mar 28, 12-1 PM (3)
Mar 28, 1-2 PM (4)
Mar 28, 2-3 PM (10)
Mar 28, 3-4 PM (2)
Mar 28, 4-5 PM (4)
Mar 28, 5-6 PM (5)
Mar 28, 6-7 PM (0)
Mar 28, 7-8 PM (0)
Mar 28, 8-9 PM (0)
Mar 28, 9-10 PM (1)
Mar 28, 10-11 PM (20)
Mar 28, 11-12 AM (20)
Mar 29, 12-1 AM (1)
Mar 29, 1-2 AM (6)
Mar 29, 2-3 AM (5)
Mar 29, 3-4 AM (6)
Mar 29, 4-5 AM (3)
Mar 29, 5-6 AM (5)
Mar 29, 6-7 AM (0)
Mar 29, 7-8 AM (0)
Mar 29, 8-9 AM (13)
Mar 29, 9-10 AM (0)
Mar 29, 10-11 AM (0)
Mar 29, 11-12 PM (2)
Mar 29, 12-1 PM (13)
Mar 29, 1-2 PM (0)
Mar 29, 2-3 PM (0)
Mar 29, 3-4 PM (1)
Mar 29, 4-5 PM (3)
Mar 29, 5-6 PM (3)
Mar 29, 6-7 PM (8)
Mar 29, 7-8 PM (5)
Mar 29, 8-9 PM (0)
Mar 29, 9-10 PM (8)
Mar 29, 10-11 PM (24)
Mar 29, 11-12 AM (17)
Mar 30, 12-1 AM (5)
Mar 30, 1-2 AM (5)
Mar 30, 2-3 AM (7)
Mar 30, 3-4 AM (7)
Mar 30, 4-5 AM (1)
Mar 30, 5-6 AM (11)
Mar 30, 6-7 AM (3)
Mar 30, 7-8 AM (29)
Mar 30, 8-9 AM (27)
Mar 30, 9-10 AM (10)
Mar 30, 10-11 AM (6)
3,530 commits this week Mar 23, 2026 - Mar 30, 2026
net-rs: net-node Stage 4 — Leios production and per-peer delay injection
Extend the test node with Leios block types and network delay simulation:

- production.rs: EB/vote lotteries at stage boundaries, stage boundary
  detection, refactored to share lottery logic across block types
- consensus.rs: handles LeiosBlockOffered -> FetchLeiosBlock,
  LeiosVotesOffered -> FetchLeiosVotes, LeiosBlockTxsOffered ->
  FetchLeiosBlockTxs, logs Leios block/vote reception
- config.rs: ib/eb/vote generation probabilities, stage_length_slots,
  eb/vote validation timing, per-peer inbound_delay_ms
- Coordinator per-peer delay: new peer_delays config in CoordinatorConfig,
  events from delayed peers buffered and delivered after configured
  duration. Zero overhead when unconfigured (has_any_delays guard).
  Implemented in coordinator event loop with conditional select branch.

27 net-node tests + 293 net-core tests pass, 0 clippy warnings.
Live-tested: Leios EB/vote production and fetch, per-peer 200ms delay
visible in timestamps.

Marks Stage 4 complete in test-node-plan.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
net-rs: net-node Stage 3 — consensus and validation
Add longest-chain consensus and configurable fake validation:

- consensus.rs: tracks local_tip, fetches blocks for longer chains,
  skips self-produced blocks, deduplicates in-flight fetches, handles
  rollbacks. 4 unit tests.
- validation.rs: spawns background sleep tasks (constant + per_byte ms),
  sends completion on mpsc channel. 2 unit tests.
- config.rs: ValidationConfig (rb_head_ms, rb_body_ms_constant/per_byte,
  tx_validation_ms/per_byte)
- main.rs: consensus handles TipAdvanced/BlockReceived/RolledBack events,
  validation_rx arm in select loop

Fix coordinator bug: PeerEvent::BlockFetched now carries the original
fetch range (from, to) so the coordinator uses the authoritative point
instead of falling back to Point::Origin when body.point() fails on
opaque/fake blocks. This fixes pending_fetches cleanup, fragment
pruning, and NetworkEvent::BlockReceived point accuracy.

317 tests (293 net-core + 24 net-node), 0 clippy warnings.

Marks Stage 3 complete in test-node-plan.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
chore(deps): bump actions/setup-go from 6.3.0 to 6.4.0
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 6.3.0 to 6.4.0.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/4b73464bb391d4059bd26b0524d20df3927bd417...4a3601121dd01d1626a1e23e37211e3254c1c06c)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-version: 6.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
net-rs: net-node Stage 2 — block production and tx injection
Add VRF-based block production (lottery ported from sim-rs) and Poisson
transaction generation to the test node:

- production.rs: stake-weighted VRF lottery, fake block building, deterministic seeding
- mempool.rs: background Poisson tx generator, random body sizes
- config.rs: ProductionConfig (stake, total_stake, rb_probability) and TxConfig (tx_rate, size range)
- main.rs: slot tick triggers try_produce_block, spawns tx generator

18 tests, 0 clippy warnings. Live-tested: producer (full stake, 200ms
slots) generates blocks seen by follower via ChainSync; txs broadcast
at configured rate.

Marks Stages 1 and 2 complete in test-node-plan.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>