Jun 13, 1-2 PM (21)
Jun 13, 2-3 PM (8)
Jun 13, 3-4 PM (1)
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 (4)
Jun 14, 2-3 PM (8)
Jun 14, 3-4 PM (2)
Jun 14, 4-5 PM (1)
Jun 14, 5-6 PM (1)
Jun 14, 6-7 PM (0)
Jun 14, 7-8 PM (11)
Jun 14, 8-9 PM (1)
Jun 14, 9-10 PM (13)
Jun 14, 10-11 PM (29)
Jun 14, 11-12 AM (23)
Jun 15, 12-1 AM (8)
Jun 15, 1-2 AM (10)
Jun 15, 2-3 AM (4)
Jun 15, 3-4 AM (4)
Jun 15, 4-5 AM (1)
Jun 15, 5-6 AM (4)
Jun 15, 6-7 AM (6)
Jun 15, 7-8 AM (41)
Jun 15, 8-9 AM (26)
Jun 15, 9-10 AM (11)
Jun 15, 10-11 AM (35)
Jun 15, 11-12 PM (25)
Jun 15, 12-1 PM (40)
Jun 15, 1-2 PM (26)
Jun 15, 2-3 PM (21)
Jun 15, 3-4 PM (24)
Jun 15, 4-5 PM (21)
Jun 15, 5-6 PM (13)
Jun 15, 6-7 PM (13)
Jun 15, 7-8 PM (7)
Jun 15, 8-9 PM (26)
Jun 15, 9-10 PM (20)
Jun 15, 10-11 PM (22)
Jun 15, 11-12 AM (39)
Jun 16, 12-1 AM (11)
Jun 16, 1-2 AM (5)
Jun 16, 2-3 AM (1)
Jun 16, 3-4 AM (9)
Jun 16, 4-5 AM (6)
Jun 16, 5-6 AM (1)
Jun 16, 6-7 AM (16)
Jun 16, 7-8 AM (81)
Jun 16, 8-9 AM (18)
Jun 16, 9-10 AM (28)
Jun 16, 10-11 AM (22)
Jun 16, 11-12 PM (31)
Jun 16, 12-1 PM (37)
Jun 16, 1-2 PM (49)
Jun 16, 2-3 PM (34)
Jun 16, 3-4 PM (28)
Jun 16, 4-5 PM (37)
Jun 16, 5-6 PM (17)
Jun 16, 6-7 PM (26)
Jun 16, 7-8 PM (9)
Jun 16, 8-9 PM (11)
Jun 16, 9-10 PM (4)
Jun 16, 10-11 PM (31)
Jun 16, 11-12 AM (9)
Jun 17, 12-1 AM (8)
Jun 17, 1-2 AM (8)
Jun 17, 2-3 AM (11)
Jun 17, 3-4 AM (4)
Jun 17, 4-5 AM (1)
Jun 17, 5-6 AM (6)
Jun 17, 6-7 AM (99)
Jun 17, 7-8 AM (33)
Jun 17, 8-9 AM (22)
Jun 17, 9-10 AM (56)
Jun 17, 10-11 AM (18)
Jun 17, 11-12 PM (19)
Jun 17, 12-1 PM (57)
Jun 17, 1-2 PM (28)
Jun 17, 2-3 PM (37)
Jun 17, 3-4 PM (26)
Jun 17, 4-5 PM (19)
Jun 17, 5-6 PM (16)
Jun 17, 6-7 PM (10)
Jun 17, 7-8 PM (14)
Jun 17, 8-9 PM (12)
Jun 17, 9-10 PM (37)
Jun 17, 10-11 PM (29)
Jun 17, 11-12 AM (14)
Jun 18, 12-1 AM (12)
Jun 18, 1-2 AM (8)
Jun 18, 2-3 AM (5)
Jun 18, 3-4 AM (11)
Jun 18, 4-5 AM (11)
Jun 18, 5-6 AM (11)
Jun 18, 6-7 AM (9)
Jun 18, 7-8 AM (19)
Jun 18, 8-9 AM (83)
Jun 18, 9-10 AM (45)
Jun 18, 10-11 AM (51)
Jun 18, 11-12 PM (23)
Jun 18, 12-1 PM (67)
Jun 18, 1-2 PM (14)
Jun 18, 2-3 PM (53)
Jun 18, 3-4 PM (44)
Jun 18, 4-5 PM (64)
Jun 18, 5-6 PM (24)
Jun 18, 6-7 PM (21)
Jun 18, 7-8 PM (13)
Jun 18, 8-9 PM (17)
Jun 18, 9-10 PM (23)
Jun 18, 10-11 PM (30)
Jun 18, 11-12 AM (26)
Jun 19, 12-1 AM (13)
Jun 19, 1-2 AM (9)
Jun 19, 2-3 AM (5)
Jun 19, 3-4 AM (2)
Jun 19, 4-5 AM (11)
Jun 19, 5-6 AM (4)
Jun 19, 6-7 AM (92)
Jun 19, 7-8 AM (18)
Jun 19, 8-9 AM (37)
Jun 19, 9-10 AM (39)
Jun 19, 10-11 AM (27)
Jun 19, 11-12 PM (30)
Jun 19, 12-1 PM (53)
Jun 19, 1-2 PM (66)
Jun 19, 2-3 PM (32)
Jun 19, 3-4 PM (61)
Jun 19, 4-5 PM (9)
Jun 19, 5-6 PM (4)
Jun 19, 6-7 PM (17)
Jun 19, 7-8 PM (16)
Jun 19, 8-9 PM (11)
Jun 19, 9-10 PM (45)
Jun 19, 10-11 PM (30)
Jun 19, 11-12 AM (8)
Jun 20, 12-1 AM (4)
Jun 20, 1-2 AM (0)
Jun 20, 2-3 AM (4)
Jun 20, 3-4 AM (1)
Jun 20, 4-5 AM (8)
Jun 20, 5-6 AM (6)
Jun 20, 6-7 AM (6)
Jun 20, 7-8 AM (6)
Jun 20, 8-9 AM (2)
Jun 20, 9-10 AM (2)
Jun 20, 10-11 AM (0)
Jun 20, 11-12 PM (1)
Jun 20, 12-1 PM (1)
Jun 20, 1-2 PM (0)
3,165 commits this week Jun 13, 2026 - Jun 20, 2026
chore(e2e): upgrade WebdriverIO v7 -> v9; drop 5 resolutions
WebdriverIO v9 self-manages browser drivers, so the deprecated
wdio-chromedriver-service and the chromedriver package are removed.
Config migrated: autoCompileOpts (removed in v8) -> tsConfigPath;
the 'chromedriver' service entry dropped.

