Repository navigation
Release v0.27.0 - #86
Merged
Merged
Conversation
Recreate the shared hub after both bridge rails are installed so its first seeded capability snapshot cannot precede the bitcoin rail. Cover the gate, ordering, exported environment, and recreate invocation in the workflow contract.
Extract workflow environment runners and group validator assertions into focused registration helpers so each test function remains within the structure limit.
…push A recreated hub takes 40 to 60 s to open its API, while the post-deploy config push gave up after about 27 s, so every hub update reported failure and the pushed config never applied. The push now tries for three minutes, and a push that succeeds on its final attempt is no longer reported as a failure.
zod below 4.6.6 (GHSA-mrhx-c7xc-m3w5) and body-parser 2.3.0 (GHSA-27r3-jxmh-p828) failed the production audit at high. zod is overridden to ^4.6.6 (resolves 4.6.7) and body-parser moves to 2.4.0 within express's range, so npm audit --omit=dev --audit-level=high passes.
…iaDB, and move a second install off busy host ports install returned early for any installed module, so the printed remedy 're-run install with XCHAIN_NODE_FORCE_BOOTSTRAP=1' did nothing; an installed utxo-tracker, decoder or indexer now reinstalls and takes the restore again, stopping the running container gracefully, while other modules still return. The MariaDB readiness probe looks the container up on every attempt, and a fresh datadir waits up to 5 min for its first root login before anything else touches it. A second install whose default on-request host port is already published now takes the same port 100 higher (3001 to 3101) instead of stopping on a conflict; the hub and explorer ports still refuse. Unit tests cover each.
Record auto-selected host ports in the per-network sidecar so later config reads and hub updates use the published port. Refuse conflicts for operator-selected ports from either config file and exercise the installed production wrapper.
The consensus runtime re-pins to Node 22.23.4 (V8 12.4.254.21-node.57, ICU 78.3), so CI jobs that load the VM must run that build.
Discover Docker rail stacks, stop hub and mirror services before mutation, recreate checkpoint-owned hub tables, purge local mirrors, and restart cleanly. Add command-level coverage for ordering, stop refusal, and table scope.
Run the coordinated repair from the CLI recovery surface and rebuild tables through schema-only database dumps. Restore the reset operations module to its prior size and keep the command tests focused on database tool calls.
…ER_ROOT_PASSWORD and add --check
…n no root logs in
Create publisher output captures under the configured temporary directory so restricted host temp locations do not erase source-health diagnostics. Exercise the refusal path with an unavailable host TMPDIR.
… lock is never reclaimed Creating the lock with an exclusive open followed by a write left a window where the file existed empty, and a contender treated that empty file as a crashed creator's lock and reclaimed it, letting two mutating commands run at once. The lock payload is now written to a private temp file and hard-linked into place, so the lock path only ever appears with its full contents.
A mistyped chain or network fell through to the decoder container lookup, so clear-reorg-halt reported that no decoder container was installed instead of saying the value was unknown. The command now checks both against the known coins and networks first and exits with a message naming the bad value and the accepted ones.
…down When the database wipe failed after the services were stopped, the rejection escaped the reset, skipped the restart pass and left the indexer silently stopped with no message. The database step failure is now caught and reported like any other started wipe, naming what was already cleared and every stopped service left down for a re-run.
Autoheal recorded each restart with the clock taken when the pass began, so the restart cooldown and the recovery probation both started before the container was stopped, up to the full stop budget early and earlier still for later containers in the same pass. The stamp now advances the pass clock by the real time the restart consumed, so both windows run from the finished restart.
…ice list A typo in the chain or network of a command such as stop all still produced the shared explorer entry, so the command stopped the explorer, matched no chain container and exited 0. Unknown chains and networks are now rejected up front with an error naming the bad value, before any service is touched.
A paused or hung hub accepts the connection and never answers, so each of the 60 push attempts waited out the 60 s connector timeout and a mutating command held the command lock for about an hour. The retry loop now also stops once three minutes of wall time have passed, whatever each attempt costs.
…g push The hub reports a refused config push, such as a PBFT "Not the leader" refusal, as a normal JSON-RPC result holding an error field, and the connector read any non-null result as delivered, so the lifecycle command exited 0 with the config never applied. The connector now returns false for such a result and records the hub's error text, so the retry loop retries and finally surfaces the real cause.
…the hub The precheck ran the hub install for every command, and that install restarts a hub whose state is exited, so a read-only ps started a hub the operator had stopped and then printed its stale exited status. The hub install now runs only for state-changing commands, so ps, tail, logs and monitor leave every container's run state as they found it.
…es nothing exec printed the raw error object when the command failed inside a container and exited 0, and it also exited 0 when the selection matched no installed service, so scripts chaining on exec carried on after a failure. It now prints the command output, exit code and stderr as a short reason and exits 1 when any run fails or nothing matched.
…of a one-chain stop start, stop and restart now exit 1 with the unmatched service, chain and network when a selection matches no installed container, as exec already does; an "all" selection with some services not installed still succeeds. An unknown chain or network fails inside the same exit path. start, stop, restart and uninstall leave the shared explorer out of an "all" selection scoped to one chain, since that explorer serves every chain; with no chain named they still include it. install, update and recreate keep including it so a per-chain install still gets an explorer.
Lifecycle commands now fail when nothing selected is installed, and an unknown chain or network is refused by name. Three suites outside the unit run still asserted the old silent success: the precheck regression case, the filterCommandParameters fuzz cases and the empty-registry e2e scenarios. They now assert the named error and that no container is touched; an empty chain or network still means all.
Applies the adversarially verified fixes from the 2026-10-30 review round for this repo (21 files).
Applies the adversarially verified fixes from the 2026-10-31 review round for this repo (31 files).
Applies the adversarially verified fixes from the 2026-10-31 review round for this repo (3 files).
Applies the adversarially verified fixes from the 2026-10-31 review round for this repo (5 files).
Applies the adversarially verified fixes from the 2026-10-31 review round for this repo (7 files).
Release v0.27.0 manifest
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
ARCHIVE_ROLLCALL_PRESENCE_ACTIVATION.BTC:testnetonBTC:testnetat height158396ARCHIVE_ROLLCALL_PRESENCE_ACTIVATION.LTC:testnetonLTC:testnetat height4946814ARCHIVE_ROLLCALL_PRESENCE_ACTIVATION.DOGE:testnetonDOGE:testnetat height68033131CHECKPOINT_SUPERSEDE_ACTIVATION.BTC:testnetonBTC:testnetat height158396CHECKPOINT_SUPERSEDE_ACTIVATION.LTC:testnetonLTC:testnetat height4946814CHECKPOINT_SUPERSEDE_ACTIVATION.DOGE:testnetonDOGE:testnetat height68033131ADMIT_CHAIN_MARGIN_ACTIVATION.LTC:testnetonLTC:testnetat height4946814MATCH_EQUAL_PRICE_OLDEST_FIRST.BTC:testnetonBTC:testnetat height158396MATCH_EQUAL_PRICE_OLDEST_FIRST.LTC:testnetonLTC:testnetat height4946814MATCH_EQUAL_PRICE_OLDEST_FIRST.DOGE:testnetonDOGE:testnetat height68033131DIVIDEND_EMPTY_ALLOW_LIST_DENIES_ACTIVATION.BTC:testnetonBTC:testnetat height158396DIVIDEND_EMPTY_ALLOW_LIST_DENIES_ACTIVATION.LTC:testnetonLTC:testnetat height4946814DIVIDEND_EMPTY_ALLOW_LIST_DENIES_ACTIVATION.DOGE:testnetonDOGE:testnetat height68033131AIRDROP_ZERO_LEGS_OMITTED_ACTIVATION.BTC:testnetonBTC:testnetat height158396AIRDROP_ZERO_LEGS_OMITTED_ACTIVATION.LTC:testnetonLTC:testnetat height4946814AIRDROP_ZERO_LEGS_OMITTED_ACTIVATION.DOGE:testnetonDOGE:testnetat height68033131TICK_NORMALIZE_ACTIVATION.BTC:testnetonBTC:testnetat height158396TICK_NORMALIZE_ACTIVATION.LTC:testnetonLTC:testnetat height4946814TICK_NORMALIZE_ACTIVATION.DOGE:testnetonDOGE:testnetat height68033131SAME_TOKEN_OFFER_REFUSAL_ACTIVATION.BTC:testnetonBTC:testnetat height158396SAME_TOKEN_OFFER_REFUSAL_ACTIVATION.LTC:testnetonLTC:testnetat height4946814SAME_TOKEN_OFFER_REFUSAL_ACTIVATION.DOGE:testnetonDOGE:testnetat height68033131Release v0.27.0
Base:
masteratf6c3c4142e40d87c46aacf87ddceb1ed62485bb2Head:
release/v0.27.0atb5f283b21e6612ab80d74c29e11128fe65a597beLanded refs