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 (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 (15)
Jun 03, 9-10 PM (1)
3,738 commits this week May 27, 2026 - Jun 03, 2026
feat(tray/notifications): multi-target monitoring engine + dispatch wizard
Adds a fyne-free notifications engine that derives one rule per (kind,
param) from a multi-target SetupPlan (Wallets/DReps/Pools/
MonitorEverything) and emits Requests through a tumbling-window rate
limiter; connection alerts bypass it (not wired to notification system except tests).
The wizard gains three editable target sections with cross-template validation hints, overwrites
notify_prefs on Apply, and no longer blocks finishing on the macOS
test notification. Removes tray/adder_config.go (dead code — only its
own tests called it; the live SetupPlan→YAML path is
setup/codec.go::ToEngineConfig).

Implements #685

Signed-off-by: Ales Verbic <[email protected]>
test(backfill): benchmark fixed-shape utxo writer vs GORM
Add a head-to-head ImportUtxos benchmark (fixed-shape vs the prior GORM
CreateInBatches path) on the heaviest flush table, complementing the existing
key_witness pair. With -benchmem the fixed-shape writers cut allocations
~3.5-4.8x (e.g. key_witness 3.6k vs 17.4k allocs/op; utxo 3.8k vs 13.4k) and
wall-clock by ~7-32% depending on row width.

Phase 5 of #2458.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Chris Guiney <[email protected]>
perf(backfill): per-tx transaction upsert via INSERT...RETURNING id
Replace the GORM upsert + conditional follow-up SELECT in
SetTransactionBatched with a fixed-shape INSERT ... ON CONFLICT(hash) DO
NOTHING RETURNING id. A returned id is a fresh insert (the common path, now one
statement). On conflict the row exists (a retry): preserve the prior DO UPDATE
on block_hash/block_index/slot, refetch the id, and keep needsIdFetch so stale
child rows are deleted before re-insert. transactionCols is pinned by the
schema-guard test; the #2459 two-pass test covers the retry path.

Phase 4 of #2458.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Chris Guiney <[email protected]>
cabal-sublib-shell test: source the real v2 shellHook
The test replayed individual shellHook steps (cabal-store-sync,
project-local-sync) but skipped the rest of the hook — notably the
EM_CACHE setup the ghcjs shell provides.  So `cabal build` of the
ghcjs consumer failed in the test with
`emcc: cache directory "/tmp/_cache" is not writable` even though a
real shell works.

Source `env.shellHook` from the project dir instead.  The hook is
written to be sourced (it uses `return`); sourcing it seeds the
cabal-store, writes `cabal.project.<prefix>local`, and sets a writable
EM_CACHE — exactly what a user gets on shell entry — so the test now
faithfully exercises the v2 shell.  No shell-for-v2 change needed (the
shell already sets EM_CACHE).

Verified: ghcjs ghc984 cabal-sublib-shell.run builds the consumer
.jsexe and reuses the shell's provider lib + slib sublib (no rebuild).
perf(backfill): batchSpendUtxos uses a stable per-row UPDATE
Replace the per-chunk dynamic CASE UPDATE (whose SQL shape changed with
the chunk, preventing prepared-statement reuse) with a single stable per-row
UPDATE executed on the raw conn pool and reused via PrepareStmt. The
deleted_slot = 0 guard is kept, so re-applying a spend on an already-spent row
is a no-op (resumed backfill and the #2459 create-before-spend ordering rely on
this). Adds a guard test; TestFlushBatch_MultipleSpends now covers the per-row
path.

Phase 3 of #2458.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Chris Guiney <[email protected]>
chore(deps): Bump github.com/quic-go/quic-go from 0.59.0 to 0.59.1
Bumps [github.com/quic-go/quic-go](https://github.com/quic-go/quic-go) from 0.59.0 to 0.59.1.
- [Release notes](https://github.com/quic-go/quic-go/releases)
- [Commits](https://github.com/quic-go/quic-go/compare/v0.59.0...v0.59.1)

---
updated-dependencies:
- dependency-name: github.com/quic-go/quic-go
  dependency-version: 0.59.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
build(deps): Bump github.com/quic-go/quic-go from 0.59.0 to 0.59.1
Bumps [github.com/quic-go/quic-go](https://github.com/quic-go/quic-go) from 0.59.0 to 0.59.1.
- [Release notes](https://github.com/quic-go/quic-go/releases)
- [Commits](https://github.com/quic-go/quic-go/compare/v0.59.0...v0.59.1)

---
updated-dependencies:
- dependency-name: github.com/quic-go/quic-go
  dependency-version: 0.59.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
build(deps): bump github.com/quic-go/quic-go from 0.57.0 to 0.59.1
Bumps [github.com/quic-go/quic-go](https://github.com/quic-go/quic-go) from 0.57.0 to 0.59.1.
- [Release notes](https://github.com/quic-go/quic-go/releases)
- [Commits](https://github.com/quic-go/quic-go/compare/v0.57.0...v0.59.1)

---
updated-dependencies:
- dependency-name: github.com/quic-go/quic-go
  dependency-version: 0.59.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
perf(backfill): fixed-shape SQL for importUtxosWithDB utxo/asset inserts
Replace the two GORM CreateInBatches loops in importUtxosWithDB with stable
multi-row INSERTs on the raw conn pool, keeping the ON CONFLICT DO NOTHING
targets. execRawOnConn now returns rows-affected, preserving the
hydration-candidate detection. A raw INSERT does not write back autoincrement
IDs, but BatchRefetchUtxoIDs already recovers them by (tx_id, output_idx) for
asset linking; asset-stripping and provenance hydration are unchanged.
types.Uint64's Valuer (decimal string) keeps amount storage byte-identical.
Adds a round-trip test (catches column-order drift) and a conflict-idempotency
test, and extends the schema-guard test to utxo/asset.

Phase 2 of #2458.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Chris Guiney <[email protected]>
Fix publish-docs by copying build/ output into nix derivation result (#2634)
I noticed the Publish Docs workflow has been failing on master lately.

The error is:

```bash
 cp: cannot stat 'result/build/*': No such file or directory
 ```
 The workflow does `nix build .#docs-unstable` and then `cp result/build/* $out -r`. The nix build succeeds but `result/build/` doesn't exist.
 
The workflow gets its output by running `yarn pack` to create tarball, then extracting it to `$out`.
Yarn respects `.gitignore` and `docs/.gitignore` lists exactly our `/build` folder.

This was not an issue before because the derivation was previously served from Cachix. The cache was invalidated by the `docs.nix` refactor in #2609 , which forced a fresh rebuild that exposed the issue.

The fix adds a `postInstall` hook that copies `build/` from the nix build sandbox directly into `$out/build/`.

<!-- Describe your change here -->

---

<!-- Consider each and tick it off one way or the other -->
* [ ] CHANGELOG updated or not needed
* [ ] Documentation updated or not needed
* [ ] Haddocks updated or not needed
* [ ] No new TODOs introduced or explained herafter
perf(backfill): fixed-shape SQL for FlushBatch child-table writers
Replace GORM CreateInBatches for key_witness, witness_scripts, script,
plutus_data, redeemer, and address_transaction with stable multi-row INSERTs
executed on the transaction's raw conn pool (db.Statement.ConnPool), which
avoids GORM's per-call model reflection and its []byte arg expansion while
still using the write pool's PrepareStmt cache. Conflict semantics are kept
(scripts: ON CONFLICT(hash) DO NOTHING; delete-first retry for the rest). A
schema-guard test pins the column lists to the migrated schema. ~32%% faster
than CreateInBatches for 1000 key_witness rows.

Phase 1 of #2458.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Chris Guiney <[email protected]>