Jun 11, 4-5 PM (5)
Jun 11, 5-6 PM (7)
Jun 11, 6-7 PM (26)
Jun 11, 7-8 PM (90)
Jun 11, 8-9 PM (11)
Jun 11, 9-10 PM (5)
Jun 11, 10-11 PM (25)
Jun 11, 11-12 AM (5)
Jun 12, 12-1 AM (8)
Jun 12, 1-2 AM (2)
Jun 12, 2-3 AM (2)
Jun 12, 3-4 AM (4)
Jun 12, 4-5 AM (7)
Jun 12, 5-6 AM (15)
Jun 12, 6-7 AM (46)
Jun 12, 7-8 AM (19)
Jun 12, 8-9 AM (42)
Jun 12, 9-10 AM (23)
Jun 12, 10-11 AM (30)
Jun 12, 11-12 PM (42)
Jun 12, 12-1 PM (24)
Jun 12, 1-2 PM (26)
Jun 12, 2-3 PM (22)
Jun 12, 3-4 PM (38)
Jun 12, 4-5 PM (23)
Jun 12, 5-6 PM (19)
Jun 12, 6-7 PM (26)
Jun 12, 7-8 PM (12)
Jun 12, 8-9 PM (17)
Jun 12, 9-10 PM (5)
Jun 12, 10-11 PM (30)
Jun 12, 11-12 AM (6)
Jun 13, 12-1 AM (6)
Jun 13, 1-2 AM (2)
Jun 13, 2-3 AM (0)
Jun 13, 3-4 AM (3)
Jun 13, 4-5 AM (0)
Jun 13, 5-6 AM (3)
Jun 13, 6-7 AM (7)
Jun 13, 7-8 AM (5)
Jun 13, 8-9 AM (6)
Jun 13, 9-10 AM (14)
Jun 13, 10-11 AM (12)
Jun 13, 11-12 PM (2)
Jun 13, 12-1 PM (23)
Jun 13, 1-2 PM (21)
Jun 13, 2-3 PM (8)
Jun 13, 3-4 PM (1)
Jun 13, 4-5 PM (4)
Jun 13, 5-6 PM (4)
Jun 13, 6-7 PM (3)
Jun 13, 7-8 PM (3)
Jun 13, 8-9 PM (7)
Jun 13, 9-10 PM (16)
Jun 13, 10-11 PM (19)
Jun 13, 11-12 AM (24)
Jun 14, 12-1 AM (18)
Jun 14, 1-2 AM (0)
Jun 14, 2-3 AM (0)
Jun 14, 3-4 AM (0)
Jun 14, 4-5 AM (2)
Jun 14, 5-6 AM (0)
Jun 14, 6-7 AM (2)
Jun 14, 7-8 AM (3)
Jun 14, 8-9 AM (0)
Jun 14, 9-10 AM (1)
Jun 14, 10-11 AM (2)
Jun 14, 11-12 PM (10)
Jun 14, 12-1 PM (8)
Jun 14, 1-2 PM (4)
Jun 14, 2-3 PM (8)
Jun 14, 3-4 PM (2)
Jun 14, 4-5 PM (1)
Jun 14, 5-6 PM (1)
Jun 14, 6-7 PM (0)
Jun 14, 7-8 PM (11)
Jun 14, 8-9 PM (1)
Jun 14, 9-10 PM (13)
Jun 14, 10-11 PM (29)
Jun 14, 11-12 AM (23)
Jun 15, 12-1 AM (8)
Jun 15, 1-2 AM (10)
Jun 15, 2-3 AM (4)
Jun 15, 3-4 AM (4)
Jun 15, 4-5 AM (1)
Jun 15, 5-6 AM (4)
Jun 15, 6-7 AM (6)
Jun 15, 7-8 AM (41)
Jun 15, 8-9 AM (26)
Jun 15, 9-10 AM (11)
Jun 15, 10-11 AM (35)
Jun 15, 11-12 PM (25)
Jun 15, 12-1 PM (40)
Jun 15, 1-2 PM (26)
Jun 15, 2-3 PM (21)
Jun 15, 3-4 PM (24)
Jun 15, 4-5 PM (21)
Jun 15, 5-6 PM (13)
Jun 15, 6-7 PM (13)
Jun 15, 7-8 PM (7)
Jun 15, 8-9 PM (26)
Jun 15, 9-10 PM (20)
Jun 15, 10-11 PM (22)
Jun 15, 11-12 AM (39)
Jun 16, 12-1 AM (11)
Jun 16, 1-2 AM (5)
Jun 16, 2-3 AM (1)
Jun 16, 3-4 AM (9)
Jun 16, 4-5 AM (6)
Jun 16, 5-6 AM (1)
Jun 16, 6-7 AM (16)
Jun 16, 7-8 AM (81)
Jun 16, 8-9 AM (18)
Jun 16, 9-10 AM (28)
Jun 16, 10-11 AM (22)
Jun 16, 11-12 PM (31)
Jun 16, 12-1 PM (37)
Jun 16, 1-2 PM (49)
Jun 16, 2-3 PM (34)
Jun 16, 3-4 PM (28)
Jun 16, 4-5 PM (37)
Jun 16, 5-6 PM (17)
Jun 16, 6-7 PM (26)
Jun 16, 7-8 PM (9)
Jun 16, 8-9 PM (11)
Jun 16, 9-10 PM (4)
Jun 16, 10-11 PM (31)
Jun 16, 11-12 AM (9)
Jun 17, 12-1 AM (8)
Jun 17, 1-2 AM (8)
Jun 17, 2-3 AM (11)
Jun 17, 3-4 AM (4)
Jun 17, 4-5 AM (1)
Jun 17, 5-6 AM (6)
Jun 17, 6-7 AM (99)
Jun 17, 7-8 AM (33)
Jun 17, 8-9 AM (22)
Jun 17, 9-10 AM (56)
Jun 17, 10-11 AM (18)
Jun 17, 11-12 PM (19)
Jun 17, 12-1 PM (57)
Jun 17, 1-2 PM (28)
Jun 17, 2-3 PM (37)
Jun 17, 3-4 PM (26)
Jun 17, 4-5 PM (19)
Jun 17, 5-6 PM (16)
Jun 17, 6-7 PM (10)
Jun 17, 7-8 PM (13)
Jun 17, 8-9 PM (12)
Jun 17, 9-10 PM (37)
Jun 17, 10-11 PM (29)
Jun 17, 11-12 AM (14)
Jun 18, 12-1 AM (12)
Jun 18, 1-2 AM (8)
Jun 18, 2-3 AM (5)
Jun 18, 3-4 AM (11)
Jun 18, 4-5 AM (11)
Jun 18, 5-6 AM (11)
Jun 18, 6-7 AM (9)
Jun 18, 7-8 AM (17)
Jun 18, 8-9 AM (82)
Jun 18, 9-10 AM (45)
Jun 18, 10-11 AM (51)
Jun 18, 11-12 PM (23)
Jun 18, 12-1 PM (67)
Jun 18, 1-2 PM (12)
Jun 18, 2-3 PM (51)
Jun 18, 3-4 PM (44)
Jun 18, 4-5 PM (51)
3,052 commits this week Jun 11, 2026 - Jun 18, 2026
[UTxO-HD] Port ouroboros-consensus:cardano HFC to the mk-free API
Make the Cardano HFC mk-free: Block.hs (CardanoLedgerState + era pattern
synonyms), CanHardFork (EraTranslation diff/values restructure), QueryHF (NS
projection with an era-typed filter), and protocolInfoCardano genesis, which
now produces the per-era genesis Values via the Nary embedding. The canonical
/serialise machinery is stripped from Cardano.Ledger.

