Jun 07, 1-2 PM (35)
Jun 07, 2-3 PM (2)
Jun 07, 3-4 PM (4)
Jun 07, 4-5 PM (2)
Jun 07, 5-6 PM (4)
Jun 07, 6-7 PM (0)
Jun 07, 7-8 PM (0)
Jun 07, 8-9 PM (17)
Jun 07, 9-10 PM (1)
Jun 07, 10-11 PM (21)
Jun 07, 11-12 AM (9)
Jun 08, 12-1 AM (9)
Jun 08, 1-2 AM (5)
Jun 08, 2-3 AM (3)
Jun 08, 3-4 AM (4)
Jun 08, 4-5 AM (2)
Jun 08, 5-6 AM (9)
Jun 08, 6-7 AM (5)
Jun 08, 7-8 AM (25)
Jun 08, 8-9 AM (36)
Jun 08, 9-10 AM (41)
Jun 08, 10-11 AM (24)
Jun 08, 11-12 PM (22)
Jun 08, 12-1 PM (40)
Jun 08, 1-2 PM (48)
Jun 08, 2-3 PM (33)
Jun 08, 3-4 PM (27)
Jun 08, 4-5 PM (12)
Jun 08, 5-6 PM (23)
Jun 08, 6-7 PM (14)
Jun 08, 7-8 PM (3)
Jun 08, 8-9 PM (6)
Jun 08, 9-10 PM (19)
Jun 08, 10-11 PM (29)
Jun 08, 11-12 AM (8)
Jun 09, 12-1 AM (5)
Jun 09, 1-2 AM (3)
Jun 09, 2-3 AM (1)
Jun 09, 3-4 AM (3)
Jun 09, 4-5 AM (26)
Jun 09, 5-6 AM (5)
Jun 09, 6-7 AM (23)
Jun 09, 7-8 AM (51)
Jun 09, 8-9 AM (35)
Jun 09, 9-10 AM (45)
Jun 09, 10-11 AM (51)
Jun 09, 11-12 PM (46)
Jun 09, 12-1 PM (86)
Jun 09, 1-2 PM (84)
Jun 09, 2-3 PM (36)
Jun 09, 3-4 PM (38)
Jun 09, 4-5 PM (16)
Jun 09, 5-6 PM (18)
Jun 09, 6-7 PM (18)
Jun 09, 7-8 PM (19)
Jun 09, 8-9 PM (16)
Jun 09, 9-10 PM (16)
Jun 09, 10-11 PM (28)
Jun 09, 11-12 AM (10)
Jun 10, 12-1 AM (11)
Jun 10, 1-2 AM (16)
Jun 10, 2-3 AM (11)
Jun 10, 3-4 AM (19)
Jun 10, 4-5 AM (5)
Jun 10, 5-6 AM (2)
Jun 10, 6-7 AM (46)
Jun 10, 7-8 AM (82)
Jun 10, 8-9 AM (18)
Jun 10, 9-10 AM (59)
Jun 10, 10-11 AM (46)
Jun 10, 11-12 PM (134)
Jun 10, 12-1 PM (49)
Jun 10, 1-2 PM (33)
Jun 10, 2-3 PM (32)
Jun 10, 3-4 PM (28)
Jun 10, 4-5 PM (36)
Jun 10, 5-6 PM (12)
Jun 10, 6-7 PM (12)
Jun 10, 7-8 PM (38)
Jun 10, 8-9 PM (11)
Jun 10, 9-10 PM (10)
Jun 10, 10-11 PM (20)
Jun 10, 11-12 AM (7)
Jun 11, 12-1 AM (10)
Jun 11, 1-2 AM (2)
Jun 11, 2-3 AM (0)
Jun 11, 3-4 AM (2)
Jun 11, 4-5 AM (8)
Jun 11, 5-6 AM (12)
Jun 11, 6-7 AM (34)
Jun 11, 7-8 AM (106)
Jun 11, 8-9 AM (36)
Jun 11, 9-10 AM (20)
Jun 11, 10-11 AM (105)
Jun 11, 11-12 PM (25)
Jun 11, 12-1 PM (38)
Jun 11, 1-2 PM (37)
Jun 11, 2-3 PM (14)
Jun 11, 3-4 PM (20)
Jun 11, 4-5 PM (5)
Jun 11, 5-6 PM (7)
Jun 11, 6-7 PM (26)
Jun 11, 7-8 PM (90)
Jun 11, 8-9 PM (11)
Jun 11, 9-10 PM (5)
Jun 11, 10-11 PM (25)
Jun 11, 11-12 AM (5)
Jun 12, 12-1 AM (8)
Jun 12, 1-2 AM (2)
Jun 12, 2-3 AM (2)
Jun 12, 3-4 AM (4)
Jun 12, 4-5 AM (7)
Jun 12, 5-6 AM (15)
Jun 12, 6-7 AM (46)
Jun 12, 7-8 AM (19)
Jun 12, 8-9 AM (28)
Jun 12, 9-10 AM (22)
Jun 12, 10-11 AM (29)
Jun 12, 11-12 PM (42)
Jun 12, 12-1 PM (24)
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 (7)
Jun 13, 3-4 PM (0)
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 (0)
3,294 commits this week Jun 07, 2026 - Jun 14, 2026
feat(governance): proposal cards with DB-cached live vote tallies + current-vote UX
Redesign the proposals list into cards (replacing the desktop table) and surface
the "current voting state" two ways, per the requested mockup:

1. Live Yes/No/Abstain tally bar per proposal.
   - Blockfrost exposes no aggregate and no voting power, so the tally is counted
     by distinct voter (each voter's latest vote) from the proposal votes feed,
     labeled "by votes" — not stake-weighted.
   - Cached in the DB (new ProposalTally model) via a read-through tRPC router
     (governance.getProposalTallies / refreshProposalTally). The list reads the
     cache; refreshes are driven by user activity (on load when stale/missing,
     and on expand). A 10-min TTL guards both client and server so redundant
     activity doesn't re-hit Blockfrost.

2. The wallet's own vote as a "Voted Yes/No/Abstain" pill next to the type chip.

Also refines VoteButton: the segmented control no longer pre-selects Abstain
(it starts unselected and adopts the on-chain vote when known), the primary
button is disabled until a choice is made and its label reflects intent
(Vote / Change to / Re-submit, + Proxy), and vote()/voteProxy() guard against an
empty selection.

Backend: ProposalTally model + migration; governanceRouter registered in root.

NOTE: requires `prisma migrate deploy` (creates "ProposalTally") before the
tally router works in production.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
docs(v2): add Examples showcase section
Surface the ready-to-run configs under examples/ in the v2 docs. Adds a
new Examples section with a how-to-run intro (run from the example dir),
a companion-files/setup guide, categorized index tables linking each
example to GitHub with a Setup column, and three inlined end-to-end
recipes. Cross-linked from the introduction page.

Excludes examples/pool_metadata (references the removed Deno filter) and
examples/_deprecated.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
refactor(oura): split submodule into per-version sources
Replace the single oura submodule (pinned to v3) with three submodules,
one per version, so each version's docs can track an independent
upstream branch without one branch needing to bundle the others.

- oura-v1 and oura-v2 track main (where docs/v1 and docs/v2 currently
  live); can be repointed to lts/v1 once it carries a docs/v1 source.
- oura-v3 tracks v3.
- src/content/docs/oura/{v1,v2,v3} now symlink into their respective
  submodule's docs/vN/ folder.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
docs(v2): address CodeRabbit review feedback
All three findings verified against the implementation:

- sql_db: `record` is `null` on reset events (hbs_data renders the reset
  template with record=None -> null), not omitted.
- zeromq: clarify that events without a record (resets) are skipped and
  not published (zeromq.rs returns early when record.is_none()).
- docker: reword the tags intro; only `sha-*` is per-build, while
  `latest`/`stable`/semver tags are gated by branch/tag triggers.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
docs(v2): route finalization through WorkStats filter, drop dead top-level [finalize]
The top-level [finalize] block is not wired to the runtime (ConfigRoot.finalize /
Context.finalize is deserialized but never consumed). The WorkStats filter is the
only working finalization mechanism, so document it as such. Follow-up to remove the
dead config tracked in #938.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
flake.lock: Update
Flake lock file updates:

• Updated input 'CHaP':
    'github:input-output-hk/cardano-haskell-packages/bc93f1caabfdc4d38c5b44e6eea8f5b8f535775a?narHash=sha256-3YDsDhjAcm5QatdluTKuQ9WeDdwrxZMnKH587pVyv9o%3D' (2026-06-02)
  → 'github:input-output-hk/cardano-haskell-packages/0aa7afd943dbcf2dc51fe652c982da281f8cb621?narHash=sha256-lipiKNOJ/NIGO/pcwQT030%2BsSgbTkP3N0w/ck5jBJlw%3D' (2026-06-10)
• Updated input 'haskell-nix':
    'github:input-output-hk/haskell.nix/08b27295bfecb9e057eda635f676733b461bec64?narHash=sha256-ujViTkgO8rGoTRLSZxgWnPkciw%2BTGzBIVsL81KcRjz4%3D' (2026-06-07)
  → 'github:input-output-hk/haskell.nix/6c5002f0ff6c9ace7912f631037062b34217dfc4?narHash=sha256-qao/Z/C9VkPfReFAPMZdFJYfHT9wnXTAlU6sBDdLtss%3D' (2026-06-14)
• Updated input 'haskell-nix/hackage':
    'github:input-output-hk/hackage.nix/986511a754b71eeab27e5c61843b01f8f7d0bdd7?narHash=sha256-Vm3brZrmc%2BzcJCndzr0nmQZ%2BpskgbnZcOVxVIzfe/zo%3D' (2026-06-07)
  → 'github:input-output-hk/hackage.nix/47bf40dc8656dde45659f2cacf5a57b1316f6904?narHash=sha256-cvS8/no4kVkNQhtmCRnAWLCn1C%2B5VvCvwMDyvE3QtJ4%3D' (2026-06-14)
• Updated input 'haskell-nix/hackage-for-stackage':
    'github:input-output-hk/hackage.nix/4b4a5d5c7fe95e6e2e857e19a9380edd599eba08?narHash=sha256-Mqw%2Bw/IkQCKQ%2BoOUJdNccAPsZz/AJR6WlDrotVr%2B%2Bxc%3D' (2026-06-07)
  → 'github:input-output-hk/hackage.nix/caf95ada373db6002b152de311e10654a97b3ba7?narHash=sha256-bbFORKtmhvknFvPpSBwuDFQUW3j/vqgLjMe4X8xjDpY%3D' (2026-06-14)
• Updated input 'haskell-nix/stackage':
    'github:input-output-hk/stackage.nix/4c667204ecf3973b72a3f482572864fffcdabb25?narHash=sha256-Le3RUWp3CrAdH%2BXgXCBvxGqmosCgC9I/yQPhpC2PFdA%3D' (2026-06-07)
  → 'github:input-output-hk/stackage.nix/196744650c154c553c925bcbc5033b5b9548e248?narHash=sha256-mQs4Xo%2Bj9RzlcRHyb3KqVFK6RBAc6t7esSMAtMOLsB4%3D' (2026-06-14)
• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/ca14f513f38c08235d72944890596a4ddbbe76f0?narHash=sha256-qS0lSxHzqqq%2B7wuIC85QgqlAt76H4bBjxv63gOEziC4%3D' (2026-06-07)
  → 'github:NixOS/nixpkgs/86ab56c5680e27f7536d666f11620122f81b87a6?narHash=sha256-gMSeTjmluyNTrPehc77NR7oyTaG43GX9cAo2E8%2B9ig8%3D' (2026-06-14)
docs(v2): document the full set of published docker tags
The docker install reference only mentioned `latest` plus a single
pre-release versioned example. The Docker CI workflow
(.github/workflows/docker.yml) actually publishes: latest (main tip),
stable (newest release), v{major}, v{major}.{minor}, v{version}, and
sha-{commit}.

- add a table covering every published tag and when it updates
- clarify that `latest` tracks `main`, not the latest release
- use the v2.1.0 release (not a pre-release) as the pin example

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
docs(v2): align v2 docs with actual implementation
Audit of docs/v2 against src/ surfaced several config-breaking
inaccuracies, missing components, and stale field lists. All claims
verified directly against the config structs/enums (serde `tag = "type"`,
no `rename_all`, so type tags must match variant names verbatim).

Config-breaking fixes:
- webhook: type "Webhook" -> "WebHook"; drop nonexistent error_policy
- elasticsearch: type "Elastic" -> "ElasticSearch"
- gcp_cloudfunction: authorization (string) -> authentication (bool)
- pipeline_metrics: drop nonexistent `endpoint` field
- stateful_cursor: Memory is the default; File default path is
  ./cursor.json; document max_breadcrumbs/flush_interval and Redis backend

Newly documented components:
- sinks: SqlDb, Zeromq
- filters: IntoJson, WorkStats

Backfilled fields:
- kafka: ack_timeout_secs, paritioning
- redis sink: correct default (oura-sink), add stream_max_length
- terminal: adahandle_policy
- finalize: max_block_quantity

Data dictionary:
- document the v2-native pipeline data model (ChainEvent envelope and
  Record variants) alongside the legacy v1 event catalogue

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
deps: override npm to ^11 to clear bundled brace-expansion ReDoS
The last open Dependabot alert (brace-expansion <=2.0.1, GHSA-v6h2-p8h4-qcjw,
ReDoS) was a copy bundled inside [email protected], which @cardano-sdk/crypto pulls in
via `npm@^9.3.0`. That npm dependency is spurious — @cardano-sdk/crypto declares
it but never imports it in its compiled code — so it only drags in npm's vendored
dependency tree (including the vulnerable brace-expansion and the noise behind
`npm audit`'s large count).

A `brace-expansion` override can't fix this: npm overrides don't reach into a
bundled package's vendored node_modules, and a blanket brace-expansion override
instead downgrades the legitimate [email protected] that glob@11 / minimatch@10
require (named `expand` export), breaking glob.

Override `npm` to ^11 instead (resolves to 11.17.0), whose bundle ships the
patched [email protected]. Net effect:
- zero vulnerable brace-expansion instances remain in the tree
- glob / minimatch still resolve and brace-expand correctly
- safe because @cardano-sdk/crypto never executes npm

The lockfile was regenerated with npm 10.9.3 (matching CI's node:22-slim, not the
local npm 11) via `npm install --package-lock-only`, so it stays in sync for the
`npm ci` CI runs — npm 11 drops @auth/core's optional @simplewebauthn entries that
npm 10 keeps, which made `npm ci` fail. Churn is limited to the npm subtree.

The other 14 Dependabot alerts were already remediated in the committed lockfile
(next@16, [email protected], [email protected], ip/tar-fs absent, etc.) and dismissed.

Verified: `npm ci` (npm 10.9.3) succeeds; tsc --noEmit clean; next build --webpack succeeds.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
chore(deps): bump esbuild, @vitejs/plugin-react and vite
Removes [esbuild](https://github.com/evanw/esbuild). It's no longer used after updating ancestor dependencies [esbuild](https://github.com/evanw/esbuild), [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) and [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite). These dependencies need to be updated together.


Removes `esbuild`

Updates `@vitejs/plugin-react` from 5.1.4 to 5.2.0
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/[email protected]/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/[email protected]/packages/plugin-react)

Updates `vite` from 7.3.2 to 8.0.16
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.0.16/packages/vite)

---
updated-dependencies:
- dependency-name: esbuild
  dependency-version:
  dependency-type: indirect
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 5.2.0
  dependency-type: direct:development
- dependency-name: vite
  dependency-version: 8.0.16
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>
chore(nix): update `flake.lock`
Flake lock file updates:

• Updated input 'advisory-db':
    'github:rustsec/advisory-db/eaf48e7' (2026-05-29)
  → 'github:rustsec/advisory-db/09735e1' (2026-06-13)
• Updated input 'blockfrost-tests':
    'github:blockfrost/blockfrost-tests/e1f3b72' (2026-06-03)
  → 'github:blockfrost/blockfrost-tests/2a9b647' (2026-06-08)
• Updated input 'crane':
    'github:ipetkov/crane/0532eb1' (2026-05-30)
  → 'github:ipetkov/crane/59a82a1' (2026-06-04)
• Updated input 'fenix':
    'github:nix-community/fenix/2118601' (2026-05-30)
  → 'github:nix-community/fenix/aad7d8b' (2026-06-13)
• Updated input 'fenix/rust-analyzer-src':
    'github:rust-lang/rust-analyzer/5ebf65c' (2026-05-29)
  → 'github:rust-lang/rust-analyzer/3f92cd1' (2026-06-12)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/25f5383' (2026-05-26)
  → 'github:nixos/nixpkgs/e820eb4' (2026-06-08)
• Updated input 'treefmt-nix':
    'github:numtide/treefmt-nix/790751f' (2026-04-08)
  → 'github:numtide/treefmt-nix/db94781' (2026-05-31)