Apr 20, 10-11 AM (95)
Apr 20, 11-12 PM (42)
Apr 20, 12-1 PM (39)
Apr 20, 1-2 PM (53)
Apr 20, 2-3 PM (68)
Apr 20, 3-4 PM (47)
Apr 20, 4-5 PM (41)
Apr 20, 5-6 PM (31)
Apr 20, 6-7 PM (24)
Apr 20, 7-8 PM (10)
Apr 20, 8-9 PM (7)
Apr 20, 9-10 PM (16)
Apr 20, 10-11 PM (28)
Apr 20, 11-12 AM (18)
Apr 21, 12-1 AM (24)
Apr 21, 1-2 AM (5)
Apr 21, 2-3 AM (13)
Apr 21, 3-4 AM (4)
Apr 21, 4-5 AM (3)
Apr 21, 5-6 AM (8)
Apr 21, 6-7 AM (15)
Apr 21, 7-8 AM (44)
Apr 21, 8-9 AM (119)
Apr 21, 9-10 AM (36)
Apr 21, 10-11 AM (35)
Apr 21, 11-12 PM (98)
Apr 21, 12-1 PM (57)
Apr 21, 1-2 PM (71)
Apr 21, 2-3 PM (60)
Apr 21, 3-4 PM (33)
Apr 21, 4-5 PM (31)
Apr 21, 5-6 PM (27)
Apr 21, 6-7 PM (38)
Apr 21, 7-8 PM (35)
Apr 21, 8-9 PM (37)
Apr 21, 9-10 PM (14)
Apr 21, 10-11 PM (34)
Apr 21, 11-12 AM (12)
Apr 22, 12-1 AM (2)
Apr 22, 1-2 AM (3)
Apr 22, 2-3 AM (3)
Apr 22, 3-4 AM (4)
Apr 22, 4-5 AM (3)
Apr 22, 5-6 AM (17)
Apr 22, 6-7 AM (34)
Apr 22, 7-8 AM (21)
Apr 22, 8-9 AM (37)
Apr 22, 9-10 AM (18)
Apr 22, 10-11 AM (47)
Apr 22, 11-12 PM (45)
Apr 22, 12-1 PM (56)
Apr 22, 1-2 PM (64)
Apr 22, 2-3 PM (44)
Apr 22, 3-4 PM (86)
Apr 22, 4-5 PM (46)
Apr 22, 5-6 PM (17)
Apr 22, 6-7 PM (10)
Apr 22, 7-8 PM (18)
Apr 22, 8-9 PM (15)
Apr 22, 9-10 PM (23)
Apr 22, 10-11 PM (31)
Apr 22, 11-12 AM (17)
Apr 23, 12-1 AM (7)
Apr 23, 1-2 AM (4)
Apr 23, 2-3 AM (4)
Apr 23, 3-4 AM (6)
Apr 23, 4-5 AM (3)
Apr 23, 5-6 AM (8)
Apr 23, 6-7 AM (17)
Apr 23, 7-8 AM (26)
Apr 23, 8-9 AM (33)
Apr 23, 9-10 AM (33)
Apr 23, 10-11 AM (29)
Apr 23, 11-12 PM (30)
Apr 23, 12-1 PM (51)
Apr 23, 1-2 PM (69)
Apr 23, 2-3 PM (65)
Apr 23, 3-4 PM (26)
Apr 23, 4-5 PM (21)
Apr 23, 5-6 PM (7)
Apr 23, 6-7 PM (7)
Apr 23, 7-8 PM (11)
Apr 23, 8-9 PM (14)
Apr 23, 9-10 PM (6)
Apr 23, 10-11 PM (28)
Apr 23, 11-12 AM (18)
Apr 24, 12-1 AM (7)
Apr 24, 1-2 AM (4)
Apr 24, 2-3 AM (7)
Apr 24, 3-4 AM (5)
Apr 24, 4-5 AM (8)
Apr 24, 5-6 AM (13)
Apr 24, 6-7 AM (12)
Apr 24, 7-8 AM (33)
Apr 24, 8-9 AM (40)
Apr 24, 9-10 AM (41)
Apr 24, 10-11 AM (72)
Apr 24, 11-12 PM (57)
Apr 24, 12-1 PM (37)
Apr 24, 1-2 PM (57)
Apr 24, 2-3 PM (35)
Apr 24, 3-4 PM (19)
Apr 24, 4-5 PM (16)
Apr 24, 5-6 PM (38)
Apr 24, 6-7 PM (26)
Apr 24, 7-8 PM (12)
Apr 24, 8-9 PM (42)
Apr 24, 9-10 PM (17)
Apr 24, 10-11 PM (30)
Apr 24, 11-12 AM (16)
Apr 25, 12-1 AM (8)
Apr 25, 1-2 AM (1)
Apr 25, 2-3 AM (10)
Apr 25, 3-4 AM (5)
Apr 25, 4-5 AM (3)
Apr 25, 5-6 AM (13)
Apr 25, 6-7 AM (1)
Apr 25, 7-8 AM (4)
Apr 25, 8-9 AM (24)
Apr 25, 9-10 AM (17)
Apr 25, 10-11 AM (4)
Apr 25, 11-12 PM (4)
Apr 25, 12-1 PM (13)
Apr 25, 1-2 PM (3)
Apr 25, 2-3 PM (10)
Apr 25, 3-4 PM (6)
Apr 25, 4-5 PM (10)
Apr 25, 5-6 PM (16)
Apr 25, 6-7 PM (12)
Apr 25, 7-8 PM (30)
Apr 25, 8-9 PM (55)
Apr 25, 9-10 PM (13)
Apr 25, 10-11 PM (20)
Apr 25, 11-12 AM (21)
Apr 26, 12-1 AM (5)
Apr 26, 1-2 AM (0)
Apr 26, 2-3 AM (2)
Apr 26, 3-4 AM (5)
Apr 26, 4-5 AM (2)
Apr 26, 5-6 AM (2)
Apr 26, 6-7 AM (3)
Apr 26, 7-8 AM (8)
Apr 26, 8-9 AM (3)
Apr 26, 9-10 AM (0)
Apr 26, 10-11 AM (2)
Apr 26, 11-12 PM (1)
Apr 26, 12-1 PM (6)
Apr 26, 1-2 PM (4)
Apr 26, 2-3 PM (14)
Apr 26, 3-4 PM (14)
Apr 26, 4-5 PM (0)
Apr 26, 5-6 PM (13)
Apr 26, 6-7 PM (13)
Apr 26, 7-8 PM (7)
Apr 26, 8-9 PM (7)
Apr 26, 9-10 PM (4)
Apr 26, 10-11 PM (26)
Apr 26, 11-12 AM (21)
Apr 27, 12-1 AM (6)
Apr 27, 1-2 AM (7)
Apr 27, 2-3 AM (9)
Apr 27, 3-4 AM (9)
Apr 27, 4-5 AM (5)
Apr 27, 5-6 AM (13)
Apr 27, 6-7 AM (7)
Apr 27, 7-8 AM (40)
Apr 27, 8-9 AM (45)
Apr 27, 9-10 AM (27)
Apr 27, 10-11 AM (3)
3,809 commits this week Apr 20, 2026 - Apr 27, 2026
Add negative golden tests for invalid-identifier parse errors (#7742)
Freeze the current (unhelpful) error output for three forms of invalid
UPLC identifier:
- `foo-bar`                — hyphen followed by non-digits
- `foo-123-456`            — double `-NNN` suffix
- `pubKeyHash-305478r71`   — hyphen + digits + more letters (the shape
  Scalus 0.16.0's `toUplcOptimized` emits, from issue #7742)

All three cases produce misleading diagnostics today — notably the
Scalus case reports the error 8+ characters past the offending name.
Capturing the status quo as goldens so that a follow-up improvement to
name-parser diagnostics shows up as an explicit golden-file diff.
Point parser diagnostics at the offending name (#7742)
When the unquoted-identifier parser finishes, require that the next char
is a real word-boundary (not another identifier char and not another
'-'). Otherwise the caller wrote something like `pubKeyHash-305478r71`,
`foo-bar` or `foo-123-456`: the '-NNN' we just consumed as the numeric
unique-suffix is not actually terminal, and the prefix interpretation
would silently mis-parse. Consume the remainder of the extended
identifier so the diagnostic can cite the full bad text, then raise a
new `InvalidIdentifier` custom parser error with a caret on the start
of the identifier and an actionable hint to quote it with backticks.

For the original Scalus 0.16.0 HTLC reproducer this changes the error
from `htlc.uplc:448:39: unexpected '(' expecting ')'` (on a lambda 8+
chars past the real site) to `htlc.uplc:447:41: Invalid identifier
'pubKeyHash-305478r71'` — on the offending name itself.

The three negative goldens added in the previous commit are updated to
the new message; all 3886 tests across plutus-core/untyped-plutus-core/
plutus-ir pass unchanged.
chore(deps): bump webiny/action-conventional-commits from 1.3.1 to 1.4.2
Bumps [webiny/action-conventional-commits](https://github.com/webiny/action-conventional-commits) from 1.3.1 to 1.4.2.
- [Release notes](https://github.com/webiny/action-conventional-commits/releases)
- [Commits](https://github.com/webiny/action-conventional-commits/compare/faccb24fc2550dd15c0390d944379d2d8ed9690e...7f91b1595ca1951cdb671ddc9f07a49081ec5b69)

---
updated-dependencies:
- dependency-name: webiny/action-conventional-commits
  dependency-version: 1.4.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
[Leios prototype] Migrate EB announcement to Praos header (#1978)
Resolves https://github.com/input-output-hk/ouroboros-leios/issues/837

DONE
- [x] Move the EB announcement from the Ledger Block to the Praos Header
- [x] Add `EbAnnouncement` type that holds an `EbHash` and its size!
     - [x] Remove the `certifies` field
  - [x] Move the LeiosState from the Ledger to the ChainDepState
- [x] Adds 'cummulative' EB size tracking in the state (TODO: Grafana
this)
  - [ ] ~~Move the Certificate from the Ledger into Consensus~~
- Ugh for now I'm keeping it in the Ledger because it's easier, albeit
not ideal
   - [x] Update to Ledger with backward compatible Block codec
   - [x] Introduces `ForgeBlockArgs` for my own sanity
- [x] FIX: [EB only diffused if announced in
forge](https://github.com/IntersectMBO/ouroboros-consensus/pull/1978/commits/85aafd4146617fea79f825d989bf1ca5b9dfb6b6)
 
NOTES
- `ResolveLeiosBlock` machinery is a hack that works! We're blindly
guessing that `blk` might contain something that can be resolved like a
LeiosCertificate and it returns a `blk` that hopefully has a fully
resolved `blk` that can be applied. Imo a morally correct approach would
to have `data RankingBlock blk = LedgerRb blk | CertRb LeiosCertificate`
which we can use to make such distinction and manage the resolution
process here and elsewhere in the abstract code base where that
distinction matters (like the ForgeLoop)
- `applyBlock` currently does `resolveLeiosBlock` and then
`tickAndReapply` which is not incorrect as in the case of there being a
Leios Cert, we need to base changes from the associated EB on top of the
`prev` Ledger State (I think that means we shouldn't tick?)
  - see https://github.com/input-output-hk/ouroboros-leios/issues/857
- Apropos `tx-centrifuge` it doesn't seem like there's any way around
breaking the API `BlockFetch`. For the current pragmatic solutions we
hide the `Certificate` behind the `blk` and therefore `BlockFetch` will
happily return you a Certificate which will break `tx-centrifuge`. That
being said, `ChainSync` is also necessarily having a breaking change
since we added new fields to the PraosHeader.
chore(deps): bump github.com/blinklabs-io/plutigo from 0.1.8 to 0.1.9
Bumps [github.com/blinklabs-io/plutigo](https://github.com/blinklabs-io/plutigo) from 0.1.8 to 0.1.9.
- [Release notes](https://github.com/blinklabs-io/plutigo/releases)
- [Changelog](https://github.com/blinklabs-io/plutigo/blob/main/RELEASE_NOTES.md)
- [Commits](https://github.com/blinklabs-io/plutigo/compare/v0.1.8...v0.1.9)

---
updated-dependencies:
- dependency-name: github.com/blinklabs-io/plutigo
  dependency-version: 0.1.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
chore(deps): bump github.com/blinklabs-io/ouroboros-mock
Bumps [github.com/blinklabs-io/ouroboros-mock](https://github.com/blinklabs-io/ouroboros-mock) from 0.9.1 to 0.10.0.
- [Release notes](https://github.com/blinklabs-io/ouroboros-mock/releases)
- [Commits](https://github.com/blinklabs-io/ouroboros-mock/compare/v0.9.1...v0.10.0)

---
updated-dependencies:
- dependency-name: github.com/blinklabs-io/ouroboros-mock
  dependency-version: 0.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Fix Sqlite performance issues (#2012)
BEGIN IMMEDIATE results in directly locking the transaction for write
access, while BEGIN does defer it to the first write statement. Thus, if
we never do a write, the connection does not get blocked by other
connections and reduces lock contention.

The sql query was very inefficient and also the completion tracking
can't afford to check hashes. Keeping a counter in the database, written
to within the same transaction seemed the best way forward.
testnet: remove asteria-player from cardano_node_master compose (#68)
Unblocks scheduled runs. asteria-player:dev never published —
publish-images skips it ("Tag 'dev' not found in repo"), so
Antithesis fails to pull and every scheduled run since 2026-04-25
came back Incomplete with zero container stdout.

Asteria work continues under #56 / PR #67. Re-add to compose once a
real image tag is published.

Ogmios already absent from main (removed in 7e0f8f5 pending #49).
feat(makefile): refactor Makefile with improved targets, venv support, and help
- Add virtual environment management for all targets
- Organize targets into sections: setup, linting, release, documentation, maintenance, help
- Add clean and clean-all targets for artifact and venv cleanup
- Add install-doc target for documentation dependencies
- Improve documentation build process
- Add self-documenting help target with usage info
- Use consistent variable names and comments
Refactor DijkstraBlockBody to use MemoBytes serialization
Replace the manual segmented-witness serialization with MemoBytes,
which simplifies the code significantly. The block body is now
serialized as a flat 3-element list [invalid_transactions, transactions,
peras_certificate] instead of 5 separate segments.

Also fix PerasCert to encode/decode as bytes (matching CDDL),
reimplement alignedValidFlags using IntSet, and expose
DijkstraBlockBodyRaw/MkDijkstraBlockBody from Internal module.