There is deliberately no TxIn/TxOut instance for (HardForkBlock xs): tables
are per-era only. With this, lib:ouroboros-consensus:cardano is green.

TODO @js: CardanoTxOut and its IndexedMemPack codecs are retained only
for the deferred snapshot-converter tool.
[UTxO-HD] Port ouroboros-consensus:cardano Shelley era; add LedgerCallShim
Port the Shelley era (Ledger, Forge, Inspect, Mempool, Query,
PeerSelection, SupportsProtocol, Serialisation, TPraos, ShelleyHFC) to the
mk-free API.

Add Ouroboros.Consensus.Shelley.Ledger.LedgerCallShim, which encapsulates the
empty-UTxO NewEpochState invariant: every stored NES carries no UTxO, and the
block/tick/tx apply wrappers take the UTxO values and the NES separately
(NewEpochStateNoUTxOs). The UTxO-touching cardano-ledger entry points are
fenced behind the shim via .hlint.yaml so they cannot be called directly;
applyTx is the single era-dispatched exception routed through the shim.
[UTxO-HD] Node + MiniProtocol consumers; ProtocolInfo genesis Values
Finish the mk-free sweep for lib:ouroboros-consensus: the Node entry
points (ProtocolInfo, Run) and the MiniProtocol consumers (ChainSync client
+ InFutureCheck, LocalStateQuery server).

