From 43c236451fff2e404a59c6779f37a690e852d0d8 Mon Sep 17 00:00:00 2001 From: clawbot <35+clawbot@noreply.example.org> Date: Sun, 4 Oct 2026 14:26:03 +0200 Subject: [PATCH] chore: run jest in three worker processes (closes #426) The test and test:verbose scripts ran jest with one worker per CPU core, about 47 processes and 7-8 GiB per run on the shared 48-core build host. They now pass --maxWorkers=3. On that host the suite takes 23-29s, inside the unchanged 30-second cap in script/test but not by much: one test file, tests/persistedFieldContract.test.js, takes most of it. One or two workers went past the cap, so this departs from the issue's two-process limit. make check, the pre-commit hook and script/cibuild all reach jest through these scripts; the timings in the script/test and Dockerfile comments are updated to match. Model: opus-5-5 --- Dockerfile | 6 +++--- TODO.md | 11 +++++++++++ package.json | 4 ++-- script/test | 17 ++++++++++------- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4260864..97bd6bd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,9 +9,9 @@ WORKDIR /app ENV AUTISTMASK_LINT_NATIVE=1 # script/test's default 30s bound is the host figure, against a suite that -# runs in about 8s there. In here the same suite starts on a cold jest cache -# and shares the runner with the rest of the build, so 30s is marginal rather -# than a bound — it killed a healthy suite at 30.6s on a cold CI cache. 180s +# takes 23-29s there with three jest workers. In here the same suite starts on +# a cold jest cache and shares the runner with the rest of the build, so 30s +# is too tight — it killed a healthy suite at 30.6s on a cold CI cache. 180s # still catches a hang in three minutes and cannot be tripped by a suite that # is merely running on contended hardware. ENV AUTISTMASK_TEST_TIMEOUT=180 diff --git a/TODO.md b/TODO.md index 4bf1256..316be33 100644 --- a/TODO.md +++ b/TODO.md @@ -45,6 +45,17 @@ but the review is broader than any of them. # Completed Steps +- 2026-10-04: `make test` runs jest in three worker processes + ([#426](https://git.eeqj.de/sneak/AutistMask/issues/426)). The `test` and + `test:verbose` scripts in `package.json` ran `jest --forceExit`, which starts + one worker per CPU core: about 47 processes and 7-8 GiB per run on the shared + 48-core build host. They now pass `--maxWorkers=3`, and the suite takes 23-29s + there: inside the 30-second cap in `script/test`, which is unchanged, but not + by much, because `tests/persistedFieldContract.test.js` alone takes most of it + ([#428](https://git.eeqj.de/sneak/AutistMask/issues/428)). One or two workers + went past the cap. `make check`, the pre-commit hook and `script/cibuild` all + run the suite through these scripts. + - 2026-10-04: The error container on each dApp approval screen keeps its height when an error appears ([#297](https://git.eeqj.de/sneak/AutistMask/issues/297)). `#approve-tx-error` diff --git a/package.json b/package.json index df915e8..f5a82b5 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "license": "GPL-3.0", "private": true, "scripts": { - "test": "jest --forceExit", - "test:verbose": "jest --forceExit --verbose", + "test": "jest --forceExit --maxWorkers=3", + "test:verbose": "jest --forceExit --maxWorkers=3 --verbose", "build": "node build.js", "lint": "eslint . && prettier --check .", "fmt": "prettier --write .", diff --git a/script/test b/script/test index fdea8b0..ebe015c 100755 --- a/script/test +++ b/script/test @@ -1,13 +1,16 @@ #!/bin/sh # script/test: run the test suite. # -# The timeout bounds a hung suite; it is not a performance budget. On a -# developer host the suite finishes in about 8s and REPO_POLICIES' 30s cap is -# the bound. Inside the image the same suite also pays a cold jest cache and -# shares the runner with the rest of the build, which is not what that budget -# describes, so the Dockerfile raises the bound through -# AUTISTMASK_TEST_TIMEOUT. A cap a healthy suite can trip on a cold cache -# produces a red that means nothing, and teaches "just run it again". +# jest runs three worker processes (package.json), not one per CPU core: on a +# many-core shared host one per core took gigabytes of RAM per run. +# +# The timeout bounds a hung suite; it is not a performance budget. On the busy +# shared build host the suite takes 23-29s with three workers, so +# REPO_POLICIES' 30s cap is tight there, not comfortable. Inside the image the +# same suite also pays a cold jest cache and shares the runner with the rest of +# the build, which is not what that budget describes, so the Dockerfile raises +# the bound through AUTISTMASK_TEST_TIMEOUT. A cap a healthy suite can trip on a +# cold cache produces a red that means nothing, and teaches "just run it again". set -eu ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"