Home / Cardano Foundation / cardano-rosetta-java
May 13, 9-10 AM (2)
May 13, 10-11 AM (4)
May 13, 11-12 PM (1)
May 13, 12-1 PM (0)
May 13, 1-2 PM (0)
May 13, 2-3 PM (3)
May 13, 3-4 PM (0)
May 13, 4-5 PM (0)
May 13, 5-6 PM (0)
May 13, 6-7 PM (0)
May 13, 7-8 PM (0)
May 13, 8-9 PM (0)
May 13, 9-10 PM (0)
May 13, 10-11 PM (0)
May 13, 11-12 AM (0)
May 14, 12-1 AM (0)
May 14, 1-2 AM (0)
May 14, 2-3 AM (0)
May 14, 3-4 AM (2)
May 14, 4-5 AM (0)
May 14, 5-6 AM (0)
May 14, 6-7 AM (0)
May 14, 7-8 AM (2)
May 14, 8-9 AM (1)
May 14, 9-10 AM (0)
May 14, 10-11 AM (0)
May 14, 11-12 PM (0)
May 14, 12-1 PM (0)
May 14, 1-2 PM (0)
May 14, 2-3 PM (0)
May 14, 3-4 PM (0)
May 14, 4-5 PM (0)
May 14, 5-6 PM (0)
May 14, 6-7 PM (0)
May 14, 7-8 PM (0)
May 14, 8-9 PM (0)
May 14, 9-10 PM (0)
May 14, 10-11 PM (0)
May 14, 11-12 AM (0)
May 15, 12-1 AM (0)
May 15, 1-2 AM (0)
May 15, 2-3 AM (0)
May 15, 3-4 AM (0)
May 15, 4-5 AM (0)
May 15, 5-6 AM (0)
May 15, 6-7 AM (0)
May 15, 7-8 AM (0)
May 15, 8-9 AM (0)
May 15, 9-10 AM (0)
May 15, 10-11 AM (0)
May 15, 11-12 PM (0)
May 15, 12-1 PM (0)
May 15, 1-2 PM (0)
May 15, 2-3 PM (0)
May 15, 3-4 PM (0)
May 15, 4-5 PM (0)
May 15, 5-6 PM (0)
May 15, 6-7 PM (0)
May 15, 7-8 PM (0)
May 15, 8-9 PM (0)
May 15, 9-10 PM (0)
May 15, 10-11 PM (0)
May 15, 11-12 AM (0)
May 16, 12-1 AM (0)
May 16, 1-2 AM (0)
May 16, 2-3 AM (0)
May 16, 3-4 AM (0)
May 16, 4-5 AM (0)
May 16, 5-6 AM (0)
May 16, 6-7 AM (0)
May 16, 7-8 AM (0)
May 16, 8-9 AM (0)
May 16, 9-10 AM (0)
May 16, 10-11 AM (0)
May 16, 11-12 PM (0)
May 16, 12-1 PM (0)
May 16, 1-2 PM (0)
May 16, 2-3 PM (0)
May 16, 3-4 PM (0)
May 16, 4-5 PM (0)
May 16, 5-6 PM (0)
May 16, 6-7 PM (0)
May 16, 7-8 PM (0)
May 16, 8-9 PM (0)
May 16, 9-10 PM (0)
May 16, 10-11 PM (0)
May 16, 11-12 AM (0)
May 17, 12-1 AM (0)
May 17, 1-2 AM (0)
May 17, 2-3 AM (0)
May 17, 3-4 AM (0)
May 17, 4-5 AM (0)
May 17, 5-6 AM (0)
May 17, 6-7 AM (0)
May 17, 7-8 AM (0)
May 17, 8-9 AM (0)
May 17, 9-10 AM (0)
May 17, 10-11 AM (0)
May 17, 11-12 PM (0)
May 17, 12-1 PM (0)
May 17, 1-2 PM (0)
May 17, 2-3 PM (0)
May 17, 3-4 PM (0)
May 17, 4-5 PM (0)
May 17, 5-6 PM (0)
May 17, 6-7 PM (0)
May 17, 7-8 PM (0)
May 17, 8-9 PM (0)
May 17, 9-10 PM (0)
May 17, 10-11 PM (0)
May 17, 11-12 AM (0)
May 18, 12-1 AM (0)
May 18, 1-2 AM (0)
May 18, 2-3 AM (0)
May 18, 3-4 AM (0)
May 18, 4-5 AM (0)
May 18, 5-6 AM (0)
May 18, 6-7 AM (0)
May 18, 7-8 AM (0)
May 18, 8-9 AM (0)
May 18, 9-10 AM (0)
May 18, 10-11 AM (0)
May 18, 11-12 PM (0)
May 18, 12-1 PM (0)
May 18, 1-2 PM (0)
May 18, 2-3 PM (0)
May 18, 3-4 PM (0)
May 18, 4-5 PM (0)
May 18, 5-6 PM (0)
May 18, 6-7 PM (0)
May 18, 7-8 PM (0)
May 18, 8-9 PM (0)
May 18, 9-10 PM (0)
May 18, 10-11 PM (0)
May 18, 11-12 AM (0)
May 19, 12-1 AM (0)
May 19, 1-2 AM (0)
May 19, 2-3 AM (0)
May 19, 3-4 AM (0)
May 19, 4-5 AM (0)
May 19, 5-6 AM (0)
May 19, 6-7 AM (0)
May 19, 7-8 AM (0)
May 19, 8-9 AM (1)
May 19, 9-10 AM (0)
May 19, 10-11 AM (0)
May 19, 11-12 PM (3)
May 19, 12-1 PM (2)
May 19, 1-2 PM (1)
May 19, 2-3 PM (4)
May 19, 3-4 PM (0)
May 19, 4-5 PM (0)
May 19, 5-6 PM (0)
May 19, 6-7 PM (0)
May 19, 7-8 PM (0)
May 19, 8-9 PM (0)
May 19, 9-10 PM (0)
May 19, 10-11 PM (0)
May 19, 11-12 AM (0)
May 20, 12-1 AM (0)
May 20, 1-2 AM (0)
May 20, 2-3 AM (0)
May 20, 3-4 AM (0)
May 20, 4-5 AM (0)
May 20, 5-6 AM (0)
May 20, 6-7 AM (0)
May 20, 7-8 AM (0)
May 20, 8-9 AM (0)
May 20, 9-10 AM (0)
24 commits this week May 13, 2026 - May 20, 2026
feat: one-time --allow-override gate for Mithril v1->v2 migration
Mirror of the 1.x change (release/1_x_x_hf bbfad4fe6). Mithril 2617.0
dropped the v1 backend; v2 refuses to download into a non-empty /node
unless --allow-override is set. Pass the override exactly once (to
migrate a legacy v1 / pre-v2-aware volume) gated on a provenance
marker the script writes itself (/node/.mithril-v2.done) after a
successful download; never override once the marker exists. /node is
a bind mount (${CARDANO_NODE_DIR}:/node) so the marker persists.

