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
- Pick an area from the gist (start with a coherent single-root subcluster, not the whole area).
- Localize with
cargo run --release -- file.ts --trace hir --focus <fn> / --trace llvm.
- Fix; verify the listed cases pass and re-run the slice for zero regressions.
- 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).
- 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.
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)
Measure / verify any slice:
The
.failures.txtsidecar lists every failing case; diff before/after to confirm zero regressions.Biggest pools (full per-area breakdown in the gist; 82 areas total)
--dir)language/expressionsexpressions/class; bulk is async-genyield*— overlaps #5745, scope to non-async-genlanguage/statementsstatements/class; same async-gen caveatbuilt-ins/RegExp\p{Script_Extensions}, v-flag (unimpl), exec internalsintl402/NumberFormatbuilt-ins/Arrayintl402/DateTimeFormatbuilt-ins/Objectbuilt-ins/Promiseclass X extends Promisesubclass supportbuilt-ins/Stringintl402/Temporalbuilt-ins/Proxylanguage/eval-codeannexB/language,built-ins/Function,built-ins/JSONintl402/SegmenterHow to work it
cargo run --release -- file.ts --trace hir --focus <fn>/--trace llvm.Cargo.toml/Cargo.lockversion bump, noCLAUDE.mdCurrent-Version edit, noCHANGELOGentry (maintainer folds metadata at merge).cargo fmt --all -- --checkandbash scripts/check_file_size.shmust pass (keep files < 2000 lines; split topically if needed).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.