DavertMik · GitHub

@mirao @claude

…deceptjs#5577)
Two regressions introduced during the 3.x → 4.x ESM migration:
## Bug 1 – plugins with runInWorker:false silently skipped in child processes
lib/container.js used options.child to detect "running inside a worker thread"
and skipped plugins whose runInWorker is false (testomatio defaults to false).
But run-multiple also sets --child on every forked child process, so those
plugins were incorrectly skipped there too.
Fix: replace options.child with !isMainThread (worker_threads).
A run-multiple child is a freshly-forked OS process whose isMainThread is true,
so the gate no longer fires. An actual run-workers worker thread has
isMainThread === false, so the gate still fires as intended.
| Context                   | options.child | isMainThread | before (skipped?) | after  |
|---------------------------|---------------|--------------|-------------------|--------|
| run-workers worker thread | truthy (idx)  | false        | skipped ✓         | skipped ✓ |
| run-multiple child proc   | truthy (str)  | true         | skipped ✗ (bug)   | loads ✓ |
| normal run / parent proc  | falsy         | true         | loads ✓           | loads ✓ |
## Bug 2 – all children write to the same reportDir, last one wins
3.x run-multiple.js replaced three per-child directory keys before forking:
  output, reportDir, mochaFile
The 4.x port dropped the reportDir line, so every child kept the shared
reportDir value from the config (e.g. "output/report") and overwrote each
other's HTML file.
Fix: restore the missing replaceValueDeep('reportDir', ...) call so each child
receives its own directory, matching 3.x behaviour.
Regression test added: verifies that a plugin with runInWorker:false is
initialised once per child and that each child receives a distinct reportDir.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Read the original on github.com ↗