May 27, 10-11 AM (83)
May 27, 11-12 PM (30)
May 27, 12-1 PM (50)
May 27, 1-2 PM (39)
May 27, 2-3 PM (53)
May 27, 3-4 PM (37)
May 27, 4-5 PM (11)
May 27, 5-6 PM (18)
May 27, 6-7 PM (21)
May 27, 7-8 PM (25)
May 27, 8-9 PM (19)
May 27, 9-10 PM (15)
May 27, 10-11 PM (29)
May 27, 11-12 AM (27)
May 28, 12-1 AM (9)
May 28, 1-2 AM (3)
May 28, 2-3 AM (5)
May 28, 3-4 AM (2)
May 28, 4-5 AM (9)
May 28, 5-6 AM (34)
May 28, 6-7 AM (31)
May 28, 7-8 AM (84)
May 28, 8-9 AM (33)
May 28, 9-10 AM (54)
May 28, 10-11 AM (50)
May 28, 11-12 PM (21)
May 28, 12-1 PM (47)
May 28, 1-2 PM (50)
May 28, 2-3 PM (23)
May 28, 3-4 PM (43)
May 28, 4-5 PM (86)
May 28, 5-6 PM (13)
May 28, 6-7 PM (31)
May 28, 7-8 PM (43)
May 28, 8-9 PM (34)
May 28, 9-10 PM (17)
May 28, 10-11 PM (36)
May 28, 11-12 AM (32)
May 29, 12-1 AM (12)
May 29, 1-2 AM (13)
May 29, 2-3 AM (4)
May 29, 3-4 AM (3)
May 29, 4-5 AM (0)
May 29, 5-6 AM (2)
May 29, 6-7 AM (5)
May 29, 7-8 AM (16)
May 29, 8-9 AM (37)
May 29, 9-10 AM (34)
May 29, 10-11 AM (69)
May 29, 11-12 PM (25)
May 29, 12-1 PM (44)
May 29, 1-2 PM (66)
May 29, 2-3 PM (61)
May 29, 3-4 PM (26)
May 29, 4-5 PM (26)
May 29, 5-6 PM (83)
May 29, 6-7 PM (11)
May 29, 7-8 PM (19)
May 29, 8-9 PM (15)
May 29, 9-10 PM (9)
May 29, 10-11 PM (27)
May 29, 11-12 AM (7)
May 30, 12-1 AM (9)
May 30, 1-2 AM (2)
May 30, 2-3 AM (1)
May 30, 3-4 AM (7)
May 30, 4-5 AM (2)
May 30, 5-6 AM (11)
May 30, 6-7 AM (0)
May 30, 7-8 AM (2)
May 30, 8-9 AM (11)
May 30, 9-10 AM (13)
May 30, 10-11 AM (10)
May 30, 11-12 PM (5)
May 30, 12-1 PM (8)
May 30, 1-2 PM (5)
May 30, 2-3 PM (18)
May 30, 3-4 PM (5)
May 30, 4-5 PM (1)
May 30, 5-6 PM (9)
May 30, 6-7 PM (9)
May 30, 7-8 PM (1)
May 30, 8-9 PM (5)
May 30, 9-10 PM (4)
May 30, 10-11 PM (27)
May 30, 11-12 AM (12)
May 31, 12-1 AM (17)
May 31, 1-2 AM (0)
May 31, 2-3 AM (1)
May 31, 3-4 AM (1)
May 31, 4-5 AM (0)
May 31, 5-6 AM (0)
May 31, 6-7 AM (7)
May 31, 7-8 AM (4)
May 31, 8-9 AM (10)
May 31, 9-10 AM (3)
May 31, 10-11 AM (4)
May 31, 11-12 PM (4)
May 31, 12-1 PM (1)
May 31, 1-2 PM (2)
May 31, 2-3 PM (24)
May 31, 3-4 PM (16)
May 31, 4-5 PM (2)
May 31, 5-6 PM (1)
May 31, 6-7 PM (2)
May 31, 7-8 PM (2)
May 31, 8-9 PM (2)
May 31, 9-10 PM (7)
May 31, 10-11 PM (25)
May 31, 11-12 AM (11)
Jun 01, 12-1 AM (14)
Jun 01, 1-2 AM (7)
Jun 01, 2-3 AM (3)
Jun 01, 3-4 AM (10)
Jun 01, 4-5 AM (13)
Jun 01, 5-6 AM (16)
Jun 01, 6-7 AM (10)
Jun 01, 7-8 AM (14)
Jun 01, 8-9 AM (46)
Jun 01, 9-10 AM (50)
Jun 01, 10-11 AM (19)
Jun 01, 11-12 PM (27)
Jun 01, 12-1 PM (49)
Jun 01, 1-2 PM (40)
Jun 01, 2-3 PM (44)
Jun 01, 3-4 PM (34)
Jun 01, 4-5 PM (54)
Jun 01, 5-6 PM (5)
Jun 01, 6-7 PM (32)
Jun 01, 7-8 PM (37)
Jun 01, 8-9 PM (9)
Jun 01, 9-10 PM (12)
Jun 01, 10-11 PM (30)
Jun 01, 11-12 AM (22)
Jun 02, 12-1 AM (13)
Jun 02, 1-2 AM (8)
Jun 02, 2-3 AM (5)
Jun 02, 3-4 AM (14)
Jun 02, 4-5 AM (10)
Jun 02, 5-6 AM (43)
Jun 02, 6-7 AM (32)
Jun 02, 7-8 AM (58)
Jun 02, 8-9 AM (65)
Jun 02, 9-10 AM (28)
Jun 02, 10-11 AM (19)
Jun 02, 11-12 PM (15)
Jun 02, 12-1 PM (47)
Jun 02, 1-2 PM (66)
Jun 02, 2-3 PM (97)
Jun 02, 3-4 PM (23)
Jun 02, 4-5 PM (15)
Jun 02, 5-6 PM (27)
Jun 02, 6-7 PM (29)
Jun 02, 7-8 PM (17)
Jun 02, 8-9 PM (9)
Jun 02, 9-10 PM (19)
Jun 02, 10-11 PM (33)
Jun 02, 11-12 AM (22)
Jun 03, 12-1 AM (13)
Jun 03, 1-2 AM (31)
Jun 03, 2-3 AM (16)
Jun 03, 3-4 AM (0)
Jun 03, 4-5 AM (7)
Jun 03, 5-6 AM (12)
Jun 03, 6-7 AM (79)
Jun 03, 7-8 AM (10)
Jun 03, 8-9 AM (19)
Jun 03, 9-10 AM (16)
Jun 03, 10-11 AM (6)
3,626 commits this week May 27, 2026 - Jun 03, 2026
fix(tracing): remove illegal tracer namespaces from configs
The node rejected nine tracer namespaces with TracerConsistencyWarnings
"Illegal namespace" errors. Remove them from conway_fast, conway_slow,
and mainnet_fast template configs:

