Skip to content

Release v0.21.0 - #51

Merged
jdogresorg merged 78 commits into
masterfrom
release/v0.21.0
Sep 30, 2026
Merged

jdogresorg merged 78 commits into
masterfrom
release/v0.21.0

Conversation

@jdogresorg

@jdogresorg jdogresorg commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

Release v0.21.0

Base: master at 77c6ad22a369323dbcae81ec2f8808e514b1d88b
Head: release/v0.21.0 at eaaa84a53673d3144b2b918b3d6e5ca8ec75d800

Landed refs

  • eaaa84a Revert "Merge develop into release/v0.21.0"
  • a403bfa Merge develop into release/v0.21.0
  • 1058fd0 Merge: Validate the attest-mirror drive script
  • 55da8e4 Merge: Add selector replay analysis
  • 15794d0 Validate the attest-mirror drive script
  • 1df1373 Add selector replay analysis
  • 35b2bca Generalize workflow venue comments
  • 765ba68 Merge develop into release/v0.21.0
  • 6de78f0 Run nightly attest-mirror legs on hosted runners
  • 4a74ba2 Give every matrix shard step the job token for GitHub API reads
  • daed528 Give the matrix stack boot the job token for GitHub API reads
  • ecb6e36 Merge develop into release/v0.21.0
  • 666aa23 Pin CI Node to 22.22.3, the fleet's consensus runtime
  • 8b47116 Give every matrix shard step the job token for GitHub API reads
  • 688ba64 Give the matrix stack boot the job token for GitHub API reads
  • 4443e32 Pin CI Node to 22.22.3, the fleet's consensus runtime
  • 3b8a9c3 chore(release): v0.21.0
  • 8371b5d Fix 27 issues found in a code review round
  • 3180818 Merge: test: provide data dir for module updates
  • cab0f99 test: provide data dir for module updates
  • 96faf9c Merge: sync trunk
  • 2f6db9f sync trunk
  • a81b602 Merge: Pass the anchor fold arming variable to regtest indexer and hub
  • 29f714e Pass the anchor fold arming variable to regtest indexer and hub
  • ee9be79 Merge: Support both SDK encoder accessors
  • bf7d365 Merge: Guard migrate status probe by source contract
  • 3662038 Support both SDK encoder accessors
  • 127ce19 Guard migrate status probe by source contract
  • 611e6cd Merge: Narrow the fast CI test selection
  • a66f891 Narrow the fast CI test selection
  • 4b1715f test: keep update preflight suite within limits
  • 7143fbc sync trunk
  • c34ad99 Merge: test(boundary): align cases with v2 contracts
  • 419818d Merge: test: wire service delivery and privacy coverage
  • d6c20c7 Merge: Document hub result-presence contract
  • cd25e5c Document hub result-presence contract
  • a36504a test(boundary): align cases with v2 contracts
  • 1348808 Merge: Refresh CI sibling dispatcher wording
  • 398fdd0 fix(update): require explicit node data directory
  • 8f9e146 test: wire service delivery and privacy coverage
  • 53fd827 Align config and network chaos contracts
  • 830b2f2 Refresh CI sibling dispatcher wording
  • e4c0c9f test(ci): require the shared sibling checkout in the coverage job
  • 1127268 ci(node): check out coverage siblings through the shared action
  • ffac298 fix(node): check BuildKit availability before clone and database setup
  • 177ff96 fix(node): start module containers with --init and bound healthcheck wget with -T
  • 933d2cb fix(module-service): clone detached local module sources at their checked-out commit
  • 8fcfe43 Merge: Isolate unit test config writes
  • 4d12a8b Isolate unit test config writes
  • 85de032 fix(validator): use regtest namespaces in validator links and encoder URL
  • e453c0b fix(node): validate the running indexer migrate CLI status
  • 789e163 test: stabilize the Stryker dry run over the full suite
  • ad1eb77 Merge: Repoint node to the renamed SDK encoder helper
  • e29504f build: time each ci:full tier
  • 29f2613 fix(node): report cross-coin credential update outcomes
  • 9969063 Repoint node to the renamed SDK encoder helper
  • 26dc99f Merge: Bring integration tier to the current service contracts
  • c58195c Merge: fix(test): isolate config fixtures and surface benchmark failures
  • 162990d Merge: Add scheduled Stryker mutation workflow
  • 8699e42 Bring integration tier to the current service contracts
  • 9f33061 fix(test): isolate config fixtures and surface benchmark failures
  • 1da68a0 Add scheduled Stryker mutation workflow
  • 35b3d1e Merge: Install prototype mixins as non-enumerable methods
  • f4a4454 Install prototype mixins as non-enumerable methods
  • 14d9dae Merge: Require siblings in coverage tier
  • b57c855 Require siblings in coverage tier
  • d14f0a7 Merge: Test price fence SQL builders
  • b29acdb Test price fence SQL builders
  • a091e9f Merge: test information schema SQL builders
  • ec0a008 test information schema SQL builders
  • 6522857 Merge origin/master (v0.20.1 release) into develop
  • de0d189 Enforce c8 --all coverage and re-baseline floors to measured values
  • 9d6acdc Split preferred sidecar tests into named groups
  • 068874c Publish the hub peer port in validator mode
  • a6f188a Write fresh sidecar credentials under safe secret names
  • b6c483e fix(node): roll-call wiring refusal names the public explorer read with no key