The v9 stack drops the legacy yarn-install dep and pulls mocha 10.8.2
(patched nanoid/serialize-javascript/diff). Combined with removing the
over-broad global chalk pin (v9 needs chalk 5 ESM; our CJS tools keep
chalk 4 via their own ^4 ranges; the qix blocklist lives in
.yarn/constraints.pro, not the pin), five resolutions can go:

  - chalk                (over-broad; constraints.pro still blocks 5.6.1)
  - nanoid               (mocha 10.8.2 dropped it; natural 3.3.13)
  - serialize-javascript (mocha -> ^6.0.2)
  - diff                 (mocha -> ^5.2.0; ts-node's 4.0.4 is clean)
  - cross-spawn          (yarn-install gone; natural 6.0.6 / 7.0.6)

Resolutions 33 -> 28. Web-extension wdio suite boots, compiles TS specs,
launches Chrome with the extension, and runs mocha under v9 locally;
backend-dependent assertions validate in CI E2E.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
chore(deps): drop on-headers & ip-address resolutions via in-range relock
Both forced resolutions were removable without any manifest change — the
patched versions are reachable inside existing parent ranges:

- morgan 1.10.0 -> 1.11.0 (within @wdio/static-server-service's ^1.7.0),
  which declares on-headers ~1.1.0 -> resolves on-headers 1.1.0 naturally.
- socks deduped 2.8.3 -> 2.8.9 (within socks-proxy-agent's ^2.8.3),
  which declares ip-address ^10.1.1 -> drops the lingering ip-address 9.0.5.

Resolutions 15 -> 13. Dev/transitive-only; build + unit + e2e green.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
chore(deps): resolve remaining transitive Dependabot alerts
Closes every code-resolvable open alert the direct bumps left as PARTIAL —
vulnerable transitive copies pinned by dev/build tooling. Prefer real parent
bumps; fall back to resolutions only where a transitive has multiple/deep
parents (node-gyp, mocha, eslint, npm internals) that no single direct-dep
bump can dislodge.

Parent bumps (clear the copy outright):
- tsx ^4.15 -> ^4.22  => esbuild 0.21 -> 0.27/0.28
- wait-on ^6 -> ^9 (cardano-services, wallet) => drops transitive [email protected]
  (whole axios tree now 1.18.0)
- pkg (archived/EOL, no fix) -> maintained fork @yao-pkg/pkg ^6.20 in
  golden-test-generator; build targets node14 -> node22

Resolutions (transitive copies with no single bumpable parent):
nanoid, on-headers, tar-fs, @opentelemetry/core, cross-spawn,
serialize-javascript, diff, ip-address, js-yaml, tar, tmp, uuid, ws — each
forced to its patched version. base-x clears naturally. minimatch is fixed
with descriptor-scoped resolutions (globule ~3.0.2 -> 3.1.5, mocha 5.0.1 ->
5.1.9) so eslint's own minimatch (3.1.5) is untouched.

Validated: full `yarn build` green; tsx runs under esbuild 0.28; unit tests
green across core/util/crypto/ogmios/hardware-trezor/cardano-services-client/
governance/key-management/tx-construction/input-selection (~2200 tests).

No upstream fix (deep transitives) — dismissed on GitHub with documented
rationale: elliptic (#203), bigint-buffer (#152).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Bump undici from 7.24.1 to 7.28.0
Bumps [undici](https://github.com/nodejs/undici) from 7.24.1 to 7.28.0.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v7.24.1...v7.28.0)

---
updated-dependencies:
- dependency-name: undici
  dependency-version: 7.28.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
chore(deps): bump uuid, ip-address, axios & express-openapi-validator
Consolidates the pure dependency version bumps that stack on top of the
Node 22 upgrade. Each is a behaviour-preserving bump that closes (or
hardens against) Dependabot alerts on consumer-facing and build-context
deps; no public API changes.

- uuid 8/9/10 -> ^11.1.1 across cardano-services, e2e, projection-typeorm,
  web-extension, wallet; drop now-redundant @types/uuid (uuid 11 ships
  its own types).
- core: ip-address ^9.0.5 -> ^10.2.0.
- axios relocked within ^1.7.4 to 1.18.0.
- cardano-services: express-openapi-validator ^4.13.8 -> ^5.6.2
  (pulls multer 2.x, removing the vulnerable multer 1.x). v5 renames
  the OpenAPIV3.Document type to DocumentV3 — updated in openApi.ts and
  its test.

Audits the wave in docs/security/dependency-vulnerability-audit-2026-06-19.md
(follow-up section): OSV.dev clean for every resolved version, 0 residual
advisories in CISA KEV, production closure clean, no lockfile downgrades,
per-tier blast-radius diagrams, and the lone publisher transition (multer
linusu -> ulisesgascon) annotated as a known maintenance handoff.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
chore: stop tracking gitignored tsconfig.tsbuildinfo
This TypeScript incremental-build cache has been committed since
1dcb0993c84 (2021-10-04) but was only added to .gitignore later in
f0a8724593b (2022-06-14). Git keeps already-tracked files even once
ignored, so it lingered in the tree — churning on every build and
showing up as spurious diffs. Remove it from version control (the file
stays locally; tsc regenerates it).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Bump actions/checkout from 6 to 7 in the actions group
Bumps the actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).


Updates `actions/checkout` from 6 to 7
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <[email protected]>
ci(cardano-node): pin moog requester to v0.5.1.5
The Install moog step resolved the *latest* moog release via
`gh release view` (no tag). moog v2.0.0 (the moog-v2 MPFS cutover)
was published and marked Latest on 2026-06-13, so CI silently upgraded
to it. v2.0.0 is incompatible with the deployed v0.5.x MPFS at
mpfs.plutimus.com: `moog facts test-runs` now returns an error
envelope (it calls GET /status -> 404) instead of the array the Submit
step's jq expects, failing with "Cannot index string with string
\"key\"". Every scheduled launch has failed since, so no new
Antithesis runs were created.

Pin the tag to v0.5.1.5 (last v0.5.x, matches the production stack).
ci(cardano-node): pin moog requester to v0.5.1.5
The Install moog step resolved the *latest* moog release via
`gh release view` (no tag). moog v2.0.0 (the moog-v2 MPFS cutover)
was published and marked Latest on 2026-06-13, so CI silently upgraded
to it. v2.0.0 is incompatible with the deployed v0.5.x MPFS at
mpfs.plutimus.com: `moog facts test-runs` now returns an error
envelope (it calls GET /status -> 404) instead of the array the Submit
step's jq expects, failing with "Cannot index string with string
\"key\"". Every scheduled launch has failed since, so no new
Antithesis runs were created.

Pin the tag to v0.5.1.5 (last v0.5.x, matches the production stack).
refactor(core): replace ip-address with a local IPv4/IPv6 parser
ip-address was used in exactly one place — pool-relay address (de)serialization
in ipUtils.ts (Address4/Address6 validation, IPv6 expansion to bytes, and
canonical formatting). Vendor a ~50-line functional parser (RFC 4291: `::`
zero-compression and trailing IPv4-mapped suffixes) and drop the dependency.

Because this feeds consensus-affecting serialization, the local implementation
was proven byte-for-byte identical to ip-address across a 26-case corpus
(validation, expansion, canonical formatting; valid/edge/invalid) before removal,
then locked in with vector-based unit tests.

Removes ip-address from core's production closure (no consumer pulls it via core
any longer). Full core suite (1018 tests) green.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
refactor(core): replace @foxglove/crc with a local crc32
@foxglove/crc was used in exactly one place — the Byron-era address
checksum. CRC-32 (IEEE 802.3 / zlib variant) is ~15 lines, so vendor a
local implementation and drop the dependency from core's closure.

Adds a dedicated crc32 unit test pinning the implementation bit-for-bit to
the canonical CRC-32 vectors (123456789 -> 0xCBF43926, empty -> 0, the
"quick brown fox" -> 0x414FA339, 0..255 -> 0x29058C73), so it provably
matches the variant @foxglove/crc provided. Byron address round-trips
(Address/PaymentAddress suites) cover the integration path.

Part of the core dependency-minimisation effort.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
chore(eslint): disable unicorn/number-literal-case globally
The rule wants uppercase hex digits, which conflicts head-on with the repo's
enforced Prettier config (lowercase) — making it unsatisfiable for any hex
literal containing a-f. It had accumulated `/* eslint-disable */` directives in
16 files as a workaround. Disable it once in the shared config (as no-bitwise
already is) and drop the redundant per-file directives.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>