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 (19)
Jun 12, 6-7 PM (26)
Jun 12, 7-8 PM (12)
Jun 12, 8-9 PM (17)
Jun 12, 9-10 PM (5)
Jun 12, 10-11 PM (30)
Jun 12, 11-12 AM (6)
Jun 13, 12-1 AM (6)
Jun 13, 1-2 AM (2)
Jun 13, 2-3 AM (0)
Jun 13, 3-4 AM (3)
Jun 13, 4-5 AM (0)
Jun 13, 5-6 AM (3)
Jun 13, 6-7 AM (7)
Jun 13, 7-8 AM (5)
Jun 13, 8-9 AM (6)
Jun 13, 9-10 AM (14)
Jun 13, 10-11 AM (12)
Jun 13, 11-12 PM (2)
Jun 13, 12-1 PM (23)
Jun 13, 1-2 PM (21)
Jun 13, 2-3 PM (8)
Jun 13, 3-4 PM (1)
Jun 13, 4-5 PM (4)
Jun 13, 5-6 PM (4)
Jun 13, 6-7 PM (3)
Jun 13, 7-8 PM (3)
Jun 13, 8-9 PM (7)
Jun 13, 9-10 PM (16)
Jun 13, 10-11 PM (19)
Jun 13, 11-12 AM (24)
Jun 14, 12-1 AM (18)
Jun 14, 1-2 AM (0)
Jun 14, 2-3 AM (0)
Jun 14, 3-4 AM (0)
Jun 14, 4-5 AM (2)
Jun 14, 5-6 AM (0)
Jun 14, 6-7 AM (2)
Jun 14, 7-8 AM (3)
Jun 14, 8-9 AM (0)
Jun 14, 9-10 AM (1)
Jun 14, 10-11 AM (2)
Jun 14, 11-12 PM (10)
Jun 14, 12-1 PM (8)
Jun 14, 1-2 PM (4)
Jun 14, 2-3 PM (8)
Jun 14, 3-4 PM (2)
Jun 14, 4-5 PM (1)
Jun 14, 5-6 PM (1)
Jun 14, 6-7 PM (0)
Jun 14, 7-8 PM (11)
Jun 14, 8-9 PM (1)
Jun 14, 9-10 PM (13)
Jun 14, 10-11 PM (29)
Jun 14, 11-12 AM (23)
Jun 15, 12-1 AM (8)
Jun 15, 1-2 AM (10)
Jun 15, 2-3 AM (4)
Jun 15, 3-4 AM (4)
Jun 15, 4-5 AM (1)
Jun 15, 5-6 AM (4)
Jun 15, 6-7 AM (6)
Jun 15, 7-8 AM (41)
Jun 15, 8-9 AM (26)
Jun 15, 9-10 AM (11)
Jun 15, 10-11 AM (35)
Jun 15, 11-12 PM (25)
Jun 15, 12-1 PM (40)
Jun 15, 1-2 PM (26)
Jun 15, 2-3 PM (21)
Jun 15, 3-4 PM (24)
Jun 15, 4-5 PM (21)
Jun 15, 5-6 PM (13)
Jun 15, 6-7 PM (13)
Jun 15, 7-8 PM (7)
Jun 15, 8-9 PM (26)
Jun 15, 9-10 PM (20)
Jun 15, 10-11 PM (22)
Jun 15, 11-12 AM (39)
Jun 16, 12-1 AM (11)
Jun 16, 1-2 AM (5)
Jun 16, 2-3 AM (1)
Jun 16, 3-4 AM (9)
Jun 16, 4-5 AM (6)
Jun 16, 5-6 AM (1)
Jun 16, 6-7 AM (16)
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 (22)
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 (9)
Jun 18, 7-8 AM (19)
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 (36)
Jun 19, 9-10 AM (39)
Jun 19, 10-11 AM (27)
Jun 19, 11-12 PM (29)
Jun 19, 12-1 PM (37)
Jun 19, 1-2 PM (0)
3,112 commits this week Jun 12, 2026 - Jun 19, 2026
db-synthesizer: eject Layer 2 (config/credential machinery) downstream
With the config parsing now handled by cardano-config and synthesize
taking a ready-made ProtocolInfo, db-synthesizer no longer needs the
vendored node/api machinery in-repo. Remove it entirely:

- 'initialize' and its adapters (the genesis/credential reading and
  protocol assembly) leave; they belong downstream, built on cardano-api.
- Delete the vendored Cardano.Api.*, Cardano.Node.Protocol.* and
  Cardano.Node.Types modules (no remaining consumers), and prune the
  now-unused build-depends (base16-bytestring, cardano-crypto,
  transformers-except).