…th no key

The explorer's federation reads are public since the operator ruling of
2026-09-23, so the refusal no longer tells an operator to set
DOGE_INDEXER_API_KEY to a federation read key nobody issues.
Persist newly generated RPC and database credentials under their preferred secret aliases so fresh installs avoid deprecated-name warnings. Preserve legacy sidecars for compatibility and cover generation, reload, and rotation behavior.
Add the conditional peer port mapping so validator hubs expose their network listener while standalone hubs remain unchanged. Pin both modes in the service registry tests.
Keep the new credential coverage within the repository's function-size limit while preserving the existing suite and case titles.
coverage:check previously skipped source files the unit suite never imports, so floors sat far under real coverage. Add --all to both coverage scripts, tighten every floor to within 1.5 points of the full-tree measurement, and pin --all with a sync test.
Cover exact schema, table, multi-table, and size query output, including quote escaping.
Cover chain-wide, network-scoped, manual, and quote escaping outputs.
Run the coverage ratchet with strict sibling checks, matching the CI tier.
Preserve source descriptors while hiding mixed-in methods from enumeration. Cover every database and downloader mixin method with descriptor assertions.
Runs weekly and on demand, and uploads the mutation report as an artifact.
Load benchmark and smoke inputs from tracked public fixtures, and keep CI and secret environment tests off operator config paths. Fail benchmark runs when a scenario reports an error and keep strict sibling checks armed for coverage.
Stops go through the per-module stop budget, docker build matching skips the
buildx probe, node and decoder credentials are seeded where the config service
reads them, and the test env busts the snake_case config and module service
modules so patched directories take effect instead of writing into the repo.
Use requireEncoder for signer broadcasts and chained stake inputs. Align the validator test doubles with the renamed SDK surface.
When a module rebuild succeeds but credential reconciliation fails for
another coin, update now reports the partial outcome and exits nonzero.
Each tier's PASS or FAIL line in ci:full now carries its elapsed seconds.
Stryker now mutates the config service too, runs unit and integration tests
with a module shim its sandbox needs, and uses a non-dotted temp directory.
The migration precondition scan now checks the migrate CLI's --status answer
from the running indexer instead of assuming it, with tests for the probe.
… URL

Regtest mapped the stake chain to BTC and the DOGE publisher to DOGE, so
regtest stake and unstake output linked mainnet /BTC/validator pages and the
default signer encoder pointed at the mainnet /DOGE namespace. Regtest now
maps to RBTC and RDOGE, and the tests assert full URLs on every network.
Load the unit suite with a temporary config directory before production configuration is cached. Clean the scratch directory after the run and verify it stays outside the checkout.
…cked-out commit

