Merge train 198: clear four of the five red CI gates on main (v0.5.1576) - #10298
Merged
Merged
Conversation
added 8 commits
September 15, 2026 16:17
Both functions are read only from wasm-host-gated call sites (this file's Memory thunks and crate::webassembly), so a build without the feature failed -D warnings as dead code. CI's warnings job has been red on main since the gate started running them.
#10166 added a thread_local! under cfg(debug_assertions) that counts live program-cell views so debug builds can prove a witness is never written under one. It is absent from shipping builds and cannot cost _tlv_get_addr there, so it takes the checker's own record-it path rather than a hot-cache slot.
The manifest gained bun-pty without the generated artifacts being regenerated, which the check job's drift gate reports on every PR.
…ding stack_top_respects_custom_thread_stack_sizes compared top - address against the REQUESTED stack size. How much an allocator rounds that request up to, and whether the guard page counts inside the reported region, are per-platform and per-image properties: the comparison failed on Linux CI while holding on this project's own Linux box (glibc 2.39) and on macOS. Assert the fact the walkers depend on instead — a worker's bound is its own, not the spawning thread's.
Two more errors the warnings job never reached, because it failed at the lib stage first. The ic_slow prefix-token test writes the cache through `cache` while the IC reads it through `slot`, a raw-pointer alias the unused_assignments lint cannot see through; write through the alias instead. `assert_rejected_with_compile_error` is called only by a cfg(not(wasm-host)) test, so it carries the same gate.
8a99b36 added a bare typescript fence, which the docs lint rejects: a fence must either include a real example (so perry-doc-tests compiles and runs it) or declare no-test. Move the snippet into docs/examples/runtime/tiny_program.ts with its expected stdout, which is what the page is about — the program shape the tiny specialization admits — so the example is proven rather than opted out.
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (12)
📝 WalkthroughWalkthroughThe PR updates the project version, fixes runtime feature gates and test assertions, refreshes API artifacts, adds a tiny-program example, updates the thread-local allowlist, and records the CI fixes. ChangesRuntime CI and generated artifacts
Estimated code review effort: 3 (Moderate) | ~20 minutes Change: Bug fix ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
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.
This train lands #10296 as v0.5.1576. It clears four of the five CI jobs that have been red on
main, which every open pull request inherits and which keeppr-gatefrom going green for anyone.The source PR's seven commits retain their authorship. The train adds only the version bump; no train repairs were needed.
A shipping build does not change. Every Rust edit is either inside a
mod testsblock —native_stack.rs, theic_slowprefix-token test, and theassert_rejected_with_compile_errorhelper — or a#[cfg(feature = "wasm-host")]gate on two functions whose only callers already sit behind that feature. The compiler proves that last claim: a caller outside the feature would no longer resolve. What remains is the regenerated API reference and.d.ts, one entry in thethread_local!cold allowlist, one docs example, and the changelog fragment.The gates
mainwarnings-D warningsdead code inglobal_this_webassembly.rscheckbun-ptywithout regenerating the artifactsself-test-checkersthread_local!inregex/perex_owner.rscargo-testnative_stack::tests::stack_top_respects_custom_thread_stack_sizeslintsource_fingerprintdriftedlintis the fifth, and it is deliberately not fixed here: the drifted input isCargo.toml, so the remedy is./benchmarks/run_public_baseline.sh— roughly two hours plus a build — and that rerun rewrites the published perry-vs-node numbers. That is a decision to make, not a cleanup to perform. Locally the full gate suite passes 82 of 83, up frommain's 80, withPublic benchmark evidence freshnessthe only failure.cargo-test, and one CI crash that did not reproduceThe source run's
cargo-testjob SIGSEGV'd after 404 of 3,938 tests, atasync_hooks::test_support::tests::native_async_resource_accepts_string_and_symbol_expandos—a test nothing in this PR touches. That is not
main's behaviour: its three most recent runs,and #10295's run in the same tier, all reach the end with only the known
native_stackfailure. Since a crash masks 3,500 tests, it was attributed before landing rather than assumed
to be noise.
A rerun of that same job on the same runner passed: 7,671 tests, no crash. Three further
independent samples, none of which reproduces it either:
main, x86_64 Linux, debug, CI's own invocationnative_stack), no crashSo
cargo-testis green on this head, and the four gates this train sets out to clear arecleared. The Linux box is the same architecture as the runner, and its
mainarm reproduces CI'smainbaseline exactly — the same single
native_stackfailure — so it is a faithful stand-in ratherthan a different environment that happens to be quiet. On it, the crash does not occur and the
rewritten stack-bound test passes, which is the first direct evidence that this fix does what
it is for: it takes
cargo-testfrom red to green on the platform it was failing on, which noamount of macOS testing could show.
What stays red on
mainafter this lands:lint's benchmark-freshness gate, and the three gapregressions
mainalready carries (test_gap_iterator_prototype_next_patch,test_gap_2899_2779_2777_static_helpers,test_gap_disposablestack_2875, one per shard —unchanged by this train). Both are in
pr-gate's fan-in, sopr-gatedoes not go green on thistrain alone.
Local validation
Validated head
174ae98e5690467cde62db9b3e8a968327fc6982, on main50beb8ded0c1bd7bdcf1ed84fda4fe2dc1adf485, five-package release build pinned and hash-verified before and after every suite (artifacts_match_pintrue).main's known release-onlygc::tests::heap_generation::a_free_or_move_outside_every_scope_is_caught_in_debug_builds.descriptor(36 fixtures) andshape(18); each filter asserts it selected fixtures. Every executed fixture passes except two whose oracle cannot run them, both previously attributed by compiling them with themainand train compilers and finding byte-identical output:test_three_like_native_class_descriptors(Node failsERR_MODULE_NOT_FOUNDon an extensionless helper import; both builds printOK) andtest_issue_7981_thread_shape_stamp_parent(a perry-only fixture — Node cannot resolveperry/threadand exits 1 inpackage_json_reader; Perry exits 0). No snapshot changes.The head moved twice during validation. The last move added a docs-only commit, so rather than rerun the whole suite the train was rebuilt on the settled head and the gates a docs change can reach were rerun against it: the full 83-gate lint (same 82/83),
check_file_size.sh,cargo fmt, the doc-fence lint the commit is about, and the new example itself — compiled with the pinned binary and diffed against its expected stdout, 1 of 1 passing, so the example is proven rather than asserted. The Rust tree carried into that rebuild is identical to the tree the full suite ran against; the only difference is the three docs files.Before merging, the pushed head and unchanged main are checked again. After merging, the rewritten commits and source patches are checked for preserved authorship and the main tree must match the validated train exactly.
Summary by CodeRabbit
New Features
bun-ptymodule, includingspawn.Documentation
Bug Fixes