commit 97fa060969938793e1c5dce2a6f9bc848cdaf34d
parent 750c0ba195acbf607811cf80fb91fa4573ea22ac
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Mon, 28 Sep 2026 12:36:14 -0400
homepage: no-data.spec skips itself when the run has more than one worker
It moves the shared e2e summary aside, and `mode: "serial"` orders one file's
tests, not the files: under --workers=N the other specs read the summary
while it is gone. The skip reason names the run's worker count; the
config's own workers: 1 still runs it. FACTS: this and the 2origin stage
guard.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Diffstat:
2 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/homepage/e2e/no-data.spec.ts b/homepage/e2e/no-data.spec.ts
@@ -15,6 +15,15 @@ import { FIXTURE_SUMMARY_NAME } from "./fixture-summary";
test.describe.configure({ mode: "serial" });
test("with no summary, / and /stats/ render no numbers and say why", async ({ page }) => {
+ // `mode: "serial"` orders this file's tests, not the files: under
+ // `--workers=N` (N > 1) the other specs run beside this one and read the
+ // same summary file while it is moved aside, so they would draw the empty
+ // state and fail. Only a one-worker run (the config's own) can check it.
+ const workers = test.info().config.workers;
+ test.skip(
+ workers > 1,
+ `no-data moves the shared e2e summary aside, which races the other specs when workers > 1 (this run: ${workers})`,
+ );
const file = path.resolve(test.info().project.testDir, FIXTURE_SUMMARY_NAME);
const aside = `${file}.aside`;
fs.renameSync(file, aside);
diff --git a/plans/FACTS.md b/plans/FACTS.md
@@ -7116,6 +7116,17 @@ out. O3's facts are the section just above ("O3 — runner lows"). Anchors are a
- **`no-data.spec.ts` renames the fixture aside** (`.e2e-summary.json.aside`, same gitignore pattern)
and restores it in `finally`; it runs serially (`:15`). A killed run can leave the `.aside`; the
next config start rewrites the fixture anyway.
+ - *Amended 2026-09-28 (release 13, slice W2):* `mode: "serial"` orders one file's tests, not the
+ files, so under `--workers=N` the other specs read the summary while it is aside. The test now
+ skips itself when `test.info().config.workers > 1`, naming the run's worker count in the skip
+ reason; the config's own `workers: 1` still runs it.
+- **`playwright.2origin.config.ts` stages only in the runner** (release 13, slice W2): Playwright
+ evaluates a config again in every worker process, after setting `TEST_WORKER_INDEX` there
+ (`playwright/lib/worker/workerMain.js:60`, 1.59.1), and each evaluation re-ran
+ `stageTwoOrigins()` — which `rmSync`s and rewrites `.2origin/originB` under the running `serve`.
+ The call is now `if (!process.env.TEST_WORKER_INDEX) stageTwoOrigins();`. (UI mode's
+ out-of-process loader would still evaluate it without that variable; the CLI loads test files
+ in-process.)
### report-to-video measures the brand's face per character (O5)