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 (22)
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 (100)
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 (27)
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 (21)
Apr 25, 11-12 AM (22)
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 (82)
Apr 27, 8-9 AM (46)
Apr 27, 9-10 AM (29)
Apr 27, 10-11 AM (61)
Apr 27, 11-12 PM (78)
Apr 27, 12-1 PM (66)
Apr 27, 1-2 PM (44)
Apr 27, 2-3 PM (51)
Apr 27, 3-4 PM (38)
Apr 27, 4-5 PM (36)
Apr 27, 5-6 PM (20)
Apr 27, 6-7 PM (10)
Apr 27, 7-8 PM (3)
3,907 commits this week Apr 20, 2026 - Apr 27, 2026
Introduce non-trivial type for PerasCert
Instead of a placeholder for PerasCert we introduce a ShortByteString.
This is needed so we can apply and test actual code for working with
certificates.

This is a temporary step, because the ultimate goal is to keep real
PerasCert in ledger repository. But in the meantime it's much easier
to keep all relevant code in the consensus repository and move everything
to the ledger once the types stabilize.

Deserialisation of the block was changed now we always expect 5 components
in the BlockBody group and return empty cert only if the last group contain
VNil
TEST — synthetic break for tracking-issue test, do not merge
Two intentional changes for end-to-end testing of the new
'Open / update dead-link tracking issue' workflow step:

  A. Remove typed-protocols from IOG_DOC_BASES so the script reports
     it as Actionable Unmapped CHaP and exits 1 deterministically.

  B. Drop the 'github.ref == refs/heads/master' clause from the new
     step's if-gate so the step fires on workflow_dispatch from this
     test branch.

This branch is for validation only and should be deleted after
testing — do NOT merge.
build(deps): bump github.com/aws/smithy-go from 1.25.0 to 1.25.1
Bumps [github.com/aws/smithy-go](https://github.com/aws/smithy-go) from 1.25.0 to 1.25.1.
- [Changelog](https://github.com/aws/smithy-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/aws/smithy-go/compare/v1.25.0...v1.25.1)

---
updated-dependencies:
- dependency-name: github.com/aws/smithy-go
  dependency-version: 1.25.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
build(deps): bump github.com/blockfrost/blockfrost-go
Bumps [github.com/blockfrost/blockfrost-go](https://github.com/blockfrost/blockfrost-go) from 0.3.0 to 0.4.0.
- [Commits](https://github.com/blockfrost/blockfrost-go/compare/v0.3.0...v0.4.0)

---
updated-dependencies:
- dependency-name: github.com/blockfrost/blockfrost-go
  dependency-version: 0.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
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.
- [Commits](https://github.com/webiny/action-conventional-commits/compare/v1.3.1...v1.4.2)

---
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]>
chore(deps): Bump github.com/blinklabs-io/gouroboros
Bumps [github.com/blinklabs-io/gouroboros](https://github.com/blinklabs-io/gouroboros) from 0.153.1 to 0.166.0.
- [Release notes](https://github.com/blinklabs-io/gouroboros/releases)
- [Changelog](https://github.com/blinklabs-io/gouroboros/blob/main/RELEASE_NOTES.md)
- [Commits](https://github.com/blinklabs-io/gouroboros/compare/v0.153.1...v0.166.0)

---
updated-dependencies:
- dependency-name: github.com/blinklabs-io/gouroboros
  dependency-version: 0.166.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
feat(haskell): TxBuilder.Sweep + CI E2E job + nix exposure
Closes the cross-language fidelity gap that hid the original
divergence between the Aiken validator and the Haskell library.

TxBuilder.Sweep:
- New module `Cardano.MPFS.Cage.TxBuilder.Sweep` exposing
  `sweepUtxoImpl`. Standalone sweep tx: spends one
  non-legitimate UTxO at the cage's address, references the
  state UTxO so the validator can read the owner's
  verification-key hash, and is signed by the state owner.
  Same shape as `Retract` (also redeemer-pointed to a state
  ref). Bundling sweep with `Modify` is supported by the
  on-chain validator but produced by a higher-level
  transaction builder (out of scope here).

Nix exposure:
- `cage-tests-e2e` exposed via `haskell/nix/checks.nix` and
  `haskell/nix/apps.nix`. Runnable as
  `nix run .#cage-tests-e2e`.

CI:
- New `e2e` job in `.github/workflows/ci.yml`: needs
  `build` (which produces `plutus.json`), then runs
  `nix run .#cage-tests-e2e` with
  `MPFS_BLUEPRINT=$GITHUB_WORKSPACE/result`. The E2E test
  spins a devnet `cardano-node` subprocess, applies the seed
  parameter to the blueprint at runtime, and submits txs
  against the live validator — verifying that the Haskell
  encoding matches what the Aiken validator decodes.

This is the structural fix for Constitution Principle I
(Cross-Language Encoding Fidelity). Before this commit, CI
ran neither E2E nor any cross-language round-trip check, so
divergences between the Aiken validator and the Haskell
library went undetected. With this job, every PR exercises
the full mint/request/update/retract flow against the
freshly-built blueprint.

Refs #47.