Release Notes

v2.28.0

Release date: Sep 23, 2025

New features

Anchor listing from studio

Anchors can now be listed from studio. This feature is experimental, for now it's only enabled in development and staging. Production rollout will be announced.

Move balances when committed (STG)

The flag dtc.balancesMovementWhenCommitted was fully enabled for staging. This feature makes balance movements happen when an intent status is actually committed by all participants (i.e. when quorum for committed status is met) instead of when only the ledger commits.

Claim resolution proofs (PRD)

The flag dtc.claimResolutionProofs was enabled for production. This feature makes the ledger store proofs of claim resolutions in intents, so that when an intent starts being processed, information for wallet, bridges and amounts will be stored to be used as a source of truth during intent processing.

Improvements

Studio UX

  • [studio] Changed intents amount field to use thousand and decimal separators based on entered symbol.
  • [studio] Reset filters and pagination when switching tabs (Changing schemas).
  • [studio] Changed handle in datatables to truncate large texts and allow copying all values with a button.
  • [studio] Display times in local browser timezone instead of UTC. Elements can still be hovered to show UTC timestamp.
  • [studio] Moved resend invitation to "Three dots" menu for members in member list page for easier access.
  • [studio] Align wallet balances to right to make them easier to scan. Intent amounts are already aligned right.
  • [studio] Show "no data available" instead of "NaN" in homepage when there are no intents.

Documentation

  • [docs] Added Granting permissions page to Ledger & Transactions tutorial
  • [docs] Added Ensuring Cross Ledger Payments layout section to Making Cross-Ledger Payments, since it is a required step before proceeding with the tutorial.
  • [docs] Added minka intent create -a inside of cli reference docs.

Fixes

  • [studio] Improved user message on reset password page to prevent information exposure to bruteforce attackers.
  • [studio] Signers page stuck on loading when no schemas other than member are created for record signer
  • [studio] Reports only show up in listing after reload.
  • [studio] Properly show source wallet on destroy action
  • [studio] Fix 403 error (invalid CSRF token) after session expiring
  • [studio] Fix circle members counter not updating after adding or removing member

Internal

CI/CD

  • [ci] Integrated pull request workflow with migration compatibility tests. These tests are only executed when there's at least one migration in the diff between the feature branch and master.
  • [ci] Run studio-e2e on self-hosted runner.
  • [studio-e2e] Added tests to cover different features
    • Anchor listing
    • Signer listing
    • Report preview and asset download
  • [studio-e2e] Changed test structure and addressed some flakiness issues
  • [ledger-load-tests] Support dynamic-phases environment variable that allows user to configure Artillery phases
  • [ledger-load-tests] Support FAULT environment variable that allows simulating error scenarios from bridge side on intent processing.
  • [docs] Added docs tests to automated pull request pipeline for the fumadoc project.
  • [ledger-e2e] Remove flakiness of expiry e2e test suite.

Fixes

  • [ledger] Fixed CronService.getSchedulePolicyBatch so it correctly builds the query when fromPolicy is passed.
  • [ledger] Fixed liveness probe
  • [ledger] Improve health check by validating the response body status
  • [ledger] Reveal database status in the public health check route only if the reveal_dependencies query param is provided
  • [ledger] Set up HPA for ledger
  • [studio] Fixed onboarding URL for Servibanca PRD by updating BASE_STUDIO_SERVER.
  • [ledger] Cleaned up logs marked as errors that really aren't errors
  • [monorepo] Fixed the start and stop infra e2e commands to include redis

Miscellaneous

  • [sql-parser] Added parameter to analyseStatement and analyseRawStatement functions to optionally opt-out of checking ledger filter presence in SQL where operators.
  • [ledger] Changed usage of analyseRawStatement in opentelemetry initialization to avoid checking for ledger filter presence as this operation is expensive and instrumentation was failing for long queries.
  • [ledger] Introduce env vars for controlling more scheduler config options. These are: SCHEDULER_BACKGROUND_JOB_LIMIT, SCHEDULER_CLEANUP_FREQUENCY, SCHEDULER_JOB_TIMEOUT_MS, SCHEDULER_BACKGROUND_JOBS_ENABLED
  • [scheduler] Exposed config settings backgroundJobLimit, cleanupFrequency, jobRunningTimeoutMs, runSlowJobsInBackground
  • [monorepo] Added README-COLIMA.md that explains how to setup Colima as a Docker replacement to run the project
  • [monorepo] Added info to README.md on how to add yarn bin to PATH for nx to work globally
  • [ledger] Renamed RequestContext to ProcessingContext. This class is used to pass objects throughout request lifecycle, but as soon as we move some logic to background processing it will be misleading.
  • [monorepo] Removed deprecated versions from docker compose files
  • [monorepo] Removed @nx/eslint-plugin from dependencies, since we already have it in devDependencies with a different version
  • [ledger] Updated the redis e2e container name to avoid conflicts with redis for dev
  • [studio] Enable PostHog in Staging