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 (23)
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 (14)
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 (10)
Jun 18, 7-8 AM (20)
Jun 18, 8-9 AM (83)
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 (14)
Jun 18, 2-3 PM (53)
Jun 18, 3-4 PM (44)
Jun 18, 4-5 PM (64)
Jun 18, 5-6 PM (24)
Jun 18, 6-7 PM (21)
Jun 18, 7-8 PM (13)
Jun 18, 8-9 PM (17)
Jun 18, 9-10 PM (23)
Jun 18, 10-11 PM (30)
Jun 18, 11-12 AM (26)
Jun 19, 12-1 AM (13)
Jun 19, 1-2 AM (9)
Jun 19, 2-3 AM (5)
Jun 19, 3-4 AM (2)
Jun 19, 4-5 AM (11)
Jun 19, 5-6 AM (4)
Jun 19, 6-7 AM (92)
Jun 19, 7-8 AM (18)
Jun 19, 8-9 AM (38)
Jun 19, 9-10 AM (39)
Jun 19, 10-11 AM (27)
Jun 19, 11-12 PM (30)
Jun 19, 12-1 PM (53)
Jun 19, 1-2 PM (66)
Jun 19, 2-3 PM (32)
Jun 19, 3-4 PM (61)
Jun 19, 4-5 PM (9)
Jun 19, 5-6 PM (4)
Jun 19, 6-7 PM (17)
Jun 19, 7-8 PM (16)
Jun 19, 8-9 PM (11)
Jun 19, 9-10 PM (45)
Jun 19, 10-11 PM (30)
Jun 19, 11-12 AM (8)
Jun 20, 12-1 AM (4)
Jun 20, 1-2 AM (0)
Jun 20, 2-3 AM (4)
Jun 20, 3-4 AM (1)
Jun 20, 4-5 AM (8)
Jun 20, 5-6 AM (6)
Jun 20, 6-7 AM (6)
Jun 20, 7-8 AM (6)
Jun 20, 8-9 AM (2)
Jun 20, 9-10 AM (2)
Jun 20, 10-11 AM (0)
Jun 20, 11-12 PM (2)
Jun 20, 12-1 PM (7)
Jun 20, 1-2 PM (1)
Jun 20, 2-3 PM (9)
Jun 20, 3-4 PM (11)
Jun 20, 4-5 PM (1)
Jun 20, 5-6 PM (0)
Jun 20, 6-7 PM (2)
Jun 20, 7-8 PM (8)
Jun 20, 8-9 PM (7)
Jun 20, 9-10 PM (0)
Jun 20, 10-11 PM (17)
Jun 20, 11-12 AM (5)
Jun 21, 12-1 AM (14)
Jun 21, 1-2 AM (0)
Jun 21, 2-3 AM (1)
Jun 21, 3-4 AM (0)
Jun 21, 4-5 AM (1)
Jun 21, 5-6 AM (0)
Jun 21, 6-7 AM (9)
Jun 21, 7-8 AM (1)
Jun 21, 8-9 AM (2)
Jun 21, 9-10 AM (2)
Jun 21, 10-11 AM (1)
Jun 21, 11-12 PM (2)
Jun 21, 12-1 PM (0)
Jun 21, 1-2 PM (17)
Jun 21, 2-3 PM (4)
Jun 21, 3-4 PM (10)
Jun 21, 4-5 PM (4)
Jun 21, 5-6 PM (8)
Jun 21, 6-7 PM (7)
Jun 21, 7-8 PM (19)
Jun 21, 8-9 PM (0)
Jun 21, 9-10 PM (1)
Jun 21, 10-11 PM (15)
Jun 21, 11-12 AM (15)
Jun 22, 12-1 AM (12)
Jun 22, 1-2 AM (6)
Jun 22, 2-3 AM (9)
Jun 22, 3-4 AM (4)
Jun 22, 4-5 AM (2)
Jun 22, 5-6 AM (29)
Jun 22, 6-7 AM (17)
Jun 22, 7-8 AM (49)
Jun 22, 8-9 AM (90)
Jun 22, 9-10 AM (53)
Jun 22, 10-11 AM (64)
Jun 22, 11-12 PM (74)
Jun 22, 12-1 PM (47)
Jun 22, 1-2 PM (55)
Jun 22, 2-3 PM (119)
Jun 22, 3-4 PM (46)
Jun 22, 4-5 PM (45)
Jun 22, 5-6 PM (29)
Jun 22, 6-7 PM (33)
Jun 22, 7-8 PM (13)
Jun 22, 8-9 PM (13)
Jun 22, 9-10 PM (11)
Jun 22, 10-11 PM (32)
Jun 22, 11-12 AM (36)
Jun 23, 12-1 AM (18)
Jun 23, 1-2 AM (18)
Jun 23, 2-3 AM (23)
Jun 23, 3-4 AM (11)
Jun 23, 4-5 AM (13)
Jun 23, 5-6 AM (29)
Jun 23, 6-7 AM (19)
Jun 23, 7-8 AM (5)
3,579 commits this week Jun 16, 2026 - Jun 23, 2026
Frame oracle push/pull as a trust model, not just cadence
The overview described push and pull only as update timing. Add a subsection on who publishes and what a pull oracle's signature does and does not guarantee (integrity yes, liveness and freshness no), tying it to the existing freshness warning and multi-oracle reconciliation. Mirror the integrity-vs-liveness note on the Pyth page.
Stop benchmark working state from leaking into published docs
The matrix bench ran each cluster directly in cellDir, which lives under
  the published benchmarks/ output. Node working state (etcd WAL segments,
  cardano-node db, logs) was therefore published, and since the docs deploy
  uses clean:false it accumulated on gh-pages until the branch exceeded the
  GitHub Pages 10GB limit, breaking every deployment.

  Run each matrix cell in a throwaway temp dir so only dataset.json and the
  aggregated scenarios.md reach the output. Also strip any etcd/db/logs dirs
  in the publish workflow as a safety net before deploying.
