Jun 05, 8-9 PM (6)
Jun 05, 9-10 PM (2)
Jun 05, 10-11 PM (20)
Jun 05, 11-12 AM (9)
Jun 06, 12-1 AM (6)
Jun 06, 1-2 AM (0)
Jun 06, 2-3 AM (3)
Jun 06, 3-4 AM (4)
Jun 06, 4-5 AM (0)
Jun 06, 5-6 AM (24)
Jun 06, 6-7 AM (1)
Jun 06, 7-8 AM (2)
Jun 06, 8-9 AM (3)
Jun 06, 9-10 AM (0)
Jun 06, 10-11 AM (3)
Jun 06, 11-12 PM (6)
Jun 06, 12-1 PM (2)
Jun 06, 1-2 PM (2)
Jun 06, 2-3 PM (2)
Jun 06, 3-4 PM (18)
Jun 06, 4-5 PM (1)
Jun 06, 5-6 PM (6)
Jun 06, 6-7 PM (0)
Jun 06, 7-8 PM (6)
Jun 06, 8-9 PM (0)
Jun 06, 9-10 PM (1)
Jun 06, 10-11 PM (27)
Jun 06, 11-12 AM (9)
Jun 07, 12-1 AM (14)
Jun 07, 1-2 AM (2)
Jun 07, 2-3 AM (0)
Jun 07, 3-4 AM (0)
Jun 07, 4-5 AM (1)
Jun 07, 5-6 AM (1)
Jun 07, 6-7 AM (3)
Jun 07, 7-8 AM (0)
Jun 07, 8-9 AM (0)
Jun 07, 9-10 AM (1)
Jun 07, 10-11 AM (2)
Jun 07, 11-12 PM (2)
Jun 07, 12-1 PM (5)
Jun 07, 1-2 PM (35)
Jun 07, 2-3 PM (2)
Jun 07, 3-4 PM (4)
Jun 07, 4-5 PM (2)
Jun 07, 5-6 PM (4)
Jun 07, 6-7 PM (0)
Jun 07, 7-8 PM (0)
Jun 07, 8-9 PM (17)
Jun 07, 9-10 PM (1)
Jun 07, 10-11 PM (21)
Jun 07, 11-12 AM (9)
Jun 08, 12-1 AM (9)
Jun 08, 1-2 AM (5)
Jun 08, 2-3 AM (3)
Jun 08, 3-4 AM (4)
Jun 08, 4-5 AM (2)
Jun 08, 5-6 AM (9)
Jun 08, 6-7 AM (5)
Jun 08, 7-8 AM (25)
Jun 08, 8-9 AM (36)
Jun 08, 9-10 AM (41)
Jun 08, 10-11 AM (24)
Jun 08, 11-12 PM (22)
Jun 08, 12-1 PM (40)
Jun 08, 1-2 PM (48)
Jun 08, 2-3 PM (33)
Jun 08, 3-4 PM (27)
Jun 08, 4-5 PM (12)
Jun 08, 5-6 PM (23)
Jun 08, 6-7 PM (14)
Jun 08, 7-8 PM (3)
Jun 08, 8-9 PM (6)
Jun 08, 9-10 PM (19)
Jun 08, 10-11 PM (29)
Jun 08, 11-12 AM (8)
Jun 09, 12-1 AM (5)
Jun 09, 1-2 AM (3)
Jun 09, 2-3 AM (1)
Jun 09, 3-4 AM (3)
Jun 09, 4-5 AM (26)
Jun 09, 5-6 AM (5)
Jun 09, 6-7 AM (23)
Jun 09, 7-8 AM (51)
Jun 09, 8-9 AM (35)
Jun 09, 9-10 AM (45)
Jun 09, 10-11 AM (51)
Jun 09, 11-12 PM (46)
Jun 09, 12-1 PM (86)
Jun 09, 1-2 PM (84)
Jun 09, 2-3 PM (36)
Jun 09, 3-4 PM (38)
Jun 09, 4-5 PM (16)
Jun 09, 5-6 PM (18)
Jun 09, 6-7 PM (18)
Jun 09, 7-8 PM (19)
Jun 09, 8-9 PM (16)
Jun 09, 9-10 PM (16)
Jun 09, 10-11 PM (28)
Jun 09, 11-12 AM (10)
Jun 10, 12-1 AM (11)
Jun 10, 1-2 AM (16)
Jun 10, 2-3 AM (11)
Jun 10, 3-4 AM (19)
Jun 10, 4-5 AM (5)
Jun 10, 5-6 AM (2)
Jun 10, 6-7 AM (46)
Jun 10, 7-8 AM (82)
Jun 10, 8-9 AM (18)
Jun 10, 9-10 AM (59)
Jun 10, 10-11 AM (46)
Jun 10, 11-12 PM (134)
Jun 10, 12-1 PM (49)
Jun 10, 1-2 PM (33)
Jun 10, 2-3 PM (32)
Jun 10, 3-4 PM (28)
Jun 10, 4-5 PM (36)
Jun 10, 5-6 PM (12)
Jun 10, 6-7 PM (12)
Jun 10, 7-8 PM (38)
Jun 10, 8-9 PM (11)
Jun 10, 9-10 PM (9)
Jun 10, 10-11 PM (20)
Jun 10, 11-12 AM (7)
Jun 11, 12-1 AM (10)
Jun 11, 1-2 AM (2)
Jun 11, 2-3 AM (0)
Jun 11, 3-4 AM (2)
Jun 11, 4-5 AM (8)
Jun 11, 5-6 AM (12)
Jun 11, 6-7 AM (34)
Jun 11, 7-8 AM (106)
Jun 11, 8-9 AM (36)
Jun 11, 9-10 AM (20)
Jun 11, 10-11 AM (105)
Jun 11, 11-12 PM (25)
Jun 11, 12-1 PM (38)
Jun 11, 1-2 PM (37)
Jun 11, 2-3 PM (14)
Jun 11, 3-4 PM (20)
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 (28)
Jun 12, 9-10 AM (22)
Jun 12, 10-11 AM (29)
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 (18)
Jun 12, 6-7 PM (26)
Jun 12, 7-8 PM (11)
Jun 12, 8-9 PM (5)
3,208 commits this week Jun 05, 2026 - Jun 12, 2026
ci(e2e): add u5c (utxorpc) legs for mainnet/preprod/preview
Move the manual tmp_u5c_test checks into the streamlined e2e suite as three
`kind: u5c` legs against the Demeter utxorpc endpoints. Converts the old
time-bounded run.sh approach to the standard exit-code gate via a WorkStats
finalization policy (3 blocks → exit 0); a #921-style regression (reset loop,
no apply events) never finalizes → timeout → fail.