Genesis Values now flow through ProtocolInfo: pInfoInitLedgerTables carries
them and injectInitialExtLedgerState returns (state, values). With this,
lib:ouroboros-consensus is fully green.
[UTxO-HD][HFC] HardForkBlock combinator mk-free
Make the HardFork combinator mk-free: the mk-free state functor and
era-translation types, mk-free extendToSlot, and the SingleEraUTxOHDBlock
split. forward is made config-free (IO pipelining deferred). Implement the
HardForkBlock BlockSupportsUTxOHD bodies plus tick/apply, and the NS type
surface in Ledger.hs, deleting the old canonical machinery.

Flip sweep across the combinator: Query, CommonProtocolParams, PeerSelection,
InitStorage, Forging, Mempool, Embed/{Unary,Nary,Binary}, Degenerate and
Serialisation. Embed/Nary returns the per-era genesis values.
[UTxO-HD] Storage: mk-free LedgerDB V2 + EraRangeReader
Make the LedgerTablesHandle contract mk-free and fold the InMemory
backend's value ops into BlockSupportsUTxOHD. Drop mk from Storage's
upstream dependencies and make the LedgerDB V2 (StateRef, LedgerSeq,
Forker, snapshots, InMemory backend) mk-free throughout.

Thread LedgerConfig through duplicateWithDiffs/forkerPush and route range
reads through a dedicated EraRangeReader, surfacing an EraRangeReaderProvider
from the V2 LedgerDB. ChainDB consumers are made mk-free, dropping the
vestigial NoThunks/Bridge and CanUpgradeLedgerTables constraints.
[UTxO-HD] Abstract table surface + mk-free ledger
Introduce the mk-free abstract table surface (BlockSupportsUTxOHD): the
ledger no longer carries a MapKind type parameter. LedgerState becomes a
plain Type, ApplyBlock is pure, and the dual ledger is made mk-free.

Consolidate the table vocabulary into Ledger.Basics, dropping StateKind and
the now-redundant Ledger/Tables.hs subtree (Tables/{Basics,Combinators,Kinds,
MapKind,Utils}). Haddocks describe the current mk-free API; dead readAll and
stale mk-era references are removed.

This is one atomic semantic change: the lib does not build until the whole
mk-free sweep lands.
unstable-cardano-tools: use the native cardano-api subset, drop vendored copies
Point the db-tools at the new Ouroboros.Consensus.Cardano.Api.* modules and
remove the vendored cardano-api/cardano-node copies:

  * mkConsensusProtocolCardano now imports the genesis readers, credential
    loaders, genesisHashToPraosNonce and error types from
    Ouroboros.Consensus.Cardano.Api.Genesis, and Error/displayError from
    Ouroboros.Consensus.Cardano.Api.Serialise.
  * Cardano.Node.Types keeps only the per-era protocol configuration
    records (the inputs to mkConsensusProtocolCardano) and re-exports
    GenesisFile/GenesisHash/ProtocolFilepaths from the sublib.
  * DBSynthesizer.Run gets displayError from the sublib.

