Results
The probes of the review, the mutants of the runtime and the results in each browser.
Probes
A probe is a small program from the review of 2026-10-08. Each probe shows one problem of the old library. The table gives the result of each probe with the old library and with the new library. The regression tests in test/regression/probes.test.ts examine each result of the new library.
The tools wrote this data at 9 Oct 2026, 00:18 UTC.
| Probe | Rule | Scenario | Old library | New library | Result |
|---|---|---|---|---|---|
P01 | C1 | An unrelated task after request A ends | request-A | undefined | Corrected |
P02 | C7 | A callback in a dependency that Babel does not transform, in request A | B | undefined | Root (C7) |
P03a | C4 | then on a cached promise in request A | A | A | Correct |
P03b | C4 | then on the same cached promise in request B | A | B | Corrected |
P03c | C4 | then on a module-level promise in request C | undefined | C | Corrected |
P03d | C4 | then outside run() on the result of run() | inner | undefined | Corrected |
P03e | C4 | then on an async-function promise in request E | E | E | Correct |
P04 | C11 | Promise subclass, identity and function names (9 checks) | 9 errors | 0 errors | Corrected |
P05 | C3 | for await over an array | TypeError | 1,2 | Corrected |
P06 | C3 | for await with destructuring | SyntaxError | 1a,2b | Corrected |
P07 | C3 | break in for await calls return() | no | yes | Corrected |
P08 | C3 | Closures over the for await variable | 3,3,3 | 1,2,3 | Corrected |
P09 | C3 | Labeled for await with continue | SyntaxError | 11,21 | Corrected |
P10 | C3 | Top-level for await | ReferenceError | 1,2 | Corrected |
P11 | C3 | One var declared two times with await | SyntaxError | 2 | Corrected |
P12 | C3 | var in a block, read after the block | ReferenceError | 42 | Corrected |
P13 | C3 | Object destructuring default after await | build stops | 3 | Corrected |
P14 | C3 | Array destructuring default after await | build stops | 3 | Corrected |
P15 | C3 | Two declarators, one with await | ReferenceError | 3 | Corrected |
P16 | C3 | Read in the same expression after await (4 forms) | B | A | Corrected |
P17 | C1 | An async handler that an unrelated event starts | request-A | undefined | Corrected |
P18 | C5 | Async generator made in A, next() in B, then in C | B, C | created-in-A, created-in-A | Corrected |
P19 | C10 | Two copies of the library | undefined | X | Corrected |
P20a | – | README constructor new AsyncVariable(0) | undefined | undefined | README |
P20b | – | new AsyncVariable({ defaultValue: 0 }) | 0 | 0 | Correct |
P21 | C12 | First promise of a 200,000-step then chain is released | no, 20.4 MB | yes, 3.6 MB | Corrected |
P22a | C4 | Module-level Promise.resolve() promise, then in request C | undefined | C | Corrected |
P22b | C4 | Module-level async-function promise, then in request C | C | C | Correct |
P23 | C5 | Sync generator made in A, next() in B, then at the root | B, undefined | created-in-A, created-in-A | Corrected |
Mutants
A mutant is a copy of the runtime with a known error. A good test suite fails with each mutant.
The chart gives the part of the old tests that passed with each mutant of the old runtime. With the old tests, the runtime without async support (m4) passed 82 of 217 tests. The runtime with one global value (m5) passed 148 of 217 tests. Thus, the old tests could not find these errors.
The table under the chart gives the last run of Stryker on the current tests. Stryker makes a mutant from each small part of the source code and starts the tests for each mutant. The score is the part of the mutants that the tests find.
The tools wrote this data at 9 Oct 2026, 00:18 UTC.
Tests that pass with each mutant of the runtime
Show the data as a table
| Mutant | Tests | Pass | Total | Pass (%) |
|---|---|---|---|---|
| No mutant: The old runtime without a change, run 1 | Old tests | 217 | 217 | 100% |
| No mutant: The old runtime without a change, run 2 (three speed tests failed) | Old tests | 214 | 217 | 98.6% |
| m1: No Promise patches | Old tests | 202 | 217 | 93.1% |
| m2: No timer patches | Old tests | 207 | 217 | 95.4% |
| m3: No restore after await | Old tests | 101 | 217 | 46.5% |
| m4: No async support | Old tests | 82 | 217 | 37.8% |
| m5: One global value for each variable, never restored | Old tests | 148 | 217 | 68.2% |
| m6: then uses the registration context | Old tests | 214 | 217 | 98.6% |
| Score | Found | Timeout | Survived | No coverage | Mutants |
|---|---|---|---|---|---|
| 98% | 389 | 9 | 8 | 0 | 431 |
Browsers
The rule tests and the tests of the browser APIs operate in Chromium, Firefox and WebKit in each CI run. The table gives the last local run.
The tools wrote this data at 8 Oct 2026, 22:11 UTC.
| Browser | Version | Pass | Fail | Skip | Result |
|---|---|---|---|---|---|
| chromium | 156.0.8078.4 | 302 | 0 | 2 | Passed |
| firefox | 157.0 | 302 | 0 | 2 | Passed |