Captures the mithril-client exit code (previously discarded) so the
marker is written only on success; the container still exits 0 in the
steady-state "v2 refuses non-empty dir" case so downstream services
gated on service_completed_successfully are not blocked.

Premise (v1->v2 requires a fresh re-download) originates from AI
commit 3a2af2ecb and is not yet build-verified -- no Docker here.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
feat: one-time --allow-override gate for Mithril v1->v2 migration
Mithril 2617.0 dropped the v1 backend; v2 refuses to download into a
non-empty /node unless --allow-override is set. We need that override
exactly once (to migrate a legacy v1 / pre-v2-aware volume) and never
again, since a permanent override clobbers an already-synced node DB
on every restart.

Gate it on a provenance marker the script writes itself
(/node/.mithril-v2.done) after a successful download:
- /node empty            -> no override (empty dir needs none)
- non-empty, no marker    -> one-time --allow-override (v1->v2)
- marker present          -> never override; keep existing DB

Also captures the mithril-client exit code (previously discarded) so
the marker is written only on success. The container still exits 0 in
the steady-state "v2 refuses non-empty dir" case, so downstream
services gated on service_completed_successfully are not blocked.

Premise (v1->v2 requires a fresh re-download) originates from AI
commit 3a2af2ecb and is not yet build-verified -- no Docker here.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
fix: remove risky --allow-override from Mithril snapshot download
--allow-override was added (commit 3a2af2ecb, hard-fork prep) so the
Mithril 2617.0 v2 backend would overwrite an existing /node dir. In
practice that means every container restart clobbers a possibly
already-synced (and ahead-of-snapshot) node DB.

Removing it makes restore idempotent: fresh volume still restores
(empty dir needs no override); on restart mithril-client v2 declines
to overwrite, the entrypoint still exits 0, and the existing DB is
kept. Brings 1.x in line with 2.x (entrypoint now byte-identical).

Re-adding this flag should require an explicit, documented reason —
it forces a destructive re-restore on every start.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
fix: backport Mithril 2617.0 and finish 11.0.1 alignment on 1.x
Mithril was only partially backported from 2.x: the .env files were
on 2617.0 but the Dockerfile ARG defaults still built 2537.0, so the
published mithril image would have been mis-versioned. Also drops the
temporary 2543.1-hotfix tag (not suitable for a hard fork) and fixes
a node version ref missed by earlier filename-scoped searches.

- docker/dockerfiles/mithril/Dockerfile + docker/Dockerfile: Mithril
  ARG default 2537.0 -> 2617.0 (mithril Dockerfile now identical to 2.x)
- docs/env-vars.md: documented Mithril version 2524.0 -> 2617.0
- .env.IntegrationTest: MITHRIL_VERSION 2543.1-hotfix -> 2617.0
  (CARDANO_NODE_VERSION kept at 0.0.0 — intentional DevKit sentinel)