- Trim DBSynthesizer.Types to the node/api-free option types.

The tools-test integration test becomes synthesis-only: it builds a
forging-capable protocol via the testlib (new
mkSimpleTestProtocolInfoForging, which also returns the block forgers and
genesis) instead of a node configuration file, and forges within the
testlib's KES validity window. The config-driven
synthesise -> immutalise -> analyse pipeline (and the executable) move
downstream. Drop the now-unused config fixtures.

All tool executables, cardano-test and tools-test still build and pass.
db-synthesizer: synthesize takes a ready-made ProtocolInfo; drop executable
Reshape 'synthesize' to accept the (ProtocolInfo, block-forgers) pair
produced by 'protocolInfoCardano', plus the forge options, epoch size and
ChainDB directory directly. Constructing the protocol from a node
configuration is now the caller's responsibility, so 'synthesize' no
longer touches CardanoProtocolParams or the configuration filesystem.

Also remove the standalone db-synthesizer executable (app + CLI parser +
cabal stanza); it will be provided downstream. The tools-test integration
test now builds the protocol itself (initialize + protocolInfoCardano)
and still exercises the full synthesise -> immutalise -> analyse pipeline.

No behavioural change; tools-test still passes.
db-synthesizer: parse node config via cardano-config
Replace db-synthesizer's locally-implemented config parser with the
shared cardano-config package. 'initialize' now parses the node config
with cardano-config and adapts it into the Node*ProtocolConfiguration
records that mkConsensusProtocolCardano consumes: byron-era settings,
genesis file paths (including Dijkstra via the testing config's
experimental genesis) and the hard-fork triggers.

Removes the local parser entirely: the NodeConfigStub type, the
FromJSON/AdjustFilePaths orphan instances (Orphans.hs) and the
confConfigStub field. Forging credentials still come from the tool's own
CLI NodeCredentials; the byron software version is hard-coded, mirroring
the node, since cardano-config does not model it.

tools-test still passes (synthesise -> immutalise -> analyse).
db-analyser: parse node config via cardano-config
Replace db-analyser's locally-implemented CardanoConfig JSON parser with
the shared cardano-config package. The genesis file paths, byron network
magic, genesis hashes and hard-fork triggers are now read from
cardano-config's NodeConfigurationFromFile, with small boundary
conversions for the hash/network-magic representations. db-immutaliser
reuses this path via CardanoBlockArgs, so it migrates too.

No behavioural change: the tools-test integration test (synthesise ->
immutalise -> analyse) still passes with matching block counts.
refactor: address Copilot review on /scripts/:script_hash/utxos
- Import `Amount` as a type-only import (used only as a type).
- Type `reference_script_hash` as non-null: the query inner-joins `script`
  and filters on its hash, so the column is always present.
- Simplify the `amount` array construction using the `...(row.amount ?? [])`
  pattern already used by /accounts/:stake_address/utxos.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
builder: fix darwin write->copy file corruption (#2018)
On a heavily-churned APFS build volume, reading a freshly-written file can
return a stale recycled-block page instead of the bytes just written, so a
build step that copies the file lands corrupted bytes in $out.

This first showed up as invalid aarch64-darwin code signatures: ld64 builds
the executable in an in-memory buffer, hashes it for its ad-hoc signature,
then write()s that buffer to disk (it avoids mmap, rdar://66598213) -- so the
linked binary is valid, but the later install copy read a stale page and the
binary in $out no longer matched ld64's embedded signature, so macOS SIGKILLed
it at startup ("Code Signature Invalid"). The bad signature was only the
symptom; the same stale read can silently corrupt any copied file, and on
x86_64-darwin (where these ad-hoc signatures aren't enforced) it would go
unnoticed. Cabal's own copyFile is no safer than cp -- both copy via cached
read()/write() -- so the fix can't live in either copier alone.

Fix it at the source rather than re-signing: before each copy, flush the
freshly-written files to stable storage (F_FULLFSYNC) and drop their stale
page-cache mapping (F_NOCACHE), so the copy reads exactly the bytes that were
written and carries ld64's original signature through unchanged.
builder/darwin-flush.nix provides flushDir / flushFile helpers (no-ops off
darwin, enabled on both darwin arches); they run before the install copies in
the v1 builder (comp-builder.nix) and at both copy points of the v2
cabal-slice path (build-cabal-slice.nix, comp-v2-builder.nix).

Validated on aarch64-darwin with both builders: the cardano-ledger-shelley
test suite builds and runs (168 examples, 0 failures) and the resulting binary
keeps ld64's original adhoc,linker-signed signature (no re-sign).