May 12, 7-8 AM (25)
May 12, 8-9 AM (26)
May 12, 9-10 AM (35)
May 12, 10-11 AM (82)
May 12, 11-12 PM (98)
May 12, 12-1 PM (38)
May 12, 1-2 PM (69)
May 12, 2-3 PM (54)
May 12, 3-4 PM (41)
May 12, 4-5 PM (57)
May 12, 5-6 PM (40)
May 12, 6-7 PM (24)
May 12, 7-8 PM (24)
May 12, 8-9 PM (18)
May 12, 9-10 PM (8)
May 12, 10-11 PM (40)
May 12, 11-12 AM (19)
May 13, 12-1 AM (10)
May 13, 1-2 AM (2)
May 13, 2-3 AM (5)
May 13, 3-4 AM (2)
May 13, 4-5 AM (5)
May 13, 5-6 AM (29)
May 13, 6-7 AM (52)
May 13, 7-8 AM (43)
May 13, 8-9 AM (44)
May 13, 9-10 AM (21)
May 13, 10-11 AM (22)
May 13, 11-12 PM (47)
May 13, 12-1 PM (25)
May 13, 1-2 PM (44)
May 13, 2-3 PM (57)
May 13, 3-4 PM (42)
May 13, 4-5 PM (33)
May 13, 5-6 PM (30)
May 13, 6-7 PM (51)
May 13, 7-8 PM (33)
May 13, 8-9 PM (9)
May 13, 9-10 PM (24)
May 13, 10-11 PM (30)
May 13, 11-12 AM (11)
May 14, 12-1 AM (18)
May 14, 1-2 AM (3)
May 14, 2-3 AM (4)
May 14, 3-4 AM (21)
May 14, 4-5 AM (11)
May 14, 5-6 AM (18)
May 14, 6-7 AM (18)
May 14, 7-8 AM (47)
May 14, 8-9 AM (53)
May 14, 9-10 AM (35)
May 14, 10-11 AM (20)
May 14, 11-12 PM (114)
May 14, 12-1 PM (54)
May 14, 1-2 PM (151)
May 14, 2-3 PM (32)
May 14, 3-4 PM (17)
May 14, 4-5 PM (14)
May 14, 5-6 PM (38)
May 14, 6-7 PM (12)
May 14, 7-8 PM (22)
May 14, 8-9 PM (37)
May 14, 9-10 PM (35)
May 14, 10-11 PM (27)
May 14, 11-12 AM (14)
May 15, 12-1 AM (18)
May 15, 1-2 AM (15)
May 15, 2-3 AM (5)
May 15, 3-4 AM (3)
May 15, 4-5 AM (13)
May 15, 5-6 AM (14)
May 15, 6-7 AM (10)
May 15, 7-8 AM (31)
May 15, 8-9 AM (23)
May 15, 9-10 AM (52)
May 15, 10-11 AM (71)
May 15, 11-12 PM (70)
May 15, 12-1 PM (73)
May 15, 1-2 PM (73)
May 15, 2-3 PM (66)
May 15, 3-4 PM (26)
May 15, 4-5 PM (13)
May 15, 5-6 PM (30)
May 15, 6-7 PM (29)
May 15, 7-8 PM (25)
May 15, 8-9 PM (8)
May 15, 9-10 PM (34)
May 15, 10-11 PM (34)
May 15, 11-12 AM (25)
May 16, 12-1 AM (2)
May 16, 1-2 AM (2)
May 16, 2-3 AM (3)
May 16, 3-4 AM (3)
May 16, 4-5 AM (0)
May 16, 5-6 AM (6)
May 16, 6-7 AM (2)
May 16, 7-8 AM (10)
May 16, 8-9 AM (1)
May 16, 9-10 AM (2)
May 16, 10-11 AM (1)
May 16, 11-12 PM (13)
May 16, 12-1 PM (11)
May 16, 1-2 PM (8)
May 16, 2-3 PM (15)
May 16, 3-4 PM (10)
May 16, 4-5 PM (2)
May 16, 5-6 PM (2)
May 16, 6-7 PM (2)
May 16, 7-8 PM (10)
May 16, 8-9 PM (6)
May 16, 9-10 PM (9)
May 16, 10-11 PM (29)
May 16, 11-12 AM (42)
May 17, 12-1 AM (9)
May 17, 1-2 AM (1)
May 17, 2-3 AM (0)
May 17, 3-4 AM (1)
May 17, 4-5 AM (0)
May 17, 5-6 AM (3)
May 17, 6-7 AM (2)
May 17, 7-8 AM (1)
May 17, 8-9 AM (1)
May 17, 9-10 AM (1)
May 17, 10-11 AM (6)
May 17, 11-12 PM (6)
May 17, 12-1 PM (4)
May 17, 1-2 PM (5)
May 17, 2-3 PM (9)
May 17, 3-4 PM (4)
May 17, 4-5 PM (8)
May 17, 5-6 PM (14)
May 17, 6-7 PM (10)
May 17, 7-8 PM (2)
May 17, 8-9 PM (4)
May 17, 9-10 PM (2)
May 17, 10-11 PM (20)
May 17, 11-12 AM (13)
May 18, 12-1 AM (10)
May 18, 1-2 AM (4)
May 18, 2-3 AM (5)
May 18, 3-4 AM (9)
May 18, 4-5 AM (14)
May 18, 5-6 AM (2)
May 18, 6-7 AM (37)
May 18, 7-8 AM (28)
May 18, 8-9 AM (32)
May 18, 9-10 AM (41)
May 18, 10-11 AM (41)
May 18, 11-12 PM (27)
May 18, 12-1 PM (134)
May 18, 1-2 PM (33)
May 18, 2-3 PM (83)
May 18, 3-4 PM (33)
May 18, 4-5 PM (44)
May 18, 5-6 PM (21)
May 18, 6-7 PM (16)
May 18, 7-8 PM (10)
May 18, 8-9 PM (22)
May 18, 9-10 PM (4)
May 18, 10-11 PM (25)
May 18, 11-12 AM (12)
May 19, 12-1 AM (7)
May 19, 1-2 AM (2)
May 19, 2-3 AM (9)
May 19, 3-4 AM (5)
May 19, 4-5 AM (10)
May 19, 5-6 AM (3)
May 19, 6-7 AM (5)
May 19, 7-8 AM (0)
3,988 commits this week May 12, 2026 - May 19, 2026
docs(5288): tasks for script-witness parity slice
One bisect-safe implementation slice folds T010 (RED: six failing
parity scenarios in TransactionLedgerSpec), T011 (GREEN:
ScriptWitnesses extension + plumbing in Transaction/Ledger.hs +
default updates at all five call sites), and T012 (regression
re-run of the broader TransactionLedger pattern) into a single
subagent commit. The brief in tasks.md is self-contained — the
subagent loads no process skill.