API keys are parameterized as ${DMTR_UTXORPC_KEY_*} (resolved by envsubst from
GitHub secrets) rather than hardcoded — the scratch files held real-looking
keys and this repo is public. The e2e image is built --all-features, so U5C is
available (and now TLS-safe per the preceding crypto-provider fix).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
fix: install default rustls CryptoProvider for the u5c TLS path
The U5C source connects over TLS via tonic/rustls. In builds that pull more
than one rustls crypto provider (e.g. the `aws` feature brings in aws-lc-rs
alongside ring), rustls has no process-default provider and panics on the
first TLS handshake (`no process-level CryptoProvider available`). Install the
ring provider once at startup, gated on the `u5c` feature.

This only surfaced now because nothing exercised U5C in a multi-provider build;
the manual u5c tests built `--features u5c` alone (single provider).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
chore(deps): bump gouroboros to v0.183.0 and ouroboros-mock to v0.13.0
v0.183.0 removes leios as a ledger era: the endorser-block types
(LeiosEndorserBlock, LeiosTransactionReference,
NewLeiosEndorserBlockFromCbor) moved from ledger/leios to ledger/common,
and the leios era id and its block/tx/header type constants were dropped.

- Repoint the three endorser-block usages in ouroboros/leios_merged.go and
  ledger/forging/forger.go to ledger/common (types unchanged).
- Update the nonce-stability-window era-dispatch test to use Dijkstra — the
  real post-Conway Praos era that production already enumerates — as the
  4k/f regression guard in place of the removed Leios era.
- Bump ouroboros-mock to v0.13.0, which renames its Dijkstra-era fixture
  decoders off the removed leios constants; v0.12.0 fails to compile against
  gouroboros v0.183.0.

No production behavior change; the endorser-block CBOR and the post-Conway
4k/f window are unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Chris Guiney <[email protected]>
chore(deps): bump gouroboros to v0.183.0 (#215)
v0.183.0 removes leios as a ledger era and renames the Dijkstra era's
block/tx/header type constants accordingly. Update the fixture era decoders
to the new names: BlockTypeLeiosRanking -> BlockTypeDijkstra, TxTypeLeios ->
TxTypeDijkstra, BlockHeaderTypeLeios -> BlockHeaderTypeDijkstra (the
"dijkstra" era cases). No behavior change.

Signed-off-by: Chris Guiney <[email protected]>
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
ci(e2e): map Demeter relays per network
The three relay.cnode-m1.demeter.run endpoints are different networks, not
redundant mainnet relays:
  :3000 = Mainnet, :3001 = PreProd, :3002 = Preview

Point the mainnet legs at :3000 (only) and the preview n2n legs at :3002,
replacing the public preview relay. (:3001/PreProd is unused — no preprod legs.)

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
chore(deps): bump gouroboros to v0.183.0
v0.183.0 removes leios as a ledger era and renames the Dijkstra era's
block/tx/header type constants accordingly. Update the fixture era decoders
to the new names: BlockTypeLeiosRanking -> BlockTypeDijkstra, TxTypeLeios ->
TxTypeDijkstra, BlockHeaderTypeLeios -> BlockHeaderTypeDijkstra (the
"dijkstra" era cases). No behavior change.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Chris Guiney <[email protected]>
Strengthen and polish rough edges of the Ogmios implementation
Strenghten and polish rough edges of implementation:

* `runScript` now returns `Maybe AsyncBenchmarkControl` instead of
  fabricating a no-op control: submit modes that never start the
  benchmark machinery (LocalSocket, Ogmios) yield Nothing, and a
  failing run no longer dies with the misleading
  "AsyncBenchmarkControl uninitialized" error that masked the real
  one. noopBenchmarkControl is gone; both call sites in Command.hs
  only ever consumed fst, so they are unaffected.

* WebSocket failures (DNS, refused connection, handshake rejection,
  mid-stream drops, close frames) are caught around WS.runClient and
  converted into TxGenError instead of escaping as raw exceptions
  past the error machinery and logging shutdown.

* `parseOgmiosUrl` validates the scheme (plain `ws://` only; `wss://` was
  silently degrading to a plaintext connection), parses the port via
  readMaybe with a 1-65535 range check instead of a partial read
  (`ws://host:/` no longer crashes), and rejects empty hosts.

* Submission responses are subject to a 90s timeout (generous, since
  the node may hold submissions back under mempool pressure) and
  their JSON-RPC id is verified against the request id; a mismatched
  or null id is treated as a protocol fault and aborts the run with
  the offending response described.

* json_highlevel configs that set ogmiosUrl without debugMode: true
  are rejected at compile time with an explanatory error: Ogmios mode
  ignores tps/targetNodes and produces no benchmark metrics, so a
  config asking for a real benchmark must fail fast rather than run
  unpaced and unmeasured. Low-level json scripts are unaffected, and
  compileOptions fails before any node interaction.

* Polish: parseOgmiosUrl/parseOgmiosResponse/OgmiosResult exported to
  make them unit-testable, `fromMaybe Null` instead of `maybe Null id`,
  unused `RankNTypes` pragma dropped, haddock module header added,
  import list put in stylish-haskell order.