Home /
Input Output /
ouroboros-consensus
May 11, 12-1 PM (0)
May 11, 1-2 PM (2)
May 11, 2-3 PM (0)
May 11, 3-4 PM (0)
May 11, 4-5 PM (0)
May 11, 5-6 PM (0)
May 11, 6-7 PM (0)
May 11, 7-8 PM (1)
May 11, 8-9 PM (0)
May 11, 9-10 PM (0)
May 11, 10-11 PM (0)
May 11, 11-12 AM (0)
May 12, 12-1 AM (0)
May 12, 1-2 AM (0)
May 12, 2-3 AM (0)
May 12, 3-4 AM (0)
May 12, 4-5 AM (0)
May 12, 5-6 AM (0)
May 12, 6-7 AM (0)
May 12, 7-8 AM (0)
May 12, 8-9 AM (3)
May 12, 9-10 AM (3)
May 12, 10-11 AM (13)
May 12, 11-12 PM (1)
May 12, 12-1 PM (1)
May 12, 1-2 PM (8)
May 12, 2-3 PM (0)
May 12, 3-4 PM (5)
May 12, 4-5 PM (0)
May 12, 5-6 PM (0)
May 12, 6-7 PM (0)
May 12, 7-8 PM (2)
May 12, 8-9 PM (1)
May 12, 9-10 PM (0)
May 12, 10-11 PM (0)
May 12, 11-12 AM (0)
May 13, 12-1 AM (0)
May 13, 1-2 AM (0)
May 13, 2-3 AM (0)
May 13, 3-4 AM (0)
May 13, 4-5 AM (0)
May 13, 5-6 AM (0)
May 13, 6-7 AM (0)
May 13, 7-8 AM (1)
May 13, 8-9 AM (1)
May 13, 9-10 AM (2)
May 13, 10-11 AM (3)
May 13, 11-12 PM (18)
May 13, 12-1 PM (3)
May 13, 1-2 PM (2)
May 13, 2-3 PM (0)
May 13, 3-4 PM (0)
May 13, 4-5 PM (0)
May 13, 5-6 PM (0)
May 13, 6-7 PM (3)
May 13, 7-8 PM (3)
May 13, 8-9 PM (0)
May 13, 9-10 PM (0)
May 13, 10-11 PM (0)
May 13, 11-12 AM (0)
May 14, 12-1 AM (0)
May 14, 1-2 AM (0)
May 14, 2-3 AM (0)
May 14, 3-4 AM (0)
May 14, 4-5 AM (0)
May 14, 5-6 AM (0)
May 14, 6-7 AM (0)
May 14, 7-8 AM (0)
May 14, 8-9 AM (1)
May 14, 9-10 AM (0)
May 14, 10-11 AM (0)
May 14, 11-12 PM (0)
May 14, 12-1 PM (0)
May 14, 1-2 PM (0)
May 14, 2-3 PM (1)
May 14, 3-4 PM (0)
May 14, 4-5 PM (0)
May 14, 5-6 PM (0)
May 14, 6-7 PM (0)
May 14, 7-8 PM (1)
May 14, 8-9 PM (2)
May 14, 9-10 PM (7)
May 14, 10-11 PM (0)
May 14, 11-12 AM (0)
May 15, 12-1 AM (0)
May 15, 1-2 AM (0)
May 15, 2-3 AM (0)
May 15, 3-4 AM (1)
May 15, 4-5 AM (5)
May 15, 5-6 AM (9)
May 15, 6-7 AM (0)
May 15, 7-8 AM (2)
May 15, 8-9 AM (1)
May 15, 9-10 AM (1)
May 15, 10-11 AM (0)
May 15, 11-12 PM (4)
May 15, 12-1 PM (13)
May 15, 1-2 PM (9)
May 15, 2-3 PM (4)
May 15, 3-4 PM (3)
May 15, 4-5 PM (1)
May 15, 5-6 PM (4)
May 15, 6-7 PM (3)
May 15, 7-8 PM (6)
May 15, 8-9 PM (0)
May 15, 9-10 PM (0)
May 15, 10-11 PM (0)
May 15, 11-12 AM (0)
May 16, 12-1 AM (0)
May 16, 1-2 AM (0)
May 16, 2-3 AM (0)
May 16, 3-4 AM (0)
May 16, 4-5 AM (0)
May 16, 5-6 AM (0)
May 16, 6-7 AM (0)
May 16, 7-8 AM (0)
May 16, 8-9 AM (0)
May 16, 9-10 AM (0)
May 16, 10-11 AM (0)
May 16, 11-12 PM (0)
May 16, 12-1 PM (0)
May 16, 1-2 PM (0)
May 16, 2-3 PM (0)
May 16, 3-4 PM (1)
May 16, 4-5 PM (2)
May 16, 5-6 PM (0)
May 16, 6-7 PM (1)
May 16, 7-8 PM (6)
May 16, 8-9 PM (0)
May 16, 9-10 PM (0)
May 16, 10-11 PM (6)
May 16, 11-12 AM (1)
May 17, 12-1 AM (0)
May 17, 1-2 AM (0)
May 17, 2-3 AM (0)
May 17, 3-4 AM (0)
May 17, 4-5 AM (0)
May 17, 5-6 AM (1)
May 17, 6-7 AM (1)
May 17, 7-8 AM (0)
May 17, 8-9 AM (0)
May 17, 9-10 AM (0)
May 17, 10-11 AM (0)
May 17, 11-12 PM (1)
May 17, 12-1 PM (0)
May 17, 1-2 PM (0)
May 17, 2-3 PM (1)
May 17, 3-4 PM (1)
May 17, 4-5 PM (0)
May 17, 5-6 PM (9)
May 17, 6-7 PM (0)
May 17, 7-8 PM (0)
May 17, 8-9 PM (1)
May 17, 9-10 PM (0)
May 17, 10-11 PM (0)
May 17, 11-12 AM (0)
May 18, 12-1 AM (0)
May 18, 1-2 AM (0)
May 18, 2-3 AM (0)
May 18, 3-4 AM (4)
May 18, 4-5 AM (0)
May 18, 5-6 AM (0)
May 18, 6-7 AM (29)
May 18, 7-8 AM (0)
May 18, 8-9 AM (11)
May 18, 9-10 AM (0)
May 18, 10-11 AM (7)
May 18, 11-12 PM (8)
May 18, 12-1 PM (0)
245 commits this week
May 11, 2026
-
May 18, 2026
Tweak TestBlock to use getPerasCertInBlock in tests
WIP implementing VoteForging wrapper
Introduce O.C.Peras.(Vote|Cert).Mock
Consolidate Peras vote and certificate projection type classes
Split degenerate BlockSupportsPeras instance
Split base Peras types into separate module
Remove PerasCfg type family
Tweak TestBlock to use getPerasCertInBlock in tests
Leios demo: ImmDBServer schedule-driven Leios + schedule generator
Adapt the ImmDBServer tool to drive a Leios demo from a pre-recorded schedule: replay EBs / cert-blocks at slot timestamps and serve them over the LeiosNotify / LeiosFetch mini-protocols introduced in the diffusion chunk. The actual schedule generator lives at 'ouroboros-consensus/app/leios-schedule-gen.hs' (committed with the diffusion chunk for cabal layout reasons). - 'immdb-server' grows --leios-db / --leios-schedule / --initial-slot / --initial-time / --address. - 'Cardano.Tools.ImmDBServer.Diffusion' adds the LeiosSchedule type and a scheduler thread that ticks through schedule entries. - 'Cardano.Tools.ImmDBServer.MiniProtocols' grows LeiosNotify / LeiosFetch responders, send/recv tracers, and a slot-delay aware chainSyncServer. Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios voting: LeiosVoteState + leiosVoting thread + threadnet test
Add the voting capability on top of the diffusion layer: an EB becomes eligible for certification once enough peers have voted 'yes' on it (via the 'MsgLeiosVotes' message on the LeiosNotify protocol from the previous chunk). Voting state - 'LeiosVoteState' (new module) — aggregated vote state across all peers, with 'addVote' / 'subscribeVotes' write/read API. - 'NodeKernel.getLeiosVoteState' field plus the 'NodeKernelArgs.leiosVotingKey' / 'NodeKernel.leiosVoting' background thread that subscribes to local 'AcquiredEbTxs' notifications and emits one vote per acquired EB. LeiosNotify wiring - The 'MsgLeiosVotes' server case now calls 'addVote' on each incoming vote (replacing the chunk-2 no-op stub). - The notify server multiplexes EB offers with a 'processVote' loop that drains 'subscribeVotes leiosVoteState' and publishes 'MsgLeiosVotes' to peers. Tests - 'Test.LeiosVoteState' (foundation-level unit tests). - 'Test.ThreadNet.Leios' — end-to-end threadnet driver that asserts cert blocks happen, no vacuous runs, gap > 'minCertificationGap', all nodes converge, and the post-resolve replay matches the live ledger. cabal - Exposes 'LeiosVoteState'; wires 'Test.LeiosVoteState' / 'Test.ThreadNet.Leios' into the test suites. Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios diffusion: LeiosNotify + LeiosFetch mini-protocols + Reception
Wire LeiosNotify and LeiosFetch mini-protocols into the node-to-node
diffusion layer, plus the consensus-side adaptation to the network
fork's BearerBytes + arrival-time 'Reception' API.
Mini-protocols (live in consensus, not network)
- LeiosDemoOnlyTestFetch — request/response for EB bodies and the
accompanying tx closures.
- LeiosDemoOnlyTestNotify — server pushes 'MsgLeiosBlockOffer' /
'MsgLeiosBlockTxsOffer' as EBs arrive, plus 'MsgLeiosVotes' which
this chunk handles as a no-op stub (the voting chunk replaces it).
- New 'NodeKernel' fields: 'getLeiosDB', 'getLeiosPeersVars',
'getLeiosOutstanding', 'getLeiosReady'. The 'leiosFetchLogic'
thread (0.5s loop) reads peers' offerings, runs the fetch-decision
iteration and dispatches fetches.
Network wiring
- 'Ouroboros.Consensus.Network.NodeToNode' grows codecs + handlers
for both protocols and threads the LeiosDbConnection through to the
inbound side.
- 'Ouroboros.Consensus.Node' opens the in-memory LeiosDb and passes
the handle + connection to the kernel / NTN / ChainDB layers.
BearerBytes + Reception migration
- All codec entry points drop the 'dataSize :: bytes -> Word'
argument (now a 'BearerBytes' constraint).
- 'recv' returns 'Maybe (Reception a)' carrying per-chunk arrival
times; the threadnet harness wraps reads via 'MkReception
IntMap.empty', the PeerSimulator strips via 'fmap received'.
- 'TraceSendRecv' grows arrival-time on the receive side
('TraceRecvMsg :: Maybe Time -> AnyMessage ps -> ...').
Threadnet harness
- 'MinimalChainDbArgs.mcdbLeiosDbVar' backs the in-memory LeiosDb
with a TVar so the test infrastructure can inspect it.
cabal
- Exposes 'LeiosDemoOnlyTestFetch' / 'LeiosDemoOnlyTestNotify' and
adds network-mux, pretty-simple, typed-protocols:cborg deps.
Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios resolving + chain inclusion
Plumb a 'ResolveLeiosBlock' typeclass through the block-application
pipeline so a Dijkstra-era block carrying 'SJust LeiosCert' has its
(empty) tx list spliced in from the EB closure in the LeiosDb before
validation. Plumbing only — no chain-selection rule change.
- 'Storage.LedgerDB.Forker' defines 'ResolveLeiosBlock' as a typeclass
with a no-op default, and the 'applyBlock' hook calls
'resolveLeiosBlock leiosDb hdrSt b' before
'tickThen{Apply,Reapply}'. The forker reads the 'ExtLedgerState' to
extract 'headerState' for the splice (used to look up the previous
EB announcement on the chain-dep state).
- 'Storage.LedgerDB.V2' threads 'LeiosDbConnection' alongside the
existing args so the new 'applyBlock' signature reaches the V2
pipeline.
- Explicit no-op instances for every block type that doesn't carry
Leios: 'ByronBlock', 'DualBlock', 'ShelleyBlock proto era',
'HardForkBlock xs' (OVERLAPPABLE), 'TestBlockWith ptype', the
storage-test 'TestBlock', the mock 'SimpleBlock''.
- Real-work instance: 'ShelleyBlock (Praos c) DijkstraEra' splices the
EB closure from the previously-announced point (looked up via
'praosStateLeiosAnnouncement' + 'praosStateLastSlot' on the Praos
chain-dep state).
- 'Ouroboros.Consensus.Cardano.Block' routes per-era dispatch to the
appropriate instance.
Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios mempool access + forging
Foundations for the Leios prototype's production side, plus the
Dijkstra-era forging path that produces EBs / cert blocks.
Foundations
- LeiosDemo{Types,Logic,Exception} — placeholder types (EbAnnouncement,
LeiosPoint, TxHash, LeiosVote), EB-forging logic, exception type.
- LeiosDemoDb / LeiosDemoDb.{Common,InMemory,SQLite} — pluggable
storage for forged EBs + cert lookup.
- ouroboros-consensus.cabal exposes the foundation modules; the
consensus-test suite gains Test.LeiosDemoDb and Test.LeiosDemoTypes;
new leios-db-bench benchmark.
- cabal.project pins cardano-ledger at leios-prototype-remake-on-chap
for 'Maybe LeiosCert' on the Dijkstra block body.
Mempool access (cumulative tx bytes)
- 'shelleyCumulativeTxBytes :: Word64' on ShelleyLedgerState +
TickedShelleyLedgerState, threaded through CBOR + the tick step.
- HFC mempool threads it per-era so the kernel can read the running
total of bytes that have entered the ledger.
Forging — Praos header EB announcement
- 'hbLeiosEbAnnouncement :: !(StrictMaybe EbAnnouncement)' on the
Praos block header (chunked CBOR-after the existing field set).
- 'PraosState.praosStateLeiosAnnouncement' / 'praosStateLastSlot'
on the Praos chain-dep state, written non-stickily on each tick.
- 'ProtocolHeaderSupportsKES.protocolStateLeiosInfo' projects the
pair out; TPraos returns Nothing. No certify flag — the
certificate, when forged, lives on the block body (see ledger PR).
Forging — Dijkstra-era 'decideLeios'
- 'ForgeBlockArgs' extended with fbEbTxs / fbLeiosDb /
fbCurrentTickedLedgerState / fbChainDepState / fbLeiosTracer so
the forger has read access to the EB-candidate tx pool, the
LeiosDb (to look up certificates and store newly-forged EBs),
the ticked ledger state and the chain-dep state.
- Dijkstra-only forging path: 'decideLeios' returns either a
Leios certificate (when a previously-announced EB has gap >
'minCertificationGap' and is locally available with a cert)
or a new EB announcement (forged from fbEbTxs).
- Cert-block forging emits an empty tx sequence on the wire; the
full transaction list is re-attached at apply time by
resolveLeiosBlock (see resolving chunk).
- ForgeBlockArgs adaptation propagates through Byron, ByronDual,
Mock and Shelley forging.
Plumbing
- ChainDB.Impl{,.Args} + LedgerDB{,.Args} grow a LeiosDbConnection
so downstream chunks (diffusion, resolving) can reach it via
ChainDbArgs / LedgerDbArgs.
Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios voting: LeiosVoteState + leiosVoting thread + threadnet test
Add the voting capability on top of the diffusion layer: an EB becomes eligible for certification once enough peers have voted 'yes' on it (via the 'MsgLeiosVotes' message on the LeiosNotify protocol from the previous chunk). Voting state - 'LeiosVoteState' (new module) — aggregated vote state across all peers, with 'addVote' / 'subscribeVotes' write/read API. - 'NodeKernel.getLeiosVoteState' field plus the 'NodeKernelArgs.leiosVotingKey' / 'NodeKernel.leiosVoting' background thread that subscribes to local 'AcquiredEbTxs' notifications and emits one vote per acquired EB. LeiosNotify wiring - The 'MsgLeiosVotes' server case now calls 'addVote' on each incoming vote (replacing the chunk-2 no-op stub). - The notify server multiplexes EB offers with a 'processVote' loop that drains 'subscribeVotes leiosVoteState' and publishes 'MsgLeiosVotes' to peers. Tests - 'Test.LeiosVoteState' (foundation-level unit tests). - 'Test.ThreadNet.Leios' — end-to-end threadnet driver that asserts cert blocks happen, no vacuous runs, gap > 'minCertificationGap', all nodes converge, and the post-resolve replay matches the live ledger. cabal - Exposes 'LeiosVoteState'; wires 'Test.LeiosVoteState' / 'Test.ThreadNet.Leios' into the test suites. Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios demo: ImmDBServer schedule-driven Leios + schedule generator
Adapt the ImmDBServer tool to drive a Leios demo from a pre-recorded schedule: replay EBs / cert-blocks at slot timestamps and serve them over the LeiosNotify / LeiosFetch mini-protocols introduced in the diffusion chunk. The actual schedule generator lives at 'ouroboros-consensus/app/leios-schedule-gen.hs' (committed with the diffusion chunk for cabal layout reasons). - 'immdb-server' grows --leios-db / --leios-schedule / --initial-slot / --initial-time / --address. - 'Cardano.Tools.ImmDBServer.Diffusion' adds the LeiosSchedule type and a scheduler thread that ticks through schedule entries. - 'Cardano.Tools.ImmDBServer.MiniProtocols' grows LeiosNotify / LeiosFetch responders, send/recv tracers, and a slot-delay aware chainSyncServer. Co-Authored-By: Claude Opus 4.7 <[email protected]>
WIP implementing VoteForging wrapper
Split degenerate BlockSupportsPeras instance
Introduce O.C.Peras.(Vote|Cert).Mock
Consolidate Peras vote and certificate projection type classes
Leios demo: ImmDBServer schedule-driven Leios + schedule generator
Adapt the ImmDBServer tool to drive a Leios demo from a pre-recorded schedule: replay EBs / cert-blocks at slot timestamps and serve them over the LeiosNotify / LeiosFetch mini-protocols introduced in the diffusion chunk. The actual schedule generator lives at 'ouroboros-consensus/app/leios-schedule-gen.hs' (committed with the diffusion chunk for cabal layout reasons). - 'immdb-server' grows --leios-db / --leios-schedule / --initial-slot / --initial-time / --address. - 'Cardano.Tools.ImmDBServer.Diffusion' adds the LeiosSchedule type and a scheduler thread that ticks through schedule entries. - 'Cardano.Tools.ImmDBServer.MiniProtocols' grows LeiosNotify / LeiosFetch responders, send/recv tracers, and a slot-delay aware chainSyncServer. Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios voting: LeiosVoteState + leiosVoting thread + threadnet test
Add the voting capability on top of the diffusion layer: an EB becomes eligible for certification once enough peers have voted 'yes' on it (via the 'MsgLeiosVotes' message on the LeiosNotify protocol from the previous chunk). Voting state - 'LeiosVoteState' (new module) — aggregated vote state across all peers, with 'addVote' / 'subscribeVotes' write/read API. - 'NodeKernel.getLeiosVoteState' field plus the 'NodeKernelArgs.leiosVotingKey' / 'NodeKernel.leiosVoting' background thread that subscribes to local 'AcquiredEbTxs' notifications and emits one vote per acquired EB. LeiosNotify wiring - The 'MsgLeiosVotes' server case now calls 'addVote' on each incoming vote (replacing the chunk-2 no-op stub). - The notify server multiplexes EB offers with a 'processVote' loop that drains 'subscribeVotes leiosVoteState' and publishes 'MsgLeiosVotes' to peers. Tests - 'Test.LeiosVoteState' (foundation-level unit tests). - 'Test.ThreadNet.Leios' — end-to-end threadnet driver that asserts cert blocks happen, no vacuous runs, gap > 'minCertificationGap', all nodes converge, and the post-resolve replay matches the live ledger. cabal - Exposes 'LeiosVoteState'; wires 'Test.LeiosVoteState' / 'Test.ThreadNet.Leios' into the test suites. Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios mempool access + forging
Foundations for the Leios prototype's production side, plus the
Dijkstra-era forging path that produces EBs / cert blocks.
Foundations
- LeiosDemo{Types,Logic,Exception} — placeholder types (EbAnnouncement,
LeiosPoint, TxHash, LeiosVote), EB-forging logic, exception type.
- LeiosDemoDb / LeiosDemoDb.{Common,InMemory,SQLite} — pluggable
storage for forged EBs + cert lookup.
- ouroboros-consensus.cabal exposes the foundation modules; the
consensus-test suite gains Test.LeiosDemoDb and Test.LeiosDemoTypes;
new leios-db-bench benchmark.
- cabal.project pins cardano-ledger at leios-prototype-remake-on-chap
for 'Maybe LeiosCert' on the Dijkstra block body.
Mempool access (cumulative tx bytes)
- 'shelleyCumulativeTxBytes :: Word64' on ShelleyLedgerState +
TickedShelleyLedgerState, threaded through CBOR + the tick step.
- HFC mempool threads it per-era so the kernel can read the running
total of bytes that have entered the ledger.
Forging — Praos header EB announcement
- 'hbLeiosEbAnnouncement :: !(StrictMaybe EbAnnouncement)' on the
Praos block header (chunked CBOR-after the existing field set).
- 'PraosState.praosStateLeiosAnnouncement' / 'praosStateLastSlot'
on the Praos chain-dep state, written non-stickily on each tick.
- 'ProtocolHeaderSupportsKES.protocolStateLeiosInfo' projects the
pair out; TPraos returns Nothing. No certify flag — the
certificate, when forged, lives on the block body (see ledger PR).
Forging — Dijkstra-era 'decideLeios'
- 'ForgeBlockArgs' extended with fbEbTxs / fbLeiosDb /
fbCurrentTickedLedgerState / fbChainDepState / fbLeiosTracer so
the forger has read access to the EB-candidate tx pool, the
LeiosDb (to look up certificates and store newly-forged EBs),
the ticked ledger state and the chain-dep state.
- Dijkstra-only forging path: 'decideLeios' returns either a
Leios certificate (when a previously-announced EB has gap >
'minCertificationGap' and is locally available with a cert)
or a new EB announcement (forged from fbEbTxs).
- Cert-block forging emits an empty tx sequence on the wire; the
full transaction list is re-attached at apply time by
resolveLeiosBlock (see resolving chunk).
- ForgeBlockArgs adaptation propagates through Byron, ByronDual,
Mock and Shelley forging.
Plumbing
- ChainDB.Impl{,.Args} + LedgerDB{,.Args} grow a LeiosDbConnection
so downstream chunks (diffusion, resolving) can reach it via
ChainDbArgs / LedgerDbArgs.
Co-Authored-By: Claude Opus 4.7 <[email protected]>
Leios diffusion: LeiosNotify + LeiosFetch mini-protocols + Reception
Wire LeiosNotify and LeiosFetch mini-protocols into the node-to-node
diffusion layer, plus the consensus-side adaptation to the network
fork's BearerBytes + arrival-time 'Reception' API.
Mini-protocols (live in consensus, not network)
- LeiosDemoOnlyTestFetch — request/response for EB bodies and the
accompanying tx closures.
- LeiosDemoOnlyTestNotify — server pushes 'MsgLeiosBlockOffer' /
'MsgLeiosBlockTxsOffer' as EBs arrive, plus 'MsgLeiosVotes' which
this chunk handles as a no-op stub (the voting chunk replaces it).
- New 'NodeKernel' fields: 'getLeiosDB', 'getLeiosPeersVars',
'getLeiosOutstanding', 'getLeiosReady'. The 'leiosFetchLogic'
thread (0.5s loop) reads peers' offerings, runs the fetch-decision
iteration and dispatches fetches.
Network wiring
- 'Ouroboros.Consensus.Network.NodeToNode' grows codecs + handlers
for both protocols and threads the LeiosDbConnection through to the
inbound side.
- 'Ouroboros.Consensus.Node' opens the in-memory LeiosDb and passes
the handle + connection to the kernel / NTN / ChainDB layers.
BearerBytes + Reception migration
- All codec entry points drop the 'dataSize :: bytes -> Word'
argument (now a 'BearerBytes' constraint).
- 'recv' returns 'Maybe (Reception a)' carrying per-chunk arrival
times; the threadnet harness wraps reads via 'MkReception
IntMap.empty', the PeerSimulator strips via 'fmap received'.
- 'TraceSendRecv' grows arrival-time on the receive side
('TraceRecvMsg :: Maybe Time -> AnyMessage ps -> ...').
Threadnet harness
- 'MinimalChainDbArgs.mcdbLeiosDbVar' backs the in-memory LeiosDb
with a TVar so the test infrastructure can inspect it.
cabal
- Exposes 'LeiosDemoOnlyTestFetch' / 'LeiosDemoOnlyTestNotify' and
adds network-mux, pretty-simple, typed-protocols:cborg deps.
Co-Authored-By: Claude Opus 4.7 <[email protected]>