Skip to content

test262 remaining failures — single worklist (1,543 cases @ 95.8%, grind to 100%) #5815

Description

@proggeramlug

Single worklist for the entire remaining test262 gap

1,543 failing cases · parity 95.8% (snapshot: 2026-06-30 full sweep, perry 0.5.1208, node v26.3.0). This is a self-contained umbrella so one worker can grind the whole tail without re-measuring — every current failing case (path → reason) is enumerated in the linked worklist.

📋 Complete worklist (all 1,543 cases, grouped by area)

https://gist.github.com/proggeramlug/fd9092312edbdeeda2a61711cc954fcc

That gist is the worklist. Each area section has a count, a reason histogram, and the full list of failing test paths with their failure reason. Work area-by-area; pick the cluster with the clearest single root.

Setup (any box)

git clone https://github.com/PerryTS/perry && cd perry
cargo build --release -p perry -p perry-runtime-static -p perry-stdlib-static
git clone --depth 1 https://github.com/tc39/test262 vendor/test262   # checkout test-compat/test262/pinned-sha.txt
# node on PATH (the differential oracle). See test-compat/test262/README.md.

Measure / verify any slice:

scripts/test262_subset.py --root vendor/test262 --dir <area> --jobs 8

The .failures.txt sidecar lists every failing case; diff before/after to confirm zero regressions.

Biggest pools (full per-area breakdown in the gist; 82 areas total)

Cases Area (--dir) Notes
338 language/expressions mostly expressions/class; bulk is async-gen yield* — overlaps #5745, scope to non-async-gen
229 language/statements mostly statements/class; same async-gen caveat
91 built-ins/RegExp property-escapes \p{Script_Extensions}, v-flag (unimpl), exec internals
62 intl402/NumberFormat formatToParts/notation/rounding/validation
61 built-ins/Array exotic length/index, non-array receivers
51 intl402/DateTimeFormat option-validation + formatRange
44 built-ins/Object ToObject/assign/descriptors (overlaps #3986)
38 built-ins/Promise real class X extends Promise subclass support
38 built-ins/String non-generic receivers, normalize
37 intl402/Temporal Temporal.toLocaleString formatting edges
33 built-ins/Proxy invariant checks
30 language/eval-code Annex B.3.3 global-eval hoisting (partly a genuine AOT limit)
23 each annexB/language, built-ins/Function, built-ins/JSON
20 intl402/Segmenter
(Intl/RelativeTimeFormat, TypedArrayConstructors, Collator, Date, Locale, Temporal self-validate, …) see gist

How to work it

  1. Pick an area from the gist (start with a coherent single-root subcluster, not the whole area).
  2. Localize with cargo run --release -- file.ts --trace hir --focus <fn> / --trace llvm.
  3. Fix; verify the listed cases pass and re-run the slice for zero regressions.
  4. Code-only PR per area/subcluster: no Cargo.toml/Cargo.lock version bump, no CLAUDE.md Current-Version edit, no CHANGELOG entry (maintainer folds metadata at merge). cargo fmt --all -- --check and bash scripts/check_file_size.sh must pass (keep files < 2000 lines; split topically if needed).
  5. Reference this issue in each PR. Never reference internal infrastructure hostnames in commits/PRs/docs.

Relationship to existing tickets

Consolidates the per-area tails: open #5592 #5591 #5582 #5588 #5590 #5579 #5587, and the closed-but-residual #5586 #5581 #5589 #5580 #5800. (#5735 / #5745 are owned separately — the async-gen yield* class cases belong to #5745, leave them.)

Refresh the worklist by re-running the full sweep (--dir built-ins language intl402 annexB) and regenerating the gist; not required to start.

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