Add `ghc914` dev shell for `x86_64-linux` and make haddock build in CI use it
Mar 30, 5-6 PM (41)
Mar 30, 6-7 PM (17)
Mar 30, 7-8 PM (18)
Mar 30, 8-9 PM (13)
Mar 30, 9-10 PM (28)
Mar 30, 10-11 PM (44)
Mar 30, 11-12 AM (28)
Mar 31, 12-1 AM (16)
Mar 31, 1-2 AM (5)
Mar 31, 2-3 AM (15)
Mar 31, 3-4 AM (6)
Mar 31, 4-5 AM (4)
Mar 31, 5-6 AM (7)
Mar 31, 6-7 AM (12)
Mar 31, 7-8 AM (43)
Mar 31, 8-9 AM (47)
Mar 31, 9-10 AM (30)
Mar 31, 10-11 AM (37)
Mar 31, 11-12 PM (29)
Mar 31, 12-1 PM (38)
Mar 31, 1-2 PM (34)
Mar 31, 2-3 PM (52)
Mar 31, 3-4 PM (42)
Mar 31, 4-5 PM (48)
Mar 31, 5-6 PM (42)
Mar 31, 6-7 PM (36)
Mar 31, 7-8 PM (16)
Mar 31, 8-9 PM (13)
Mar 31, 9-10 PM (9)
Mar 31, 10-11 PM (24)
Mar 31, 11-12 AM (15)
Apr 01, 12-1 AM (1)
Apr 01, 1-2 AM (2)
Apr 01, 2-3 AM (8)
Apr 01, 3-4 AM (5)
Apr 01, 4-5 AM (8)
Apr 01, 5-6 AM (10)
Apr 01, 6-7 AM (3)
Apr 01, 7-8 AM (81)
Apr 01, 8-9 AM (41)
Apr 01, 9-10 AM (28)
Apr 01, 10-11 AM (29)
Apr 01, 11-12 PM (34)
Apr 01, 12-1 PM (29)
Apr 01, 1-2 PM (29)
Apr 01, 2-3 PM (41)
Apr 01, 3-4 PM (31)
Apr 01, 4-5 PM (9)
Apr 01, 5-6 PM (11)
Apr 01, 6-7 PM (31)
Apr 01, 7-8 PM (19)
Apr 01, 8-9 PM (9)
Apr 01, 9-10 PM (36)
Apr 01, 10-11 PM (34)
Apr 01, 11-12 AM (14)
Apr 02, 12-1 AM (24)
Apr 02, 1-2 AM (5)
Apr 02, 2-3 AM (10)
Apr 02, 3-4 AM (6)
Apr 02, 4-5 AM (1)
Apr 02, 5-6 AM (7)
Apr 02, 6-7 AM (45)
Apr 02, 7-8 AM (13)
Apr 02, 8-9 AM (44)
Apr 02, 9-10 AM (37)
Apr 02, 10-11 AM (35)
Apr 02, 11-12 PM (38)
Apr 02, 12-1 PM (46)
Apr 02, 1-2 PM (56)
Apr 02, 2-3 PM (45)
Apr 02, 3-4 PM (46)
Apr 02, 4-5 PM (38)
Apr 02, 5-6 PM (34)
Apr 02, 6-7 PM (25)
Apr 02, 7-8 PM (23)
Apr 02, 8-9 PM (31)
Apr 02, 9-10 PM (17)
Apr 02, 10-11 PM (27)
Apr 02, 11-12 AM (47)
Apr 03, 12-1 AM (8)
Apr 03, 1-2 AM (9)
Apr 03, 2-3 AM (13)
Apr 03, 3-4 AM (0)
Apr 03, 4-5 AM (2)
Apr 03, 5-6 AM (6)
Apr 03, 6-7 AM (6)
Apr 03, 7-8 AM (50)
Apr 03, 8-9 AM (35)
Apr 03, 9-10 AM (6)
Apr 03, 10-11 AM (10)
Apr 03, 11-12 PM (14)
Apr 03, 12-1 PM (50)
Apr 03, 1-2 PM (38)
Apr 03, 2-3 PM (60)
Apr 03, 3-4 PM (15)
Apr 03, 4-5 PM (10)
Apr 03, 5-6 PM (5)
Apr 03, 6-7 PM (14)
Apr 03, 7-8 PM (19)
Apr 03, 8-9 PM (6)
Apr 03, 9-10 PM (15)
Apr 03, 10-11 PM (20)
Apr 03, 11-12 AM (17)
Apr 04, 12-1 AM (6)
Apr 04, 1-2 AM (1)
Apr 04, 2-3 AM (4)
Apr 04, 3-4 AM (1)
Apr 04, 4-5 AM (1)
Apr 04, 5-6 AM (5)
Apr 04, 6-7 AM (10)
Apr 04, 7-8 AM (3)
Apr 04, 8-9 AM (3)
Apr 04, 9-10 AM (5)
Apr 04, 10-11 AM (35)
Apr 04, 11-12 PM (9)
Apr 04, 12-1 PM (24)
Apr 04, 1-2 PM (11)
Apr 04, 2-3 PM (8)
Apr 04, 3-4 PM (12)
Apr 04, 4-5 PM (3)
Apr 04, 5-6 PM (9)
Apr 04, 6-7 PM (2)
Apr 04, 7-8 PM (3)
Apr 04, 8-9 PM (5)
Apr 04, 9-10 PM (17)
Apr 04, 10-11 PM (21)
Apr 04, 11-12 AM (23)
Apr 05, 12-1 AM (2)
Apr 05, 1-2 AM (0)
Apr 05, 2-3 AM (2)
Apr 05, 3-4 AM (1)
Apr 05, 4-5 AM (1)
Apr 05, 5-6 AM (9)
Apr 05, 6-7 AM (13)
Apr 05, 7-8 AM (4)
Apr 05, 8-9 AM (1)
Apr 05, 9-10 AM (0)
Apr 05, 10-11 AM (7)
Apr 05, 11-12 PM (7)
Apr 05, 12-1 PM (5)
Apr 05, 1-2 PM (2)
Apr 05, 2-3 PM (3)
Apr 05, 3-4 PM (3)
Apr 05, 4-5 PM (18)
Apr 05, 5-6 PM (3)
Apr 05, 6-7 PM (2)
Apr 05, 7-8 PM (2)
Apr 05, 8-9 PM (0)
Apr 05, 9-10 PM (5)
Apr 05, 10-11 PM (19)
Apr 05, 11-12 AM (18)
Apr 06, 12-1 AM (4)
Apr 06, 1-2 AM (6)
Apr 06, 2-3 AM (12)
Apr 06, 3-4 AM (11)
Apr 06, 4-5 AM (5)
Apr 06, 5-6 AM (7)
Apr 06, 6-7 AM (4)
Apr 06, 7-8 AM (8)
Apr 06, 8-9 AM (24)
Apr 06, 9-10 AM (15)
Apr 06, 10-11 AM (9)
Apr 06, 11-12 PM (2)
Apr 06, 12-1 PM (36)
Apr 06, 1-2 PM (42)
Apr 06, 2-3 PM (22)
Apr 06, 3-4 PM (8)
Apr 06, 4-5 PM (29)
Apr 06, 5-6 PM (8)
3,072 commits this week
Mar 30, 2026
-
Apr 06, 2026
deploy: 0d527451d304a49dc3d5b9e2ffa80b53c1c4df89
feat: add liveness and readiness probes to all containers (#718)
* feat: add api probes * feat: add yaci-indexer probes * feat: unify index-applier to wait on yaci readiness, remove API dependency * feat: add cardano node probes * chore: update docs for consistency * fix: remove the wait-for-indexer api initContainers * chore: remove syncStatus from rediness probe of api * chore: update docker compose * fix: add schema readiness guard to prevent API crash on fresh database
chore(deps): bump docker/login-action from 4.0.0 to 4.1.0
Bumps [docker/login-action](https://github.com/docker/login-action) from 4.0.0 to 4.1.0. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/b45d80f862d83dbcd57f89517bcf500b2ab88fb2...4907a6ddec9925e35a0a9e82d7399ccc52663121) --- updated-dependencies: - dependency-name: docker/login-action dependency-version: 4.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]>
chore(deps): bump blinklabs-io/go from 1.25.8-1 to 1.26.1-1
Bumps [blinklabs-io/go](https://github.com/blinklabs-io/docker-go) from 1.25.8-1 to 1.26.1-1. - [Release notes](https://github.com/blinklabs-io/docker-go/releases) - [Commits](https://github.com/blinklabs-io/docker-go/compare/v1.25.8-1...v1.26.1-1) --- updated-dependencies: - dependency-name: blinklabs-io/go dependency-version: 1.26.1-1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]>
chore(deps): bump github.com/blinklabs-io/plutigo from 0.1.0 to 0.1.2
Bumps [github.com/blinklabs-io/plutigo](https://github.com/blinklabs-io/plutigo) from 0.1.0 to 0.1.2. - [Release notes](https://github.com/blinklabs-io/plutigo/releases) - [Changelog](https://github.com/blinklabs-io/plutigo/blob/main/RELEASE_NOTES.md) - [Commits](https://github.com/blinklabs-io/plutigo/compare/v0.1.0...v0.1.2) --- updated-dependencies: - dependency-name: github.com/blinklabs-io/plutigo dependency-version: 0.1.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]>
chore(deps): bump github.com/SundaeSwap-finance/ogmigo/v6
Bumps [github.com/SundaeSwap-finance/ogmigo/v6](https://github.com/SundaeSwap-finance/ogmigo) from 6.2.0 to 6.2.1. - [Release notes](https://github.com/SundaeSwap-finance/ogmigo/releases) - [Commits](https://github.com/SundaeSwap-finance/ogmigo/compare/v6.2.0...v6.2.1) --- updated-dependencies: - dependency-name: github.com/SundaeSwap-finance/ogmigo/v6 dependency-version: 6.2.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]>
deploy: 29ba016bd7b7f292f0b1090ca872dad616058052
fix: add schema readiness guard to prevent API crash on fresh database
chore: update docker compose
feat: add cardano node probes
feat: add api probes
chore: update docs for consistency
feat: unify index-applier to wait on yaci readiness, remove API dependency
fix: remove the wait-for-indexer api initContainers
chore: remove syncStatus from rediness probe of api
feat: add yaci-indexer probes
fix: align policyId validation in search endpoint and introduce domain validators (#726)
* fix: align policyId validation in search endpoint with account endpoint The search/transactions endpoint was missing policyId input validation that the account endpoint already enforces. This aligns both endpoints to use the same hex regex validation for policyId, and strengthens the repository layer to also validate inputs before query construction. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * refactor: use JOOQ bind parameters in currency condition builders Replace string concatenation into DSL.condition() SQL strings with JOOQ's DSL.val() bind parameters. This makes the query construction structurally safe — the database driver handles escaping via prepared statement parameters, eliminating any possibility of unsanitized data reaching SQL regardless of upstream validation. PostgreSQL: uses jsonb_build_array(jsonb_build_object('key', ?)) to build JSONB containment checks from bind parameters instead of interpolating values into JSON literals. H2: uses ? bind parameters in LIKE conditions instead of concatenating values into the LIKE pattern string. The requireHex() validation in BaseCurrencyConditionBuilder is retained as a fast-fail check for better error messages, but is no longer the sole protection against unsanitized input reaching queries. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * refactor: introduce PolicyIdValidator and TokenNameValidator classes Consolidate scattered policyId/tokenName/hex validation into dedicated validator classes under common.validation package. This replaces duplicate regex patterns in AccountServiceImpl, CardanoAddressUtils, ValidateParseUtil, and GovActionParamsUtil with single-source-of-truth validators backed by HexUtils.isHexString(). - PolicyIdValidator: isValid(), requireValid(), isHexOnly(), requireHexOnly() - TokenNameValidator: isValid() - 35 unit tests for both validators - All callers updated to delegate to validators Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * refactor: consolidate remaining hex validation calls through validators Update SearchServiceImpl.validateCurrencySymbolIsHex and AssetFingerprint.fromSubject to use PolicyIdValidator.isHexOnly() instead of calling HexUtils.isHexString() directly. All hex validation in the codebase now flows through the centralized validator classes. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * refactor: simplify validators to expose only isValid() Validators now have a clean API - only isValid() per domain concept: - PolicyIdValidator.isValid(): exactly 56 hex chars - SymbolValidator.isValid(): non-empty hex string - TokenNameValidator.isValid(): 0-64 hex chars or empty hex Removed requireValid/requireHexOnly/requireValidHex from validators. For raw hex checks (defense-in-depth at repository layer, AssetFingerprint), use HexUtils.isHexString() directly. All error types (INVALID_POLICY_ID 4023, INVALID_TOKEN_NAME 4024, CURRENCY_SYMBOL_NOT_HEX 5059) are registered in RosettaErrorType and returned by /network/options via ALL_ROSETTA_ERRORS. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * refactor: add validate() methods to validators and remove private wrappers Extract validate-and-throw logic from SearchServiceImpl and AccountServiceImpl into PolicyIdValidator, SymbolValidator, and TokenNameValidator, eliminating duplicated private validation methods across service classes. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * refactor: replace custom requireHex/requireValidSymbol with shared validators Remove defense-in-depth validation methods from BaseCurrencyConditionBuilder and delegate to PolicyIdValidator.validate() and SymbolValidator.validate() instead, keeping the template method pattern for DB-specific SQL generation. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * test: add input validation tests for currency, address, and coin identifier (#727) Adds 4 test classes to test_error_handling.py with 17 parametrized cases: - SearchCurrencyValidation: policyId and symbol rejection (requires PR #726) - AccountCurrencyValidation: policyId and token name rejection - AddressValidation: invalid bech32 on /account/balance and /account/coins - CoinIdentifierValidation: malformed identifier without colon separator * fix: handle malformed coin_identifier in search and align validator null semantics Replace ArrayIndexOutOfBoundsException and NumberFormatException with proper ApiException when coin_identifier lacks a colon separator or has a non-numeric output index. Also align TokenNameValidator.validate() to accept null consistently with PolicyIdValidator and SymbolValidator. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * test: enable coin_identifier validation test after fix Remove @pytest.mark.skip now that ba4df5db5 handles malformed coin_identifier properly. Verified against local build: HTTP 400, code 5000, retriable false. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> --------- Co-authored-by: Mateusz Czeladka <[email protected]> Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]> Co-authored-by: Lincon Vidal <[email protected]>
deploy: 039fd73cd99086313a7d56575b83432f23c15f76
fix: handle malformed coin_identifier in search and align validator null semantics
Replace ArrayIndexOutOfBoundsException and NumberFormatException with proper ApiException when coin_identifier lacks a colon separator or has a non-numeric output index. Also align TokenNameValidator.validate() to accept null consistently with PolicyIdValidator and SymbolValidator. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
refactor: consolidate remaining hex validation calls through validators
Update SearchServiceImpl.validateCurrencySymbolIsHex and AssetFingerprint.fromSubject to use PolicyIdValidator.isHexOnly() instead of calling HexUtils.isHexString() directly. All hex validation in the codebase now flows through the centralized validator classes. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
fix: align policyId validation in search endpoint with account endpoint
The search/transactions endpoint was missing policyId input validation that the account endpoint already enforces. This aligns both endpoints to use the same hex regex validation for policyId, and strengthens the repository layer to also validate inputs before query construction. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
refactor: add validate() methods to validators and remove private wrappers
Extract validate-and-throw logic from SearchServiceImpl and AccountServiceImpl into PolicyIdValidator, SymbolValidator, and TokenNameValidator, eliminating duplicated private validation methods across service classes. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
refactor: introduce PolicyIdValidator and TokenNameValidator classes
Consolidate scattered policyId/tokenName/hex validation into dedicated validator classes under common.validation package. This replaces duplicate regex patterns in AccountServiceImpl, CardanoAddressUtils, ValidateParseUtil, and GovActionParamsUtil with single-source-of-truth validators backed by HexUtils.isHexString(). - PolicyIdValidator: isValid(), requireValid(), isHexOnly(), requireHexOnly() - TokenNameValidator: isValid() - 35 unit tests for both validators - All callers updated to delegate to validators Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
refactor: simplify validators to expose only isValid()
Validators now have a clean API - only isValid() per domain concept: - PolicyIdValidator.isValid(): exactly 56 hex chars - SymbolValidator.isValid(): non-empty hex string - TokenNameValidator.isValid(): 0-64 hex chars or empty hex Removed requireValid/requireHexOnly/requireValidHex from validators. For raw hex checks (defense-in-depth at repository layer, AssetFingerprint), use HexUtils.isHexString() directly. All error types (INVALID_POLICY_ID 4023, INVALID_TOKEN_NAME 4024, CURRENCY_SYMBOL_NOT_HEX 5059) are registered in RosettaErrorType and returned by /network/options via ALL_ROSETTA_ERRORS. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>