- docker/.env.dockerfile: CARDANO_NODE_VERSION 10.5.3 -> 11.0.1
  (all-in-one runtime env, missed before; 2.x has no equivalent)

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
fix: make all-in-one and node images hard-fork ready on cardano-node 11.0.1
The standalone node image and .env files were already on 11.0.x, but
the monolithic all-in-one docker/Dockerfile was still pinned to 10.5.3
and never received the 11.0.x build fixes — so a bumped all-in-one
image would fail to build/start.

- Bump CARDANO_NODE_VERSION to 11.0.1 everywhere still lagging
  (all-in-one Dockerfile 10.5.3, node Dockerfile 11.0.0,
  test-integration config, docs)
- node/Dockerfile: add ENV LANG=C.UTF-8 + split `cabal build all`
  (UTF-8 Template Haskell fix), matching the 2.x node image
- all-in-one Dockerfile: add liburing/libsnappy/protobuf build deps,
  liburing2/libsnappy1v5 runtime libs, ENV LANG=C.UTF-8, and switch
  the submit-api config to the local trace-dispatcher tx-submit-config
  (prevents the `key "Options" not found` crash on 11.0.x)

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
chore: prefix regenerate-testdata-db skill with project name
Renamed .claude/skills/regenerate-testdata-db/ to
.claude/skills/cardano-rosetta-java-regenerate-testdata-db/ to avoid
collisions with same-named skills the user may have in other projects.
Updated the SKILL.md `name:` frontmatter field and the in-doc path
reference to the bundled regen-devkit-db.sh.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
chore: add regenerate-testdata-db Claude Code skill
Per-project skill that wraps the devkit fixture regeneration. Triggers on
phrases like 'regenerate testdata', 'rebuild devkit.db', or on CI failures
mentioning 'Table CIP26_METADATA not found' (which indicate the committed
testData/devkit.db.mv.db is stale relative to the current yaci-store schema).

The skill folder contains:
- SKILL.md     - workflow, common failure modes, categorisation of the
                 fixture-drift test adjustments
- regen-devkit-db.sh - the actual orchestration script, moved out of
                       scripts/ so the skill is self-contained

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
chore: regenerate devkit fixture against assets-ext V2 schema
The previous H2 fixture (testData/devkit.db.mv.db) still carried the old
ft_offchain_metadata / ft_offchain_logo / metadata_reference_nft tables.
Indexer migrations against the new yaci-store snapshot create cip26_metadata
and cip68_metadata, so 15 controller tests were failing with "Table
CIP26_METADATA not found" / 500 errors.

Regenerated end-to-end via scripts/regen-devkit-db.sh:
- yaci-cli boots a local devnet (no Docker required)
- topup_addresses env var funds the two test addresses
- rosetta yaci-indexer runs with the h2-testdata profile, writing the
  V2 schema into testData/devkit.db
- TestDataGenerator submits the canonical transaction set
- two SQL UPDATE statements apply the genesis-block workaround
- script verifies cip26_metadata + cip68_metadata are present before exit

Minor test adjustments to match the regenerated fixture:
- SearchControllerTest: total_count 27 -> 45 (more transactions in the new
  run; account-filter count of 6 unchanged)
- AccountBalanceApiTest.accountBalanceMintedTokenAndEmptyName_TestORG:
  locate MyAsset by symbol filter rather than positional index, since
  devkit mint order is not guaranteed across regens
- AccountCoinsApiTest.accountCoinsMultipleSpecifiedCurrencies_Test: expect
  decimals=0 for MyAsset (no CIP-26 row exists for it; TokenRegistry
  decimals resolution is covered by TokenQueryServiceTest)
- MetadataApiTest.combineWithMetadataTest: TTL 735 -> 155 (chain-tip slot
  is shorter on the freshly-regenerated devkit)

All 995 api tests now pass (8 skipped).

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
refactor: align assets-ext consumers with yaci-store V2 schema (cip26_metadata / cip68_metadata)
Yaci-store assets-ext renamed its tables and merged the logo column into
cip26_metadata. Retarget rosetta entities, drop the now-redundant logo
table + parallel-fetch plumbing, and remove the label filter that
silently hid latest reference-NFT rows tagged with a co-minted prefix.

- Entities: TokenMetadataEntity -> cip26_metadata (+ logo column);
  MetadataReferenceNftEntity -> cip68_metadata; TokenLogoEntity removed.
- Repository: drop label filter from findLatestByConcatenatedKeys to
  match upstream "latest row regardless of label" semantics.
- TokenQueryServiceImpl: drop StructuredTaskScope and TokenLogoRepository;
  single CIP-26 query reads logo on the same row. TOKEN_REGISTRY_LOGO_FETCH
  retained as a wire-gating flag (no longer saves a DB query).
- Tests: rewrite TokenQueryServiceTest for the new shape (64 tests pass).
- Docs: update token-metadata.md data-flow diagram and SQL examples.
- Bump yaci-store snapshot to 2.1.0-pre4-ca14bd5-SNAPSHOT.

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