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 (14)
Jun 04, 7-8 AM (7)
Jun 04, 8-9 AM (10)
Jun 04, 9-10 AM (9)
Jun 04, 10-11 AM (1)
3,491 commits this week May 28, 2026 - Jun 04, 2026
fix: coalesce expiry_threshold MAX to avoid NULL three-valued logic
If the boundary epoch has no blocks, MAX(tx.id) returns NULL and the
`expired` predicate evaluates to NULL instead of FALSE, which silently
drops every row from BOTH `expired=true` and `expired=false` filter
results. COALESCE to 0 so the predicate is always a real boolean and
the "fails open" comment in the file is actually true.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
feat: extend /governance/dreps with status, voting power, metadata + new query params
Augments the paginated /governance/dreps response so wallets can render and rank
DReps without a follow-up call per row. Each DRep now also returns has_script,
amount, retired, expired, last_active_epoch, and an embedded metadata object
matching the shape of /dreps/{drep_id}/metadata. Deprecated fields (active,
active_epoch) are intentionally omitted from this enriched response.

New query parameters:
- order_by=amount  (in addition to existing order=asc|desc)
- retired=true|false
- expired=true|false

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
cardano-node: discard local JSON instances; restore original output and
config parsing

Replace locally-defined orphan `ToJSON`/`FromJSON` instances that
already exist in `Cardano.Network.OrphanInstances` (from the
`cardano-diffusion:orphan-instances` sublibrary) with imports of that
module:

- `TopologyP2P`: remove `FromJSON/ToJSON PeerTrustable`,
  `FromJSON/ToJSON (NetworkTopology UseBootstrapPeers PeerTrustable)`,
  and `FromJSON UseBootstrapPeers`; add `Cardano.Network.OrphanInstances ()`
  and `Ouroboros.Network.OrphanInstances ()` imports.

- `StateRep`: remove local `ToJSON/FromJSON NodeToNodeVersion`,
  `ToJSON/FromJSON NodeToClientVersion`, and `parseBoundedEnum`; add
  `Cardano.Network.OrphanInstances ()` import.

- `Tracers`: remove Show-based `ToJSON NodeToNodeVersionData` and
  `ToJSON NodeToClientVersionData` stubs; add
  `Cardano.Network.OrphanInstances ()` import.

Additionally fix two pre-existing issues in `Consensus.hs`:

- `deltaq`: use `toJSON gsv` (structured JSON via
  `Ouroboros.Network.OrphanInstances`) instead of `String . show`.

- `TraceDecisionEvent`: restore the `dtal >= DMaximum` conditional
  branch (replacing the reversed fold), using `forMachine DMaximum`
  for the verbose case.

In `Startup.hs`, fix `ConsensusNetworkVersionTuple` to emit proper
structured JSON for `nodeToClientVersion`/`nodeToNodeVersion` via
`ToJSON` from `Cardano.Network.OrphanInstances`, and fix the
`maxNodeToNode/ClientVersion` field to show only the version key
rather than the full `(key, value)` pair.
build(deps): bump protobufjs in /bench/grafana-datasource
Bumps [protobufjs](https://github.com/protobufjs/protobuf.js) from 7.5.6 to 7.6.2.
- [Release notes](https://github.com/protobufjs/protobuf.js/releases)
- [Changelog](https://github.com/protobufjs/protobuf.js/blob/protobufjs-v7.6.2/CHANGELOG.md)
- [Commits](https://github.com/protobufjs/protobuf.js/compare/protobufjs-v7.5.6...protobufjs-v7.6.2)

---
updated-dependencies:
- dependency-name: protobufjs
  dependency-version: 7.6.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
feat: enrich /governance/dreps with voting power, status, metadata + filter/sort params
Embeds the per-DRep fields previously requiring N+1 calls to /dreps/{id} and
/dreps/{id}/metadata into the paginated /dreps response: amount, has_script,
retired, expired, last_active_epoch, and the off-chain metadata object.

Adds query params:
- order_by=amount  (in addition to existing order=asc|desc)
- retired=true|false
- expired=true|false

Routes to a separate SQL path when retired/expired filters are present, since
filtering on computed fields requires full-table aggregation; the unfiltered
path keeps its page-first plan and stays fast.

Depends on a future @blockfrost/openapi release exposing the new schema and
query params.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Enable searching the documentation website (#2059)
Adds local, build-time search via @easyops-cn/docusaurus-search-local.
The search index is generated as static assets at build time, so it
needs no external service.

Search is only available in production builds (yarn build && yarn
serve), not in yarn start.

<img width="1404" height="776" alt="Peek 2026-06-03 11-26"
src="https://github.com/user-attachments/assets/a264ba2f-8970-4282-8cae-35988a060249"
/>