T000-T002 (bootstrap + spec + plan stops) are already done.
T020-T023 are orchestrator-owned finalisation chores (gate
re-run, PR body refresh, finalization audit, drop gate.sh +
mark ready) and do not require a subagent.
fix: stable ordering for /epochs/:number/stakes across db-sync replicas
The previous SQL paginated by epoch_stake.id (an auto-increment assigned
at insertion time by db-sync). Two replicas with identical chain data
can have different epoch_stake.id ranges for the same epoch — db-sync
recomputes the snapshot per epoch, and rollback/replay can leave gaps
or reorder insertions. Result: page 1 returned a different subset of
stake_address rows on each backend.

Verified on two backends with bit-identical data (md5 of the full set
matched) but different id ranges (91359..92937 vs 93823..95434 for the
same epoch 121, 1579 rows each).

Fix: order by the slot_no of the `delegation` row that established the
(addr, pool) pairing effective in this epoch. slot_no is pure chain
data, stable across any replica. Tiebreak on addr_id.

Applied to:
- /epochs/:number/stakes              (paged + unpaged)
- /epochs/:number/stakes/:pool_id     (paged + unpaged)

Same response shape, same set of rows — just deterministic ordering.

Plan cost: a correlated subquery on `delegation` fires once per
epoch_stake row, served by `idx_delegation_addr_id`. ~7 ms total on
preview's epoch 121 (1579 rows), unchanged from the previous 6.5 ms.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
feat: enhance DRep certificate handling and testing
- Introduced `applyDRepCert` function to streamline DRep certificate operations (register, update, retire) in `buildDRepCertTx.ts`.
- Updated `RegisterDRep`, `Retire`, and `UpdateDRep` components to utilize the new `applyDRepCert` function for better code reuse and clarity.
- Added Jest tests for DRep certificate functionality in `drepCert.test.ts`, covering various scenarios including registration, update, and retirement.
- Created utility functions and fixtures for testing in `cborUtils.ts`, `fixtures.ts`, and `mockProvider.ts`.
- Established a GitHub Actions workflow for running unit tests and uploading coverage reports.
- Set coverage thresholds for critical files to ensure code quality.
fix: reorder transaction deserialization and fix mempool UTxO era
utxoFromMempool initialized with UTxOInBabbageEra, causing all
evaluations to hit the Babbage rejection branch even for Conway
transactions. Changed to UTxOInConwayEra.

