---
title: Isolated CI workers
---

# Isolated CI workers

Two workers use separate temporary app roots, reviewed vendor selection and exact installed dependencies. Their data, ports, clock and application environment are independent. The script attempts teardown in `finally` after both success and failure; it keeps each root for diagnosis rather than deleting state behind a World.

Requires Node 22.6 or newer and npm. Use the [package manifest](../../docs/guides/use-in-ci.md#save-a-test-that-uses-the-real-sdk), [environment names](../../docs/guides/use-in-ci.md#save-a-test-that-uses-the-real-sdk), [test](../../docs/guides/use-in-ci.md#save-a-test-that-uses-the-real-sdk) and [worker script](./workers.mjs) in an empty directory, then run `npm install` once to produce its lockfile. The included files come from [use in CI](../../docs/guides/use-in-ci.md) plus [workers.mjs](./workers.mjs); there is one source for the test. Run `node workers.mjs` from that directory during the job's preparation/execution flow. Installation needs the ordinary registry. No platform account, real vendor key, private GitHub action or source checkout is required.

Each worker installs from the lockfile, initializes its own config, starts its World, freezes time, runs the Node test, and stops the World. The test asserts one customer in its own isolated store. The script reports both worker outcomes and retained root paths, exiting nonzero if either fails or teardown fails. It owns only the roots it creates. Stop any extra consumers you add before teardown.

A vendor-history branch is not independent application process state. Do not share one `app-url`, database or browser login across parallel workers unless shared state is intentional. The workflow does not measure hosted Actions settings or hermetic egress. The [browser example](../browser-signup/README.md) shows a World-owned application service.
