Highlights
- Stub-elimination epic (#4919) substantially landed. The manifest
stubflag is now actually populated, stubbed APIs warn on first call, andPERRY_STRICT_STUBS=1turns any stub hit into a hard error (#4929). On top of that floor, formerly-fake APIs became real:node:dns/node:dgramdo real network I/O (#4911),child_process.exec/execFileare truly async with realChildProcesshandle semantics (#4912, #2130/#1934),Atomics.wait/notify/waitAsyncblock and wake for real acrossperry/threadagents over a sharedSharedArrayBuffer(#4913), streams gained BYOB readers + realByteLengthQueuingStrategyaccounting (#4915), andv8.writeHeapSnapshotemits a real snapshot from a GC heap walk (#4916). - Real
AsyncLocalStorage+async_hookscontext propagation (#788/#789) — context tracked acrossawait, microtasks, timers, andprocess.nextTick, with Node-v26-exact run/exit/enterWith semantics. - React render-time walls cleared (#4950) — JSX createElement mode gated on react import, nested-function branch-var hoisting, timers/AbortController as values, surrogate-range regex classes; plus
export default classbodies lower correctly (#4976) and synthesized capture ctors on derived classes callsuper()(#4972). - node:http/https parity batch (#4903–#4910) — deferred
'listening'emit, constructableAgent/ClientRequest/IncomingMessage/ServerResponse, server/socket lifecycle methods, client TLS options honored (rejectUnauthorized/ca/checkServerIdentity), ERR_*-coded argument/header validation, write/end callbacks + backpressure + real client timeouts,tls.connectNode overloads. clusterworkers share a listening port (#4914) — SO_REUSEPORT + fork-IPC'listening'round-trip + lifecycle events.- test262 parity gains across the board — Temporal → 98.3%, built-ins/Function → 93.7%, Promise async-resolution/capability, Array iteration/mutation v4+v5, Object v3, class/expression/statement language-semantics remnants, Date setters/parse, BigInt
++/--. - Intl.Segmenter (grapheme/word/sentence, #4882), regex
dflag/hasIndices (#4930),\p{RGI_Emoji}& friends (#4889). - GC/codegen hardening — unregistered box-pointer rejection fixes the react-reconciler SIGBUS-on-import (#4898), boxed slots are entry-initialized so skipped-Let paths can't leak undef pointers (#4926), closure side-table GC deadlock fixed (#4956), automated write-barrier store-site audit (#4886).
fetch()sends dynamically-built request headers (#4932) — headers from variables, spreads,Object.assign, ornew Headersno longer silently dropped.
Fixes
- test(codegen): unbreak typed_shape_descriptors after #4957 bulk-fill lowering (#4984)
- fix(net,ext-http): tls.connect Node overloads + https idle-connection close path (#4971) (#4983)
- fix(hir): lower inline
export default classbodies — methods/fields survive (#4976) (#4981) - fix(hir): synthesized capture ctor on a derived class must call super() (#4972) (#4980)
- feat(diagnostics): real v8 heap snapshot from GC heap walk + inspector/repl honesty (#4916) (#4979)
- fix(http): falsy ClientRequest method defaults to GET instead of throwing (#4970) (#4978)
- fix(hir,codegen,runtime): clear the #4950 React render-time walls (#4969)
- feat(runtime): real child_process spawn/exec ChildProcess handle semantics (#2130/#1934) (#4968)
- feat(runtime): real AsyncLocalStorage + async_hooks context propagation (#788/#789) (#4967)
- feat(streams): BYOB readers + real ByteLengthQueuingStrategy accounting (#4915) (#4966)
- fix(http): client write/end callbacks + backpressure, real client timeouts, dynamic listener registration (#4909) (#4964)
- feat(cluster): workers share a listening port — SO_REUSEPORT + IPC 'listening' round-trip (#4914) (#4963)
- fix(compile): support package createRequire interop (#4960)
- perf(runtime): optimize numeric array raw payload helpers (#4957)
- fix(hir): self-named native member base no longer OOM-loops codegen (#4908) (#4955)
- fix(http): wire res.write/res.end callbacks + backpressure boolean into static dispatch (#4909) (#4954)
- feat(atomics): real cross-agent Atomics.wait/notify/waitAsync over a shared SAB (#4913) (#4952)
- fix(runtime): expose prototype for class expression values (#4953)
- fix(http): TimeoutOverflowWarning on req.setTimeout overflow + pid-canonical parity (#4910) (#4951)
- fix(gc): avoid closure side-table GC deadlock (#4956)
- fix(http,assert): node:http argument/header/URL validation throws ERR_* (#4907) (#4948)
- fix(cjs_wrap): flat-emit
module.exports = <Class>that closes over a top-level binding (#4933) (#4947) - fix(child_process): make exec/execFile async — off-thread, callback on a later tick (#4912) (#4941)
- fix: Discord BigInt and root import reducers (#4946)
- fix(runtime): hide private names from Reflect.has/in inherited probe (#4945)
- fix(runtime): built-ins/Array mutation/iterator/array-like test262 parity (v5) (#4944)
- fix(hir): non-class language-semantics remnant test262 parity (#4943)
- fix(runtime): built-ins/Promise async-resolution + capability test262 parity (#4942)
- feat(runtime): real node:dns + node:dgram network I/O (#4911) (#4940)
- fix(fetch): send dynamically-built request headers (#4932) (#4939)
- fix(http,net,hir): server/timer/socket lifecycle methods (#4905) (#4938)
- fix(http): make Agent/ClientRequest/IncomingMessage/ServerResponse constructable via new (#4904) (#4936)
- feat(runtime): implement regex
dflag (hasIndices) (#4930) - fix(https): honor client TLS options + accept v1 server certs (#4906) (#4935)
- test: process stdio write regression (#4934)
- fix(codegen,runtime): entry-initialize boxed slots — eliminate undef box-pointer operands (#4926) (#4931)
- feat(stubs): stub-elimination keystone — manifest stub flag, warn on first call, PERRY_STRICT_STUBS (#4918/#4919) (#4929)
- fix(ext-http-server): defer 'listening' emit + listen callback to event-loop tick (#4903) (#4924)
- chore(runtime): split date.rs under the 2000-line CI cap (#4925)
- fix(runtime): Temporal PlainDate/YearMonth/MonthDay/Time/Instant/Now tail → 98.3% (#4923)
- fix(hir,runtime): non-class expression-semantics remnant test262 parity (#4922)
- fix(hir): non-class statement-semantics test262 remnant (#4920)
- fix(runtime,codegen): built-ins tails v2 — TypedArray toString, String 0-arg methods, JSON array cycles, Proxy symbol args (#4900)
- fix(runtime): reject unregistered box pointers in js_box_set/get (#4898) (#4902)
- fix(runtime): small built-ins tails — Date setters/parse, BigInt ++/-- (#4901)
- refactor(runtime): centralize handle-vs-pointer address classification (#4899)
- fix(runtime): route string primitives through real String iterator (#4892) (#4893)
- feat(ui-windows-winui): real Windows App SDK bootstrap probe (#4680 step 2) (#4896)
- fix(runtime): built-ins/Array callback-iteration methods test262 parity (v4) (#4895)
- fix(runtime): Temporal ZonedDateTime/PlainDateTime/Duration tail → ~96.7% (#4894)
- fix(regex): expand \p{RGI_Emoji} & friends to supported emoji primitives (#4889) (#4891)
- fix(hir): class test262 remnant — eval-in-class early errors, ctor return-override, static-field this (#4888)
- fix(regex): rewrite \p{Surrogate} to a never-matching class (#4884) (#4887)
- feat(gc): automate write-barrier store-site audit; barrier structuredClone object fields (#4886)
- fix(compile): resolve barrel/type-only default-import link wall (nestjs) (#4872) (#4885)
- fix(runtime): keep js_promise_report_unhandled_rejections alive through auto-optimize LTO (#4876) (#4883)
- feat(intl): implement Intl.Segmenter — grapheme/word/sentence (#4882)
- fix(codegen): provenance-based transitive disqualification for integer locals (#4785 bug class) (#4881)
- fix(hir): route global new MessageChannel()/BroadcastChannel() to runtime constructors (#4873) (#4875)
- fix(compile): namespace import of CJS default re-export resolves member value (#4841) (#4874)
- fix(runtime,hir): built-ins/Function test262 parity (v2) — 67.4% → 93.7% (#4868)
- feat: install.sh download/extraction progress + per-distro toolchain docs (#4869)
- deps: bump indicatif 0.17.11 → 0.18.4 (#4865); cargo minor/patch group (#4864)
- fix(runtime): built-ins/Object test262 parity (v3) (#4863)
- fix(hir): statement-semantics test262 tail (v2) (#4861)
- fix(ci): make npm-publish idempotent — skip already-published versions (#4870)
- fix(ci): raise perf-gate noise floors to match observed runner variance (#4867)
- chore(release): v0.5.1158 — roll-up changelog + version bump (#4990)
Full Changelog: v0.5.1151...v0.5.1158