Release v0.12.0 - #12
Merged
Merged
Conversation
…through the shared validator Review round 2026-08-29 (xchain-platform board 161 -> 0).
The service logged free text through bare console calls, so its lines carried no level, no timestamp and no service tag, and LOG_LEVEL and LOG_FORMAT changed nothing an operator could see on any box. patchConsole() goes at the very top of the entry file, above the env-validation gates. Those gates run hundreds of lines before the existing wiring point, and their failures are among the lines an operator most needs framed. The shim's vendored copy is re-synced from the canonical module in xchain-hub in the same change, which brings the credential scrub that catches prefixed names like SERVICE_DB_SECRET= and the token after Bearer. The test bootstrap sets XCHAIN_LOG_PATCH=0 so the suites keep seeing stock console regardless of require order. Where this repo carries its own ported copy of the observability or metrics suite, it is re-ported from the canonical one rather than hand-edited, per the note those files carry. Two contract changes travel with it: the metrics registry is always constructed and only the endpoint stays gated, so a counter registered by a module exists on the default fleet instead of nowhere; and an identical metric re-declaration returns the registered metric rather than throwing, while a different shape still throws. READMEs gain the shim-control env table.
The halt path returns without writing a marker when the database layer has no markReorgHalted, and returned without saying anything either. The write FAILURE one line below was already logged; this branch is the genuinely silent one, and it is the worst case in the set: a decoder decides to stop, cannot persist why, and /status, /live and the JSON-RPC health method all go on reporting no halt. It now emits a REORG_HALT record carrying the reason and depth it was about to record, and says plainly that the marker could not be persisted so the health surfaces will not report it. The crash record carries the halt state, so a crash during a halt is distinguishable from an ordinary one, and an uncaughtException handler joins the rejection handler that was already there. The rejection handler still logs and continues; that choice is deliberate and unchanged. Both are registered inside startApi, because several suites require this module in-process under mocha and a module-scope exit would abort the run instead of failing one test. Six health-route catches swallowed their cause, five of them empty. If the halt probe threw, the routes reported no halt: a halted decoder that reads healthy. They now log at warn, throttled per probe and route, with the suppressed count on the next line. Without the throttle a database outage turns the rate limiter's ceiling into more log volume per hour than this service normally emits in a day, which would eat the retention window the caps are sized on. Control flow and status codes are untouched. In db.js, one catch of ten now logs: the temporary-table drop, which is the only one whose failure lands on a different, later query, so the next mempool diff fails on a table it did not create with nothing naming the drop that lost. The nine connection releases stay silent on purpose, reasoned at the site. The prose crash lines are gone. Each duplicated the record beside it, and a collector reading warn and above would file one crash as two findings. Nothing in the tree greps either string.
Adds ROLLCALL to VALID_ACTION_NAMES and re-vendors the action manifest. Without it every roll call on DOGE is dropped at decode, silently, which would evict the whole federation once the BTC close starts asking. Allowlist is 36 and identical to the manifest wireDecoded set. Suite: 1426 passing, 11 pending, 0 failing.
…ne line Picks up the canonical fix: a trailing error argument expanded across lines and only the first line carried the timestamp, level and service, leaving every line after it an orphan with no operation, no error and no coin. The breaks are escaped now; the stack still ships on one line. Vendored copy, not edited here. Behaviour changes belong in the canonical module first.
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.
Cuts xchain-decoder for the v0.12.0 release train. 7 commits from master.
Added
Fixed
Changed