Skip to the content

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.

ProbeRuleScenarioOld libraryNew libraryResult
P01C1An unrelated task after request A endsrequest-Aundefined Corrected
P02C7A callback in a dependency that Babel does not transform, in request ABundefined Root (C7)
P03aC4then on a cached promise in request AAA Correct
P03bC4then on the same cached promise in request BAB Corrected
P03cC4then on a module-level promise in request CundefinedC Corrected
P03dC4then outside run() on the result of run()innerundefined Corrected
P03eC4then on an async-function promise in request EEE Correct
P04C11Promise subclass, identity and function names (9 checks)9 errors0 errors Corrected
P05C3for await over an arrayTypeError1,2 Corrected
P06C3for await with destructuringSyntaxError1a,2b Corrected
P07C3break in for await calls return()noyes Corrected
P08C3Closures over the for await variable3,3,31,2,3 Corrected
P09C3Labeled for await with continueSyntaxError11,21 Corrected
P10C3Top-level for awaitReferenceError1,2 Corrected
P11C3One var declared two times with awaitSyntaxError2 Corrected
P12C3var in a block, read after the blockReferenceError42 Corrected
P13C3Object destructuring default after awaitbuild stops3 Corrected
P14C3Array destructuring default after awaitbuild stops3 Corrected
P15C3Two declarators, one with awaitReferenceError3 Corrected
P16C3Read in the same expression after await (4 forms)BA Corrected
P17C1An async handler that an unrelated event startsrequest-Aundefined Corrected
P18C5Async generator made in A, next() in B, then in CB, Ccreated-in-A, created-in-A Corrected
P19C10Two copies of the libraryundefinedX Corrected
P20a–README constructor new AsyncVariable(0)undefinedundefined README
P20b–new AsyncVariable({ defaultValue: 0 })00 Correct
P21C12First promise of a 200,000-step then chain is releasedno, 20.4 MByes, 3.6 MB Corrected
P22aC4Module-level Promise.resolve() promise, then in request CundefinedC Corrected
P22bC4Module-level async-function promise, then in request CCC Correct
P23C5Sync generator made in A, next() in B, then at the rootB, undefinedcreated-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

Old testsNew tests
No mutant: The old runtime without a change, run 1 (Old tests)No mutant: The old runtime without a change, run 2 (three speed tests failed) (Old tests)m1: No Promise patches (Old tests)m2: No timer patches (Old tests)m3: No restore after await (Old tests)m4: No async support (Old tests)m5: One global value for each variable, never restored (Old tests)m6: then uses the registration context (Old tests)020406080100Tests that pass (%) →217/217214/217202/217207/217101/21782/217148/217214/217
Show the data as a table
MutantTestsPassTotalPass (%)
No mutant: The old runtime without a change, run 1Old tests217217100%
No mutant: The old runtime without a change, run 2 (three speed tests failed)Old tests21421798.6%
m1: No Promise patchesOld tests20221793.1%
m2: No timer patchesOld tests20721795.4%
m3: No restore after awaitOld tests10121746.5%
m4: No async supportOld tests8221737.8%
m5: One global value for each variable, never restoredOld tests14821768.2%
m6: then uses the registration contextOld tests21421798.6%
Stryker on the current tests: src/babel/bind-generators.ts, src/babel/preset.ts, src/core/async-local-storage.ts, src/core/coroutine.ts, src/core/snapshot.ts, src/core/store.ts, src/core/variable.ts, src/patches/patch.ts, src/patches/promise.ts, src/patches/timers.ts, src/patches/to-string.ts, src/vite/plugin.ts
ScoreFoundTimeoutSurvivedNo coverageMutants
98%389980431

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.

BrowserVersionPassFailSkipResult
chromium156.0.8078.430202Passed
firefox157.030202Passed

async-browser-context: AsyncLocalStorage and the TC39 AsyncContext API for browsers. The source code is on GitHub.

To change a page, edit its file in site/content/. The writing style guide tells you how.

An AI model (Claude, from Anthropic) wrote most of the text and the code of this site and of the library, under the direction of the author. The tests and the STE linter examine them.