Parse networks.json at compile time via TH splice
  loadKnownVersions previously used `error` to handle a malformed
  networks.json at runtime. Since the file is embedded at compile time,
  a parse failure is a programming error that should fail the build, not
  crash a running node.

  The splice reads and parses the file during compilation; a bad JSON
  structure or invalid script hash is now a `fail` in the Q monad,
  surfacing as a GHC error. At runtime the list is a fully-evaluated
  literal with no partial functions on the hot path.

  The parsing and TH expression builder helpers live in
  VersionRegistry.Internal so the splice in VersionRegistry can import
  them as a pre-compiled module, satisfying GHC's staging restriction.

Signed-off-by: Sasha Bogicevic <[email protected]>
Render cardano-config-resolve output as YAML
Add Cardano.Configuration.Render.nodeConfigurationToJSON, which renders a
resolved NodeConfiguration as a JSON Value using the documented configuration
keys (reusing each component's Maybe-form ToJSON via Identity -> Maybe lifts),
with the CLI-only operational arguments grouped under a Runtime key. The
executable now emits this as YAML instead of the Haskell-record Show output,
which used field/constructor names unfamiliar to non-Haskell users.

Drops the pretty-show dependency in favour of yaml (already a library dep).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Add cardano-config-resolve executable
A small tool that loads a configuration (per-component defaults, the file and
its optional Custom override, and the CLI flags), resolves it exactly as the
node does, and prints the complete resolved NodeConfiguration. It accepts the
same flags as the node, with --config selecting the file.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Re-export nested configuration types at the top level
Types reachable from a resolved NodeConfiguration (and the file form) were
defined and exported by their component modules but not re-exported from
Cardano.Configuration, so consumers could not pattern-match on them:
ConsensusMode, SnapshotPolicy, SnapshotOptions, LedgerDbBackendSelector,
AcceptedConnectionsLimit and TracingConfiguration.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Add top-level Custom configuration override layer
The Custom key takes a whole-configuration object — inline or a path to a
JSON/YAML file — and deep-merges it on top of every other file layer, so a
user can keep a shared base configuration and override just a few specific
options. CLI arguments still take precedence.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
LEDGER-pov: refresh status notes for the completed proof; drop unused helper
The proof is complete, so the three historical "deferred/WIP/does-not-typecheck"
status notes are replaced by one accurate note describing the module parameters
(discharged downstream) and the four-summand accounting.  Also refreshes the
GOVS-coinFromGovDeposit and Gâ‚€/G' comments, the arithmetic-helpers prose, and
removes the now-unused abcd-to-adcb shuffle.  No proof changes (still --safe, EXIT 0).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
Claude-Session: https://claude.ai/code/session_01We2YdXX2ozJAdAbCrRwi6r