Reorder deserialiseCBOR to try Conway and Dijkstra before Babbage.
Conway transactions can successfully deserialize as Babbage (the
Babbage decoder accepts Conway-era CBOR), wrapping them as
GenTxBabbage and rejecting them as "unsupported era". Older eras
kept as fallbacks for specific diagnostics.

Use eraProtVerHigh in transaction deserialization to accept
transactions from any protocol version within an era (e.g.
Conway PV9 through PV11).

Co-Authored-By: Claude <[email protected]>
update: enable Dijkstra ApplyTxError and GenTx generators
Schema fixes for Dijkstra-era validation:
- Add SubmitTransactionFailure entries: 3169 (PointerAddressInCollateralReturn),
  3170 (SpendingOutputFromSubTransaction)
- Add ScriptPurpose<Guard> and Clause<Guard> to cardano.json
- Fix AccountBalanceInterval: use anyOf instead of oneOf
- Make ProposedProtocolParameters minFeeReferenceScripts sub-fields optional

Enable Dijkstra ApplyTxError generator and Dijkstra GenTx generator.
GenTx uses genDijkstraShelleyTx which strips sub-transactions to
avoid MemoBytes CBOR round-trip failures in mock protocol peers.

Dijkstra block generation remains excluded: randomly generated blocks
fail CBOR round-tripping in the ChainSync mock peer, likely due to
block header/body hash inconsistency. The consensus codec itself
supports Dijkstra's 5-segment block body.

Add test dependencies: cardano-data, cardano-ledger-dijkstra:testlib.
Import Dijkstra Arbitrary instances.

Co-Authored-By: Claude <[email protected]>
update: add Dijkstra generators and guard purpose to schema
- Add GenTxIdDijkstra to genGenTxId
- Add Dijkstra context error to genContextError
- Add Dijkstra-era MissingScript to genScriptFailure
- Add "guard" to script purpose enum in cardano.json
- Remove stale FIXME comment in Generators.hs
- Regenerate EvaluateTransactionResponse test vectors

Co-Authored-By: Claude <[email protected]>
update: add Dijkstra-specific fields to cardano.json schema
Add schema definitions for new Dijkstra era fields:
- Transaction: requiredExtraGuards, directDeposits,
  accountBalanceIntervals, subTransactions, requiredTopLevelGuards
- ProtocolParameters: maxReferenceScriptsSizePerBlock
- New types: AccountBalanceInterval (with oneOf for bound variants),
  TopLevelGuard, SubTransaction

New JSON field names introduced across all Dijkstra commits:

  Transaction body (TopTx):
  - requiredExtraGuards: script hash guards (new Dijkstra field)
  - directDeposits: account address to coin map
  - accountBalanceIntervals: list of interval constraints per account
  - subTransactions: nested sub-transactions
  - fee: moved to TopTx-only (SubTx has no fee)

  Transaction body (SubTx):
  - requiredTopLevelGuards: guard credentials with optional datums

  AccountBalanceInterval fields:
  - greaterThanOrEqualTo: inclusive lower bound (coin)
  - strictlyLessThan: exclusive upper bound (coin)

  TopLevelGuard fields:
  - credential: guard credential (key hash or script hash)
  - datum: optional inline datum

  ProtocolParameters:
  - maxReferenceScriptsSizePerBlock: new Dijkstra param

  Script purpose enum:
  - "guard": new Dijkstra script purpose

  Error codes:
  - 3169: PointerAddressInCollateralReturn
  - 3170: SpendingOutputFromSubTransaction

