[WIP] Fix init of perasEpochContextResolver
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 (44)
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 (18)
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 (80)
Jun 03, 7-8 AM (15)
Jun 03, 8-9 AM (24)
Jun 03, 9-10 AM (22)
Jun 03, 10-11 AM (39)
Jun 03, 11-12 PM (76)
Jun 03, 12-1 PM (93)
Jun 03, 1-2 PM (28)
Jun 03, 2-3 PM (62)
Jun 03, 3-4 PM (26)
Jun 03, 4-5 PM (24)
Jun 03, 5-6 PM (22)
Jun 03, 6-7 PM (15)
Jun 03, 7-8 PM (17)
Jun 03, 8-9 PM (16)
Jun 03, 9-10 PM (8)
Jun 03, 10-11 PM (31)
Jun 03, 11-12 AM (14)
Jun 04, 12-1 AM (12)
Jun 04, 1-2 AM (4)
Jun 04, 2-3 AM (1)
Jun 04, 3-4 AM (3)
Jun 04, 4-5 AM (1)
Jun 04, 5-6 AM (0)
Jun 04, 6-7 AM (13)
Jun 04, 7-8 AM (0)
3,656 commits this week
May 28, 2026
-
Jun 04, 2026
chore: update translation progress from Crowdin [skip ci]
ResolveLeiosBlock when reapplying blocks from immutableDB
This code path was forgotten and only the volatileDB / forker call site of applyBlock had the resolution of CertRB -> EB transactions.
fix: map Crowdin es-ES locale to es in progress fetch
feat: show word and phrase counts per language on translations page
Merge branch 'master' into unify-membership-checks
feat(common): add SNARK-friendly genesis primitives (Schnorr over Jubjub)
feat(common): add genesis key bundles pairing Ed25519 and Schnorr keys
feat(common): add 'GenesisVerifier' wrapping the Ed25519 and Schnorr genesis verifiers
feat(common): add 'GenesisSigner' wrapping the Ed25519 and Schnorr genesis signers
Run top-level test groups concurrently
The DB integration test suite now runs the groups concurrently: * Alonzo-era * Babbage-era * Conway-era * QSM (QuickCheck State Machine) Concurrent tests cannot share a database, so each group has its own copy. Grouping at the top level keeps the databases/threads manageable. Also, add the required databases in the nix `preCheck` hook and GitHub CI workflows.
Run top-level test groups concurrently
The DB integration test suite now runs the groups concurrently: * Alonzo-era * Babbage-era * Conway-era * QSM (QuickCheck State Machine) Concurrent tests cannot share a database, so each group has its own copy. Grouping at the top level keeps the databases/threads manageable. Also, add the required databases in the nix `preCheck` hook and GitHub CI workflows.
test(internal/config): cover defaults/env/YAML/precedence + harden SaveAtomic
Adds tests for internal/config covering defaults, env-var loading, YAML loading and precedence, plus reliability hardening of SaveAtomic (F_FULLFSYNC on darwin, explicit enc.Close, per-path mutex via sync.Map, unique tmp via os.CreateTemp, fsynced parent dir, new SaveAtomicCtx wrapper for cancellation). Fixes a precedence bug where envconfig.Process ran after yaml.Unmarshal so env silently overrode YAML; the order is now env-first / YAML-last per the documented CLI > YAML > env precedence. BREAKING: deployments that today set an env var to override a YAML key will see the YAML value win after this change. Closes #708 Signed-off-by: Ales Verbic <[email protected]>
add ghcXX-minimal-ghc-web flavor: wasm + JS backend dev tooling
The wasm and JavaScript backends need a small set of dev-time tools
that aren't part of a stock Haskell shell:
* nodejs_22 — required for utils/jsffi/post-link.mjs (uses
import.meta.filename added in Node 20.11; Ubuntu's
apt nodejs is 18.x and silently breaks the post-link
step) and for JSFFI host execution at test time
* wabt — wasm-objdump for inspecting custom sections (e.g.
detecting ghc_wasm_jsffi imports) in wasm modules
* wasmtime — pure-WASI runtime, when a wasm module has no JSFFI
imports and can run standalone
* emscripten — the JavaScript backend's C toolchain (emcc / em++ /
emar / emnm / emranlib / emstrip)
Currently downstream consumers (e.g. stable-haskell/ghc's wasm
cross-compiler CI) bootstrap these per-platform via apt + NodeSource +
nix-env + curl installers, plus PATH workarounds for devx scrubbing
/usr/bin. Shipping them in the flavor collapses ~70 lines of
platform-shell to one `shell:` line in user workflows.
Deliberately NOT bundled: wasi-sdk. Its version needs to match the
wasm32-wasi-ghc cross-compiler bundle that ghc-wasm-meta
(https://gitlab.haskell.org/ghc/ghc-wasm-meta) owns, so keeping that
pin in ghc-wasm-meta avoids version drift across two trees. Users
still bootstrap wasi-sdk via ghc-wasm-meta for wasm32-wasi builds.
Closure cost on aarch64-darwin (paired with the prior trim commit):
ghc98-minimal-ghc (current master) : 6.12 GB
ghc98-minimal-ghc (after trim PR) : 4.00 GB (-2.12 GB)
ghc98-minimal-ghc-web (this commit) : 5.99 GB (+1.99 GB)
Net: the web flavor with the full toolchain ends up SMALLER than the
current untrimmed minimal-ghc, because the trim commit removed
ghc-9.10.3 and emscripten's LLVM/apple-sdk now dedupes against the
shell's base nixpkgs pin (no version fragmentation).
Comfortably under the 10 GB GitHub Actions per-repo cache cap on
both Darwin and Linux (Linux delta is similar magnitude — emscripten
+ closure-compiler are the heavy hitters on both).
Verified inside the patched shell:
$ ghc --version # 9.8.4
$ cabal --version # 3.17.0.0
$ happy --version # 2.1.7
$ alex --version # 3.5.4.0
$ git --version # 2.51.2 (gitMinimal)
$ node --version # v22.21.1
$ wasm-objdump --version # 1.0.37
$ wasmtime --version # 38.0.3
$ emcc --version # 4.0.12-git
All on the expected store paths.
trim -minimal-ghc closure: build happy/alex with the shell's GHC
The `withGHCTooling` block in dynamic.nix sourced `happy` and `alex` from nixpkgs's `pkgs.haskellPackages`, which builds them with a different GHC than the shell's `compiler` (currently ghc-9.10.3 in nixpkgs vs ghc-9.8.4 in our shell). The Haskell library outputs of both packages live under `lib/ghc-<other-ver>/lib/*.dylib`; their .dylib path strings anchor the foreign GHC in the closure via Nix's reference scanner. On aarch64-darwin this dragged in ghc-9.10.3 (1.40 GB) and ghc-9.10.3-doc (753 MB) — ~2.15 GB of essentially-unused payload. Switch to haskell.nix's `tool` builder (same pattern as cross-js.nix and cross-windows.nix), which builds happy/alex with the shell's `compiler-nix-name`. The resulting library outputs reference the GHC that's already in the closure rather than dragging in a second one. While here: * swap `git` → `gitMinimal` — drops the heavyweight perl-modules and git-doc that aren't useful inside the dev shell (~150 MB cascade). * tool-map.nix: drop `inherit cabalProjectLocal` from happy/alex. They're standard mainline packages and build cleanly from regular hackage; the inherited cabalProjectLocal pinned a head.hackage SHA that was stale and broke fresh evaluations of `(tool "happy")` / `(tool "alex")`. While there, bump happy 1.20.1.1 → 2.1.7 and alex 3.2.7.3 → 3.5.4.0 to match what nixpkgs.haskellPackages was shipping previously, so users see no behavioural change. Measured on aarch64-darwin (ghc98-minimal-ghc): before: 6.12 GB / 228 paths after : 4.00 GB / 196 paths saved : 2.12 GB (34.7% smaller) Top removed paths: ghc-9.10.3 1399 MB ghc-9.10.3-doc 753 MB git-2.51.2 49 MB git-2.51.2-doc 15 MB perl5.40.0-SSLeay/Mozilla/IO-Socket-SSL (gitMinimal cascade) Verified inside the patched shell: $ ghc --version # 9.8.4 $ cabal --version # 3.17.0.0 $ happy --version # 2.1.7 (same as before) $ alex --version # 3.5.4.0 (same as before) $ git --version # 2.51.2
docs: leios historical doc update for 1d epoch and fast-faketime-at
call-cabal-project-to-nix test: link android exe statically
This test builds cabal-simple via the low-level callCabalProjectToNix /
mkCabalProjectPkgSet path with a minimal modules list, so it doesn't
pull in modules/cabal-project.nix's config — in particular the android
default that adds `package * ghc-options: -optl-static -optl-ldl` so the
exe links statically. A dynamically-linked Android binary references
/system/bin/linker64 at runtime, which qemu-user can't open on the build
host, so the v2 run-check (which executes the built exe) failed with
`qemu-aarch64: Could not open '/system/bin/linker64'`. (v1 only passed
because lib/check.nix re-overrides the *check* exe with
setupBuildFlags = -optl-static; v2 runs the pre-built slice exe, so it
needs the flag at the project level.)
Replicate modules/cabal-project.nix's android default in the test, for
both the plan (callCabalProjectToNix) and the build (modules), so the
exe is statically linked and runnable under qemu-user.
Verified: aarch64-android-prebuilt callCabalProjectToNix.run now runs
the exe ('Hello, Haskell!') under v2.
Merge remote-tracking branch 'origin/staging' into apps/pyth
# Conflicts: # src/data/apps.js
Explicitly thread the `PGConfig` to all tests
Prerequisite for running tests concurrently. All DB tests share the same database, so we can read the from the `PGPASSFILE` environment variable. When we run them in parallel, this won't be possible, since each running test will need its own database. Instead, explicitly pass the `PGConfig` to all tests, which will allow different database configs per test run.