- ChainDB.LedgerEvent.Flavor.V1.OnDisk.BackingStoreEvent
- Mempool.LedgerFound, Mempool.LedgerNotFound
- Net.ErrorPolicy (+ .Local, .Remote)
- Net.Peers.List
- Net.Subscription.DNS, Net.Subscription.IP
v2: scope constraints to the depends closure, not the whole store
The build-time cabal.project pulled version pins from too many places:
a slice's whole `transitive-deps` closure (an over-broad bare `==<ver>`
pin added to cover test/bench components) plus build-tool `exe-depends`
lib closures.  When a boot library is reinstalled at the *same* version
(e.g. `text-2.1.4` boot `-inplace` vs a reinstalled `txt-2.1.4-<hash>`),
a bare `text ==2.1.4` pin can't disambiguate the two units, so cabal
splits lib deps between them and every dependent UnitId drifts
(`checkAgainstPlan` fails for js-template-haskell on ghcjs / wasm / the
profiled native variants).

Treat each dependency kind distinctly at build time:

  * depends      -> source (repo) + `<dep> ==<ver>, <dep> source`
  * setup-depends-> source (repo) + `<pkg>:setup.<dep> ==<ver>`
  * exe-depends  -> source only (no constraints)

Constraints now come only from the *complete* library-`depends` closure
(`dependsSlices` = directDepSlices ++ home library deps ++ the package's
own library for non-lib components) and per-package setup-constraints.
The `source` qualifier on every reinstalled lib forces cabal off the
GHC-bundled `-inplace` unit even when versions match.  Source + the six
per-package block groups keep riding the existing `transitive-deps`
closure (already free of pkgsBuildBuild tool slices after the previous
commit).

Removed: the blkFrags whole-closure version pin and the exe-depends
contribution to the constraints scope.  Skip the self pkg-name when
emitting extra-packages/constraints (its own library can now enter the
depends walk via `ownLibSlice`; also listing the local target as a repo
package triggers cabal's target-matcher ambiguity, Cabal-7130).

Verified green: native + ghcjs js-template-haskell.check and the
aarch64-android iserv-proxy-interpreter.
fix: raise default heap to 4g (2g OOMs at mainnet scale)
A full mainnet sync to tip (~317k handles, ~14.7M ada_handle_history_item
rows) exhausted the 2g heap with recurring OutOfMemoryError, wedging the
HTTP server while the indexer thread limped on. 4g runs comfortably
(steady-state heap ~650MB) and the REST API stays responsive at tip.

Surfaced by the mainnet full-sync integration-test harness.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
praos: heal non-contiguous candidate chains instead of looping on orphan
A passive follower could wedge permanently once at the live tip: after a
deep rollback the peer re-announces its chain, but our cached copy has a
gap (the peer fragment skipped a header, and that gap block was never
fetched because it never appeared in `missing` — it isn't in the
fragment).  `select_chain` then classified the strictly-better candidate
as a non-contiguous / fork-mismatch orphan, cleared the fragment, and
requested re-intersection — which the peer answers by rolling back to our
tip and re-announcing, looping ~1.4x/s with the tip frozen.

Primary fix (gap-fill): when a strictly-better candidate's cached chain
is non-contiguous, fetch the contiguous range [common ancestor ->
candidate tip] from the announcing peer instead of giving up.  A range
request needs only the two endpoints; the peer streams every intermediate
block, healing the gap so a later pass switches.  Genesis-rooted
ancestors still fall back to the orphan verdict (can't anchor a range at
Origin).

Secondary safety net (fork-tip prune): the periodic gap-bridge could also
fixate on an abandoned fork tip left far ahead in chain_tree after the
rollback — no connected peer offers it, so the bridge re-issued a peerless
(peer_count=0) no-op fetch forever.  `ChainTree::remove_fork_tip` drops
such an unreachable best_tip and recomputes best_tip; retry_select_chain
prunes rather than emit a peerless fetch.

Tests: select_chain_heals_noncontiguous_cached_candidate_via_range_fetch
and retry_prunes_unreachable_best_tip_instead_of_peerless_fetch (both
verified to fail without the respective change).  300 pass.

Co-Authored-By: Claude Opus 4.8 <[email protected]>