Skip to content

Release v0.20.1 - #17

Merged
jdogresorg merged 29 commits into
masterfrom
release/v0.20.1
Sep 24, 2026
Merged

jdogresorg merged 29 commits into
masterfrom
release/v0.20.1

Conversation

@jdogresorg

@jdogresorg jdogresorg commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Release v0.20.1

Coordinated platform release across the 13-repo v0.20.1 train.

  • Base: master
  • Head: release/v0.20.1

What changes

  • Applies request gating before large-body parsing, preserves node error bodies, and sanitizes tracker halt reasons.
  • Advertises leg-headroom capability and logs undersized P2SH legs for outputless reveals.
  • Runs the API under tini and reaps encoder container zombies.
  • Refreshes manifest identity guards, observability pins, suite-title pins, and module-layout documentation.

Sibling release PRs

Filled in by open-release-prs.sh --execute once every PR above has a number:

Move observability and crash-handler registrations into synchronous helpers while retaining each suite and hook once. Preserve titles, assertions, comments, await order, and execution order.
bin/pin-identity.js now writes the coins plus vendoredTwins pin format
to bin/pins/at1-identity.json, but ci-full.sh and the CI workflow still
compared against the old bin/pins/identity.json (coins plus conformance),
which lacks vendoredTwins entirely and reads every vendored twin as a
false added diff. Point both at the new pin file and check the new
group names so the identity tier compares against the format the repo
actually produces.
…e label cap

Byte-identical copy of xchain-hub/src/observability/index.js via bin/sync-observability.sh: unmatched request paths now share one overflow label past a fixed number of distinct first segments, so a flood of unmatched URLs cannot spend the shared per-metric series budget.
The identity pin hashes every vendored twin file; src/observability/index.js changed with the canonical copy, so the pin is regenerated from the tree and nothing else in it moves.
…e sweep

Generated block: do not hand-edit it. Change the tier config and re-run the
tier wirer, which owns both this file and the hook so the two cannot drift.

The pre-push venue gate ran the whole GitHub transcript on every push, coverage
re-runs and perf scenarios included. That is the right set to grade a release
with and the wrong set to pay for on every push, especially while three venues
serve every repo on the platform: a long gate does not just cost its own
minutes, it forms a queue behind itself for every other session pushing that
hour.

A push now grades the fast tier. The tiers named in the generated block move to
the scheduled full sweep, which already runs against every repo every three
hours and before any release or deploy, so nothing stops being graded.

The verdict line is rewritten with it, which is the part that matters: a fast
run can no longer print "all tiers green (same set GitHub CI runs)". It prints
which tiers were deferred and states plainly that they were NOT graded there,
so a fast green can never be mistaken for a full one. The dispatcher's verdict
cache is keyed on repo + sha + cmd, so a fast green cannot stand in for a full
one either.
Install tini in the runtime image and use it as the container entrypoint so child processes are reaped and signals reach the API process.
…modules, document the instance lock file

The api.js guard, limiter and CORS comments name the current module paths, the
single-instance rationale counts the five in-process stores that exist, and
ENCODER_INSTANCE_LOCK_FILE, prescribed by both lock-conflict errors, is now in
the README env table. Adds the browser entry unit test the coverage survey
required.
…modules, document the instance lock file

The api.js guard, limiter and CORS comments name the current module paths, the
single-instance rationale counts the five in-process stores that exist, and
ENCODER_INSTANCE_LOCK_FILE, prescribed by both lock-conflict errors, is now in
the README env table. Adds the browser entry unit test the coverage survey
required.
…s, sanitize tracker halt reasons

Bodies are size-checked after the limiter and concurrency gates, HEAD /status
is a probe, estimatesmartfee keeps the JSON-RPC error body,
getTransactionHex handles both verbose shapes, a tracker halt_reason no
longer reaches callers verbatim, and a dead import and stale manifest
pointers are removed.
…anized modules, document the instance lock file
Pins the build image by digest to the node:22.23.2-bookworm build whose
V8/ICU match xchain-vm's consensus runtime pin, so a floating tag can no
longer drift the base past a Node patch that fails that check.
@jdogresorg
jdogresorg merged commit 0f5b08f into master Sep 24, 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