Skip to content

test262 regression on main — parity 96.5%→95.8%, 322 tests (bisecting) #6013

Closed

Description

@proggeramlug

test262 regression on main — parity 96.5% → 95.8%, 322 tests newly failing

A full test262 sweep of main at the #6008 tip (76cc2b996) regressed vs the #5979 tip (28948ea44):

metric #5979 (good) #6008 (bad)
parity 96.5% 95.8%
Temporal self-validated 99.1% 96.7%
pass 35242 34981
runtime-fail 1164 1421

322 tests newly failing, 61 newly fixed (net −261). Harness-confirmed (not a measurement artifact): e.g. built-ins/Boolean/prototype/toString dropped 100% → 67%.

Newly-failing by area

  • built-ins/Temporal 159
  • language/expressions 119
  • language/arguments-object 15, built-ins/Proxy 5, Boolean 3, Number 3, Function 2, TypedArray 2, others 14

Reason clusters

  • TypeError: method is not a function — 131
  • (no output) (crash/SIGSEGV) — 126
  • Expected SameValue(x, y) — 35
  • Cannot read properties of undefined — 10

Regression window

28948ea44 (good) .. 76cc2b996 (bad) — 21 commits. Broad-impact suspects: #6004 (native_call_method.rs method-dispatcher change), #5978/#5981 (GC), #5988 (async-step deadlock class). Bisect in progress.

Sample newly-failing cases

built-ins/Boolean/prototype/toString/S15.6.4.2_A2_T1.js
built-ins/Number/prototype/toString/S15.7.4.2_A4_T01.js
built-ins/Function/prototype/S15.3.5.2_A1_T2.js
built-ins/Temporal/Duration/compare/order-of-operations.js
built-ins/Temporal/Duration/from/order-of-operations.js
built-ins/Proxy/getOwnPropertyDescriptor/trap-is-undefined-target-is-proxy.js
annexB/language/global-code/block-decl-global-block-scoping.js

Measured on an internal Linux sweep host (built-ins + language + intl402 + annexB, jobs 6). A bisect+fix is underway; this issue tracks the root-cause + fix/revert PR.

Activity

  1. added
    parityCompatibility gap with Node.js, ECMAScript, or the supported ecosystem
    on Jul 5, 2026
  2. proggeramlug commented on Jul 5, 2026

    @proggeramlug
    ContributorAuthor

    Bisected. Culprit = #5874 "Improve Zod compatibility support" (849f297a8).

    git bisect (good 28948ea44 .. bad 76cc2b996), witness slice = built-ins/Boolean/prototype/toString + Number/prototype/toString + Temporal/Duration/{compare,from}:

    commit witness parity Boolean Temporal.Duration self-validated
    4f5bc6adb (#5981) 98.3% 89% 100% 100%
    849f297a8 (#5874) — first bad 93.9% 67% 95% 95.1%
    76cc2b996 (main tip) 93.9% 67% 95% 95.1%

    (532853f4a between them is a metadata-only chore.)

    #5874 is a 156-file monolithic squash that swept in unreviewed codegen/runtime WIP + two 5.1 MB binaries (constv, direct) + ~30 stray tests/*.sh alongside the intended Zod work. Two swept changes dominate:

    • codegen/lower_call/property_get/number_string.rs gated the universal .toString() interception on is_numeric_expr || is_bigint_expr, so boxed built-in receivers (new String()/new Number()/new Date()) with a user-assigned built-in method bypassed the brand-check and stopped throwing TypeError → the "method is not a function" / SameValue clusters. (property_get.rs reclassified trim/case-conversion the same way.)
    • The runtime prototype-identity / class-registry / instanceof rewrite regressed Temporal subclass prototype resolution (Object.getPrototypeOf(result) === construct.prototype) → the Temporal 159 + (no output) crash clusters.

    Fix = #6015 (inverse-patch of the #5874 payload rebased onto current main; #5991 preserved; #5983 stdlib change untouched). Witness slice returns to 98.3% / self-validated 100% / Temporal.Duration 100%. Supersedes the stale #5994.

  3. proggeramlug commented on Jul 5, 2026

    @proggeramlug
    ContributorAuthor

    Resolved by #6015 — regression fully healed

    A full re-sweep of main at the #6015 tip confirms the 322-test regression is reverted with the grind wins preserved:

    metric pre-regression regressed (#6008) now (#6015)
    parity 96.5% 95.8% 96.7%
    Temporal self-validated 99.1% 96.7% 99.1%
    pass 35242 34981 35288
    runtime-fail 1164 1421 1114

    Culprit was #5874's contaminated squash (unreviewed codegen/runtime WIP swept in alongside the Zod work); #6015 inverse-patched it out while preserving the legitimate later commits (#5991/#5999/#5983). Temporal self-validation and the Boolean/Number/Function brand-check negatives are all restored; net parity is now slightly above the pre-regression baseline. Closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    parityCompatibility gap with Node.js, ECMAScript, or the supported ecosystem

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions