Highlights
- Release pipeline is green end-to-end again. v0.5.1150 shipped with 5 of 19 platform build jobs red (so npm/homebrew/apt/winget publish never ran) and a Regression Check that had hung at the 6-hour timeout on every run since v0.5.1129. All root causes fixed (#4857).
- Android builds fixed — borrow-lifetime error (E0597) in
perry-ui-androiddrag & drop broke bothaarch64-andx86_64-linux-androidjobs. - Windows builds fixed —
windows-coredirect dependency for#[implement]COM authoring (#4837) ships in a release for the first time. - Dense-array growth no longer quadratic — #4648's absolute 1M dense cap routed sequential large-array fills through string-keyed sparse properties (linear scan per insert). A 10M-element fill went from never finishing (6h CI timeouts) to ~3.3s. Sparse storage is now gated on the jump a write makes past the current length (engine-style dictionary-mode heuristic); reads consult sparse storage only past capacity.
- Performance regression gate actually works now —
compare.sh --json-outresolved relative to the wrong directory, so the comparison had silently crashed (and| teeswallowed the exit) on every run since at least v0.5.1122; release-mode "hard-fail" gates were comparing nothing. Fixed, pluspipefail, a 100-minute job timeout, and both the performance and binary-size baselines refreshed from current measured runs.
Fixes
- fix(ci): unbreak release platform builds + lint gates (#4857)
- fix(codegen): String.match no-match returns null, not a boxed null pointer (#4858, #4860)
- fix(codegen,ci): keep stale Apple cross runtimes from breaking iOS/tvOS links (#4856, #4859)
- fix(transform): generator id scans must see closures in every Expr variant (#4851, #4854)
- fix(runtime): class subclass + async-method + definition test262 tail (#4853)
- test(#4841): Stripe protoExtend regression + readable unhandled rejections + handled-rejection false-positive fix (#4852)
- fix(hir): operator-expression semantics test262 tail — inc/dec ToNumber, != bigint/object, instanceof (#4850)
- fix(http): expose OutgoingMessage and server defaults (#4503)
- fix(codegen): non-arrow function expressions get fresh identity (#4831 follow-up, #4849)
- fix(tvos/watchos): CFBundleVersion from perry.toml + emit GM DT* SDK keys (#4848)
- fix(hir): private-member brand-check on access + class-element tail v3 (#4847)
- fix(hir): class destructuring (dstr) test262 tail v2 (#4846)
- fix(codegen): guard cyclic inheritance walks against non-termination (#4845)
- fix(runtime): new WeakMap()/Map/Set from a constructor value no longer throws "requires 'new'" (#4844)
- fix(runtime): honor JSON reviver prototype lookups (#4665)
- fix(runtime): low-hanging test262 tails — URI/parse/Number/collections/Reflect (#4843)
- fix(hir): expression-semantics test262 tail — object-literal NamedEval/gen-method dstr, delete, interleaved spread (#4842)
- fix(runtime): built-ins/Array iteration/mutation methods test262 parity v3 (#4839)
- fix(runtime): Promise static-method receiver + combinator/reflection/unhandled-rejection parity (#4838)
- fix(windows): WebView2 COM init + dropped-init-result so WebView renders (#4835, #4837)
- fix(codegen): dispatch Stripe-style cross-module
extendthrough runtime method call (#4831, #4836) - fix(stdlib): emit one header line per array-valued header in node:http (#4826, #4829)
- style/refactor: unbreak the lint gate on main — cargo fmt after #4853 + body_stmt.rs file-size split (#4855)
Known issues
date::tests::test_full_year_setters_revive_invalid_date_onlyfails when run in a non-UTC local timezone (CI is UTC): local-time revive of an invalid Date viasetFullYearreturns NaN.