Delete the now-unused vendored Cardano.Api.* and
Cardano.Node.Protocol.{Byron,Shelley,Alonzo,Conway} modules, and drop the
build-depends (base16-bytestring, cardano-crypto) that only they used.
cardano: add minimal native cardano-api/node subset
Add a minimal, Consensus-native implementation of the cardano-api and
cardano-node functionality that the db-tools need (reading genesis files,
loading forging credentials, assembling a Cardano protocol), so that the
unstable-cardano-tools sublib no longer has to vendor copies of those
modules.

This lives in a small namespace in the cardano sublib:

  * Ouroboros.Consensus.Cardano.Api.Serialise -- HasTypeProxy/AsType, raw
    bytes and CBOR (de)serialisation, Error/FileError, the TextEnvelope
    file reader and the deriving-via helpers.
  * Ouroboros.Consensus.Cardano.Api.Keys -- the Key interface and the four
    key roles actually used (StakePoolKey, VrfKey, UnsoundPureKesKey,
    ByronKey), plus OperationalCertificate.
  * Ouroboros.Consensus.Cardano.Api.Genesis -- GenesisFile/GenesisHash,
    ProtocolFilepaths, the polymorphic genesis reader shared by the
    Shelley-based eras, the Byron genesis reader, the Byron and Praos
    leader-credential loaders and genesisHashToPraosNonce.

Only the surface transitively reachable from what the tools call is kept:
bech32, the unused key roles, key generation, cast-role classes, the
operational-certificate issue counter and the dead genesis validation are
all omitted.
cardano-config: derive JSON Schemas from the codecs
Add Cardano.Configuration.Schema, exposing a JSON Schema (as an aeson Value) for each configuration component, generated from the autodocodec codecs via jsonSchemaViaCodec. Because they share the codec with the parsers, the schemas cannot drift: they record required vs optional keys, descriptions, and the parse-time defaults. Tracing is excluded, as it is resolved by hermod whose schema lives in trace-dispatcher.
cardano-config: port Consensus, Network, Protocol and Testing to autodocodec
Express each component as a HasCodec instance and derive FromJSON/ToJSON via Autodocodec, replacing the hand-written parsers. Consensus reads the Genesis flags from LowLevelGenesisOptions in GenesisMode; Network covers all peer/diffusion/tx-submission/RPC fields; Protocol builds the per-era genesis NP and Byron/checkpoints from object-codec fragments, reusing the aeson instances for hashes and RequiresNetworkMagic. Drop the now-unused .:= / RelativeFile helpers from Basics and add a shared DiffTime codec.
cardano-config: port Storage to autodocodec with the predictable-snapshots model
Port the storage/LedgerDB configuration to autodocodec codecs, and adopt the snapshot model the node is converging on (f-f/prepare-11.1 combined with geo2a/predictable-snapshots): LMDB is gone (backend is V2InMemory or V2LSM), and the snapshot policy lives under a Snapshots key that is either a named preset ("Mithril") or an object of options (SnapshotInterval in slots, SlotOffset, RateLimit, MinDelay/MaxDelay with MinDelay <= MaxDelay, NumOfDiskSnapshots). Only the modern keys are accepted; the deprecated top-level and in-LedgerDB snapshot keys are not.
cardano-config: begin autodocodec port (Basics, Common, Mempool)
Introduce autodocodec as the single source of truth for parsing and (eventually) JSON Schema generation. Port the leaf types first: a shared DiffTime codec and File/NodeDatabasePaths/Mempool codecs, deriving FromJSON/ToJSON via Autodocodec. The mempool capacity override keeps its byte-count-or-NoOverride form via optionalFieldWithDefaultWith.
cardano-config: parse the node's remaining configuration fields
Add the fields the node parses that were missing: ExperimentalProtocolsEnabled, the tx-submission knobs (TxSubmissionLogicVersion, TxSubmissionInitDelay) and the hard-fork testing matrix (Test*HardForkAtEpoch/Version for every era), plus a new Mempool section (MempoolCapacityBytesOverride and the soft/hard/capacity timeouts) and gRPC settings (EnableRpc, RpcSocketPath) on the local connections. Following the node, only the current keys are accepted: the deprecated ForkPolicy alias for ResponderCoreAffinityPolicy is dropped, and no other deprecated aliases are added.