Co-Authored-By: Claude <[email protected]>
fix: nest ref-script params in minFeeReferenceScripts for all cases
Both full PParams and PParamsUpdate nest range and multiplier inside
minFeeReferenceScripts to preserve Conway's API shape. For full
PParams, all three sub-fields are always present. For updates, only
the sub-fields being updated are included, and the key is omitted
entirely when none of the three are updated.

Co-Authored-By: Claude <[email protected]>
fix: restore NodeToClientVersion gating in TxMonitor mempool lookup
Gate Dijkstra behind nodeToClientV > V_23 since V_23 is the latest
NodeToClientVersion in ouroboros-consensus 3.0.1.0 and is negotiated
by all networks with node 11.0.1.

On Dijkstra networks (future V_24+), Dijkstra is tried first. On
Conway networks, Conway is tried first. Each list is ordered from
most probable era to least probable.

Verified on preview and preprod that GenTxIdDijkstra does not crash
the node (returns false, loop continues), so this is a performance
optimization to avoid unnecessary round-trips on non-Dijkstra
networks.

Co-Authored-By: Claude <[email protected]>
v2 shell: always run cabal-project-local-sync, even with no defaults
`haskell-nix-cabal-project-local-sync` was previously included in
the shell's `nativeBuildInputs` and shellHook only when the
project's effective `cabalProjectLocal` had non-empty content.
For targets where none of the platform mkIfs fire and the user
hasn't set anything (e.g. ghcjs), the script was missing from
PATH — so any test that called it directly errored with
`command not found`, and the test's `import:
cabal.project.<targetPrefix>local` then failed because the file
didn't exist either.

Always include the script and always run the shellHook.  When
the project's `cabalProjectLocal` is empty, the script writes an
empty `cabal.project.<targetPrefix>local`, which cabal imports
harmlessly (no-op).  Removes the empty-content gate, so the
shape is the same across all targets.

Verified the ghcjs cabal-sublib-shell test now passes
(`aarch64-darwin.unstable.ghc9141.ghcjs.tests.cabal-sublib-shell.run`)
and the existing native/musl64/wasi32 paths are unchanged.
dummy-ghc: report armv7a as armv7 / ArchARM ARMv7
Real `armv7a-unknown-linux-androideabi-ghc-9.14.1` reports:

  ,("Target platform","armv7-unknown-linux")
  ,("target arch","ArchARM ARMv7 [VFPv3,NEON] SOFTFP")
  ,("target platform string","armv7-unknown-linux")

while dummy-ghc was emitting `armv7a-unknown-linux` / `ArchAArch32`,
diverging the dummy and real `--info` outputs and failing
`x86_64-linux.unstable.ghc9141.armv7a-android-prebuilt.tests.dummy-ghc-info`.

Two normalisations:

* `platformString`: map `cpu.name == "armv7a"` → `armv7`, mirroring
  the existing `i686 → i386` map.

* `target arch`: emit `ArchARM ARMv7 [VFPv3,NEON] SOFTFP` for
  `cpu.name == "armv7a"`, before the generic `isAarch32 →
  ArchAArch32` fallback.

Verified that the dummy-ghc-info test passes on
`armv7a-android-prebuilt` and is unchanged on aarch64-multiplatform,
aarch64-multiplatform-musl, aarch64-android-prebuilt, musl64,
ucrt64, and wasi32.
chore(deps): Bump andrewslotin/go-proxy-pull-action from 1.4.0 to 1.5.0
Bumps [andrewslotin/go-proxy-pull-action](https://github.com/andrewslotin/go-proxy-pull-action) from 1.4.0 to 1.5.0.
- [Release notes](https://github.com/andrewslotin/go-proxy-pull-action/releases)
- [Commits](https://github.com/andrewslotin/go-proxy-pull-action/compare/e5aea3b8b3478fc5b76befda4390513868ed2dc8...00af8a5a49c844d6dde0bbbc116b72d8fd7ae97c)

---
updated-dependencies:
- dependency-name: andrewslotin/go-proxy-pull-action
  dependency-version: 1.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>