A local module source checked out at a detached HEAD was cloned by branch name, so a deploy picked up the branch tip instead of the checked-out commit. Detect a detached local source, clone it without -b, and skip the branch-tip check for it. A unit test behind the --unit-test entry point proves the deployed commit matches the detached commit.
Prefer the public encoder accessor when available and fall back to the legacy underscore method used by the locked SDK. Cover emitted signer broadcasts and chained stake funding for both supported SDK shapes.
The fold gate is unpinned on regtest, so a deployed venue could not arm it
from the host. Carry XC_ANCHOR_FOLD_REGTEST_ACTIVATION to the regtest
indexer and the hub beside the mirror admission variable, never to mainnet
or testnet.
Create and clean up a fresh temporary node data directory around each update suite while preserving the caller environment.
Each fix was re-derived from the code, verified against its own tests,
and adversarially re-checked before it was accepted.

- Node's migrationMode twin has drifted from the indexer's: untagged or unknown mode reads as null, not 'manual'
- The twin cross-reference in node's migrationMode names an indexer symbol that does not exist
- Twin cross-references between node and indexer migration parsers are stale or missing
- clear-reorg-halt relay reads err.stdout/err.stderr, but execContainer rejects with a bare callback-style ...
- A --reason starting with '-' passes the node's check but the decoder's parseArgs refuses it as a missing ...
- Tracker archive height may understate actual snapshot data height
- Archive metadata trusted before cryptographic verification
- Archive identity (coin/network/module) is not verified at restore time
- Stake pre-check doesn't check delegations, so a plan the indexer will reject as 'already delegated' is shown ...
- Stake pre-check refuses re-staking a key whose stake has fully cooled down, but the indexer accepts it once ...
- Both stake and unstake read only the first 100-row page of getValidators, so a stake off that page reads as ...
- Unstake CLI treats any status='valid' stake row as active, so it broadcasts UNSTAKE for stakes already ...
- A funding chain that breaks at the final MINT→STAKE hop still broadcasts an unchained STAKE instead of ...
- Unstake plan prints one stakes row's amount as the whole stake to be withdrawn and locked
- stakeTiming doc cites xchain-indexer/src/actions/unstake.js, which is now the actions/unstake/ directory
- reset: decoder/indexer bounce swallows restartContainer failures, so reset exits 0 with the service down
- reset (docker DB mode): MariaDB root credential is first resolved after node data and tracker volume are wiped
- Stake CLI's 'already staked' check drifts from indexer validateFreeKey: ignores delegations and the key-reuse ...
- DEFAULT_STAKE_AMOUNT comment attributes the 25000 floor to the indexer's STAKING.CAPABILITIES; it is the ...
- Node execs only src/clear_reorg_halt.js, which decoders v0.16.0–v0.18.x do not have; the shim covers ...
- Gate ignores decoder's reorg_halt_parked, so a parked decoder whose halt marker was never written passes the ...
- Gate header says an indexer database cannot hold sync_halt, but xchain-sync creates and writes sync_halt in ...
- migration_files.js header describes an indexer migrations layout the indexer's runner does not read
- clear-reorg-halt is missing from mutatingCommands, so its audited DB write runs without the command lock
- skipsPreAction exempts every validator subcommand from the command lock, including key-regenerating init ...
- When the UTXO tracker is unreachable, the balance reads 0 and the CLI blocks with 'fund it first' instead of ...
- readChainState reads token.mints without unwrapping the one-element array envelope the SDK documents, so a ...
Copy the hosted rail workflows and helper stack. Schedule only proven attest-mirror legs while keeping bridge execution manual.
Remove environment-specific names from hosted runner documentation while preserving workflow behavior.
Replay first-parent develop history against current and narrowed consensus prefixes. Report selection shares and verify required source-to-test mappings.
Fail the plan job before matrix creation when the local driver is missing or the scheduled manifest names an unsupported driver.
This reverts commit a403bfa, reversing
changes made to 765ba68.
@jdogresorg
jdogresorg merged commit 194789d into master Sep 30, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant