Repository navigation
Release v0.23.0 - #25
Merged
Merged
Conversation
Point the field-offset guard at the indexer's dispenser directory after the single-file module was retired.
Add direct coverage for timeout parsing and session restoration. Pin lock release and connection destruction when restoration fails.
Add focused unit coverage for integer parsing, endpoint normalization, and node reachability state.
Cover exact result failures and verify transport errors are scrubbed while RPC details remain available.
Match the configuration helper coverage to the documented raw input type.
Keep the test callbacks within structure limits without changing their assertions.
Match the configuration helper coverage to the documented raw input type.
Give every required input its own test result so focused verification identifies any failing behavior directly.
Stub the status directory listing instead of creating and deleting a temporary migration tree for every case. This removes synchronous filesystem latency from the five-second Mocha hook budget while preserving the CLI status assertions.
The generated timing block already matches the tier wirer after the branch sync. Record the successful regeneration and verification without changing generator-owned output.
Keep the Node version tag while locking the Docker build to the current multi-platform image index.
Add the Alpine base as a digest-pinned preliminary stage while keeping the decoder base as the final runtime stage.
Install production packages in the Alpine stage and copy the resulting dependency tree into the runtime stage so each pinned base is part of the built image.
Keep cache refresh and response shaping below structure limits. Extract named test cases while preserving stale retry coverage.
Keep the getmempool contract visible to the existing source checks. Exercise a partial refresh failure and verify the prior timestamp and complete snapshot survive before an immediate retry.
Add an independent runtime assertion to the required API surface suite so failed refreshes must remain stale and retain the last successful timestamp and snapshot.
- Dispenser EXPIRATION accepted range differs between decoder (≤2^53-1) and indexer (≤2^64-1); the decoder comment's claim that they match is false - Action manifest labels DISPENSER_CANCEL/DISPENSER_EDIT as legacy with no indexer twin, but the indexer writes them as live action names - Testnet: the indexer can still settle fills on a cancelled dispenser after the decoder has stopped capturing payments to it - Decoder reorg test lists its deleted tables but nothing classifies every src/sql table; pubkeys (source of the indexer's consensus source_pubkey) is u - Decoder cross-repo constant guards use bare fs.existsSync instead of siblingCheckout, so they can pass against a peer's uncommitted main checkout - xchain-decoder auto-migration guard has the same quote-blind /* */ strip, so destructive clauses hidden between string literals auto-apply - Live-column guard lets an auto MODIFY that omits CHARACTER SET quietly switch a utf8mb4 column back to the table's utf8mb3 default - Live-schema MODIFY guard lets an auto migration silently narrow DECIMAL, DATETIME/TIMESTAMP and floating-point columns - GET /status publishes `lag` but drops `node_height_stale`, so the node's bootstrap gate can certify a frozen-tip decoder as caught up - getRawTransaction returns any truthy result without a hex-string shape check, unlike getBlockHash and getrawmempool - Non-forceable resync gate fails open on a non-numeric count, while the dispenser gate beside it fails closed - Mempool unattributed-ACTION blanking ignores dispense outputs, so it can blank an ACTION the block path would store
Add a gated u64 parser for dispenser create and edit expirations. Preserve legacy rejection below activation and cover unsafe integer, overflow, and conformance boundaries.
Allow a sibling main checkout only when its declared commit matches HEAD and both its index and worktree are clean.
Refresh the vendored action manifest from canonical documentation and update its generated identity pin.
Describe the gated dispatch-set check and why decoder-local allowlists remain unsafe across replay eras.
Rename the gate table so it is not a second activation registry and split the long describe block.
Preserve legacy Number-based create and edit behavior below an unarmed block-time activation. Above the gate, validate the original expiration token in exact decimal space before registering or extending a dispenser.
Describe the raw-token check without claiming it runs before the existing Number conversion.
Condense the activation rationale while preserving every value and export. The constants module now satisfies the 400-line readability ratchet.
# Conflicts: # src/XChainDecoder/dispenser_registration.js # src/protocol/constants.js
The pin predated added test files and titles; four retitled tests no longer match their old titles.
Reject unpinned migrations that sort before the newest pinned fixture entry, while continuing to allow newly dated migrations. Add focused regression coverage for the backdated case.
clear_reorg_halt.js and db/migrate.js now take their database settings from src/config.js instead of reading process.env directly. The config home reads every value live, so the .env each entry point loads before reading is still what it gets. The config.js header no longer lists the two entry points as exempt.
Mempool admission parsed every pending tx with no open-dispenser set, so a payment to an open dispenser never became a dispense output there. An ACTION whose source cannot be resolved then failed hasStorableContent and was blanked to an empty string, while the block path, which loads the set, stores the same tx with its ACTION text on confirm. Each mempool cycle now loads the set once on mempoolDb through getAllOpenDispenserAddresses with the cancelGraceFloor the block loop uses, taking wall-clock seconds as the next block's time, and hands it to parseTransaction. A failed load is logged and the cycle classifies against an empty set so pruning and new arrivals keep running. Tests cover the loaded set reaching the parse, the floor argument, and the failed-load path; the isolation spy records the new mempoolDb read, and the suite-title pin carries the three new titles.
Bump to 0.23.0 and record the release changelog. Arm the v0.23.0 testnet gates at BTC 156230, LTC 4912984 and DOGE 67989993, with instant 1791804379 for the time and change rows; mainnet stays unarmed. Tests that pinned the unarmed testnet state now read the armed rows, and the identity and suite-title pins are regenerated.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this release carries
Added
Changed
Fixed
Testnet activation
MIRROR_ADMISSION_ACTIVATION.BTC:testnetonBTC:testnetat height154234MIRROR_ADMISSION_ACTIVATION.LTC:testnetonLTC:testnetat height4903068MIRROR_ADMISSION_ACTIVATION.DOGE:testnetonDOGE:testnetat height67936053MIRROR_ADMISSION_CONSUMER_ACTIVATION.BTC:testnetonBTC:testnetat height154291MIRROR_ADMISSION_CONSUMER_ACTIVATION.LTC:testnetonLTC:testnetat height4903291MIRROR_ADMISSION_CONSUMER_ACTIVATION.DOGE:testnetonDOGE:testnetat height67936888ANCHOR_ATTEST_BARRIER_ACTIVATION.BTC:testnetonBTC:testnetat height154291TOKEN_BRIDGE_ACTIVATION.BTC:testnetonBTC:testnetat height154567TOKEN_BRIDGE_ACTIVATION.LTC:testnetonLTC:testnetat height4903068TOKEN_BRIDGE_ACTIVATION.DOGE:testnetonDOGE:testnetat height67951140TOKEN_POLICY_INHERITANCE_ACTIVATION.BTC:testnetonBTC:testnetat height154567TOKEN_POLICY_INHERITANCE_ACTIVATION.LTC:testnetonLTC:testnetat height4903068TOKEN_POLICY_INHERITANCE_ACTIVATION.DOGE:testnetonDOGE:testnetat height67951140ORACLE_PRICE_AGE_HOURLY_ACTIVATION.BTC:testnetonBTC:testnetat height154778ORACLE_PRICE_AGE_HOURLY_ACTIVATION.LTC:testnetonLTC:testnetat height4905005ORACLE_PRICE_AGE_HOURLY_ACTIVATION.DOGE:testnetonDOGE:testnetat height67956923LIST_SHARE_ACTIVATION.BTC:testnetonBTC:testnetat height154777LIST_SHARE_ACTIVATION.LTC:testnetonLTC:testnetat height4905004LIST_SHARE_ACTIVATION.DOGE:testnetonDOGE:testnetat height67956922LIST_SHARE_CONSUMER_ACTIVATION.BTC:testnetonBTC:testnetat height154777LIST_SHARE_CONSUMER_ACTIVATION.LTC:testnetonLTC:testnetat height4905004LIST_SHARE_CONSUMER_ACTIVATION.DOGE:testnetonDOGE:testnetat height67956922LIST_UNION_ACTIVATION.BTC:testnetonBTC:testnetat height154777LIST_UNION_ACTIVATION.LTC:testnetonLTC:testnetat height4905004LIST_UNION_ACTIVATION.DOGE:testnetonDOGE:testnetat height67956922LIST_TRANSFER_ACTIVATION.BTC:testnetonBTC:testnetat height154777LIST_TRANSFER_ACTIVATION.LTC:testnetonLTC:testnetat height4905004LIST_TRANSFER_ACTIVATION.DOGE:testnetonDOGE:testnetat height67956922LIST_ADDRESS_REF_ACTIVATION.BTC:testnetonBTC:testnetat height154777LIST_ADDRESS_REF_ACTIVATION.LTC:testnetonLTC:testnetat height4905004LIST_ADDRESS_REF_ACTIVATION.DOGE:testnetonDOGE:testnetat height67956922LIST_TICK_COIN_ACTIVATION.BTC:testnetonBTC:testnetat height154777LIST_TICK_COIN_ACTIVATION.LTC:testnetonLTC:testnetat height4905004LIST_TICK_COIN_ACTIVATION.DOGE:testnetonDOGE:testnetat height67956922MARKET_LIST_SOURCE_ACTIVATION.BTC:testnetonBTC:testnetat height154777MARKET_LIST_SOURCE_ACTIVATION.LTC:testnetonLTC:testnetat height4905004MARKET_LIST_SOURCE_ACTIVATION.DOGE:testnetonDOGE:testnetat height67956922LIST_CHANGE_REMATCH_ACTIVATION.BTC:testnetonBTC:testnetat height154777LIST_CHANGE_REMATCH_ACTIVATION.LTC:testnetonLTC:testnetat height4905004LIST_CHANGE_REMATCH_ACTIVATION.DOGE:testnetonDOGE:testnetat height67956922LIST_SHARE_PRODUCER_ACTIVATION.BTC:testnetonBTC:testnetat height154777ORACLE_HOURLY_WINDOW_FIRST_ROUND.testnetonoracle:testnetat height5082ANCHOR_EMPTY_FOLD_REJECT_ACTIVATION.BTC:testnetonBTC:testnetat height156230ANCHOR_EMPTY_FOLD_REJECT_ACTIVATION.LTC:testnetonLTC:testnetat height4912984ANCHOR_EMPTY_FOLD_REJECT_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993COOLDOWN_MATURITY_ESCROW_REVERSAL_ACTIVATION.BTC:testnetonBTC:testnetat height156230COOLDOWN_MATURITY_ESCROW_REVERSAL_ACTIVATION.LTC:testnetonLTC:testnetat height4912984COOLDOWN_MATURITY_ESCROW_REVERSAL_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993DISPENSER_REFILL_POLICY_ACTIVATION.BTC:testnetonBTC:testnetat height156230DISPENSER_REFILL_POLICY_ACTIVATION.LTC:testnetonLTC:testnetat height4912984DISPENSER_REFILL_POLICY_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993ATTEST_RELAY_RESPONSE_DEADLINE_ACTIVATION.BTC:testnetonBTC:testnetat block time1791804379ATTEST_RELAY_RESPONSE_DEADLINE_ACTIVATION.LTC:testnetonLTC:testnetat block time1791804379ATTEST_RELAY_RESPONSE_DEADLINE_ACTIVATION.DOGE:testnetonDOGE:testnetat block time1791804379BRIDGE_ROW_FIELDS_TERMINAL_ACTIVATION.BTC:testnetonBTC:testnetat height156230BRIDGE_ROW_FIELDS_TERMINAL_ACTIVATION.LTC:testnetonLTC:testnetat height4912984BRIDGE_ROW_FIELDS_TERMINAL_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993ADMIT_CHAIN_MARGIN_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993ATTEST_BATCH_HEAD_STATE_HASH_ACTIVATION.BTC:testnetonBTC:testnetat height156230ATTEST_BATCH_HEAD_STATE_HASH_ACTIVATION.LTC:testnetonLTC:testnetat height4912984ATTEST_BATCH_HEAD_STATE_HASH_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993ANCHOR_PREACTIVATION_STATUS_ACTIVATION.BTC:testnetonBTC:testnetat height156230ANCHOR_PREACTIVATION_STATUS_ACTIVATION.LTC:testnetonLTC:testnetat height4912984ANCHOR_PREACTIVATION_STATUS_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993ANCHOR_ARCHIVE_FOLD_TERM_ACTIVATION.BTC:testnetonBTC:testnetat height156230ANCHOR_ARCHIVE_FOLD_TERM_ACTIVATION.LTC:testnetonLTC:testnetat height4912984ANCHOR_ARCHIVE_FOLD_TERM_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993CROSS_CHAIN_REMOTE_TOKEN_ACTIVATION.BTC:testnetonBTC:testnetat height156230CROSS_CHAIN_REMOTE_TOKEN_ACTIVATION.LTC:testnetonLTC:testnetat height4912984CROSS_CHAIN_REMOTE_TOKEN_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993SEND_GATED_TOTAL_TICK_ID_ACTIVATION.BTC:testnetonBTC:testnetat block time1791804379SEND_GATED_TOTAL_TICK_ID_ACTIVATION.LTC:testnetonLTC:testnetat block time1791804379SEND_GATED_TOTAL_TICK_ID_ACTIVATION.DOGE:testnetonDOGE:testnetat block time1791804379PRICE_LANDED_STRICT_ACTIVATION.BTC:testnetonBTC:testnetat height156230PRICE_LANDED_STRICT_ACTIVATION.LTC:testnetonLTC:testnetat height4912984PRICE_LANDED_STRICT_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993ATTEST_RELAY_FEE_ACTIVATION.BTC:testnetonBTC:testnetat height156230ATTEST_RELAY_FEE_ACTIVATION.LTC:testnetonLTC:testnetat height4912984ATTEST_RELAY_FEE_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993BIGINT_SURFACE_STRIP_ACTIVATION.BTC:testnetonBTC:testnetat height156230BIGINT_SURFACE_STRIP_ACTIVATION.LTC:testnetonLTC:testnetat height4912984BIGINT_SURFACE_STRIP_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993ACTION_ADMISSION_DISPATCHED_ONLY.BTC:testnetonBTC:testnetat height156230ACTION_ADMISSION_DISPATCHED_ONLY.LTC:testnetonLTC:testnetat height4912984ACTION_ADMISSION_DISPATCHED_ONLY.DOGE:testnetonDOGE:testnetat height67989993VM_LINT_BANNED_WITH_ACTIVATION.BTC:testnetonBTC:testnetat height156230VM_LINT_BANNED_WITH_ACTIVATION.LTC:testnetonLTC:testnetat height4912984VM_LINT_BANNED_WITH_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993VM_LINT_NESTING_DEPTH_ACTIVATION.BTC:testnetonBTC:testnetat height156230VM_LINT_NESTING_DEPTH_ACTIVATION.LTC:testnetonLTC:testnetat height4912984VM_LINT_NESTING_DEPTH_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993DISPENSER_DELAY_PROTOCOL_TIME_ACTIVATION.BTC:testnetonBTC:testnetat height156230DISPENSER_DELAY_PROTOCOL_TIME_ACTIVATION.LTC:testnetonLTC:testnetat height4912984DISPENSER_DELAY_PROTOCOL_TIME_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993BRIDGE_POLICY_REFUSAL_RECORD_ACTIVATION.BTC:testnetonBTC:testnetat height156230BRIDGE_POLICY_REFUSAL_RECORD_ACTIVATION.LTC:testnetonLTC:testnetat height4912984BRIDGE_POLICY_REFUSAL_RECORD_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993PRICE_WIRE_TRAILING_ACTIVATION.BTC:testnetonBTC:testnetat height156230PRICE_WIRE_TRAILING_ACTIVATION.LTC:testnetonLTC:testnetat height4912984PRICE_WIRE_TRAILING_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993ORACLE_SNAPSHOT_AGE_SECONDS_ACTIVATION.BTC:testnetonBTC:testnetat height156230ORACLE_SNAPSHOT_AGE_SECONDS_ACTIVATION.LTC:testnetonLTC:testnetat height4912984ORACLE_SNAPSHOT_AGE_SECONDS_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993BET_FEED_LIST_EDIT_ACTIVATION.BTC:testnetonBTC:testnetat height156230BET_FEED_LIST_EDIT_ACTIVATION.LTC:testnetonLTC:testnetat height4912984BET_FEED_LIST_EDIT_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993CROSS_CHAIN_OFFER_LIST_EXPORT.BTC:testnetonBTC:testnetat height156230CROSS_CHAIN_OFFER_LIST_EXPORT.LTC:testnetonLTC:testnetat height4912984CROSS_CHAIN_OFFER_LIST_EXPORT.DOGE:testnetonDOGE:testnetat height67989993VM_LINT_DESTRUCTURE_ACTIVATION.BTC:testnetonBTC:testnetat height156230VM_LINT_DESTRUCTURE_ACTIVATION.LTC:testnetonLTC:testnetat height4912984VM_LINT_DESTRUCTURE_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993GOV_TALLY_FAILOVER_ACTIVATION.BTC:testnetonBTC:testnetat height156230BRIDGE_PROOF_READY_SNAPSHOT_ACTIVATION.BTC:testnetonBTC:testnetat height156230BRIDGE_PROOF_READY_SNAPSHOT_ACTIVATION.LTC:testnetonLTC:testnetat height4912984BRIDGE_PROOF_READY_SNAPSHOT_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993LANDING_CLEAR_FRONTIER_ACTIVATION.BTC:testnetonBTC:testnetat height156230LANDING_CLEAR_FRONTIER_ACTIVATION.LTC:testnetonLTC:testnetat height4912984LANDING_CLEAR_FRONTIER_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993REORG_SNAPSHOT_ACTIVATION.BTC:testnetonBTC:testnetat height156230CROSS_CHAIN_OFFER_LIST_ENFORCEMENT.BTC:testnetonBTC:testnetat height156230CROSS_CHAIN_OFFER_LIST_ENFORCEMENT.LTC:testnetonLTC:testnetat height4912984CROSS_CHAIN_OFFER_LIST_ENFORCEMENT.DOGE:testnetonDOGE:testnetat height67989993FEDERATED_HUB_ACTIVATION.BTC:testnetonBTC:testnetat height156230FEDERATED_HUB_ACTIVATION.LTC:testnetonLTC:testnetat height4912984FEDERATED_HUB_ACTIVATION.DOGE:testnetonDOGE:testnetat height67989993Release v0.23.0
Base:
masteratd204894371c884dad2febe1cbdec24bd87e2dee0Head:
release/v0.23.0atae761b838307cdd9578b2fa05b7b8859bdaff795Landed refs