From 50a332f5a0c6f40c41a799dab3b25e2e53bfe18d Mon Sep 17 00:00:00 2001 From: sneak Date: Tue, 6 Oct 2026 22:05:26 +0000 Subject: [PATCH] chore: script/bootstrap fails when node cannot find a module the tests load (closes #263) yarn install exits 0 without touching node_modules whenever node_modules/.yarn-integrity matches yarn.lock, so a package deleted from node_modules stayed deleted while bootstrap printed "bootstrap complete". After the install, bootstrap now asks node to resolve jest, playwright-core and ethers, and on the first it cannot find it names the module and the fix: rm -rf node_modules && make bootstrap. Model: opus-5-5 --- README.md | 3 ++- TODO.md | 9 +++++++++ script/bootstrap | 25 +++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 58ba78c..ae2d145 100644 --- a/README.md +++ b/README.md @@ -218,7 +218,8 @@ development workflow, and the Makefile targets are thin shims that call them. We provide: - `script/bootstrap` — install all dependencies (pinned node via nvm if needed, - yarn via corepack, `yarn install --frozen-lockfile`) + yarn via corepack, `yarn install --frozen-lockfile`), then fail, naming the + module, if node cannot find `jest`, `playwright-core` or `ethers` - `script/setup` — make a fresh clone ready for development: bootstrap plus the git pre-commit hook - `script/projectname` — print the project name (used for the Docker image tag) diff --git a/TODO.md b/TODO.md index 225c833..f0f7c4f 100644 --- a/TODO.md +++ b/TODO.md @@ -45,6 +45,15 @@ but the review is broader than any of them. # Completed Steps +- 2026-10-06: `script/bootstrap` no longer reports success while node cannot + find a module the tests load + ([#263](https://git.eeqj.de/sneak/AutistMask/issues/263)). After the install + it asks node for `jest`, `playwright-core` and `ethers`, and fails naming the + missing one and the fix. yarn skips the install whenever + `node_modules/.yarn-integrity` matches `yarn.lock`, so a package deleted from + `node_modules` stayed deleted while bootstrap said it was complete. The + fresh-clone failure the issue reports did not reproduce. + - 2026-10-06: A token symbol or name read off a contract is no longer stored cut between the two halves of an emoji ([#458](https://git.eeqj.de/sneak/AutistMask/issues/458)). `lookupTokenInfo()` diff --git a/script/bootstrap b/script/bootstrap index 4df1d8c..779b28e 100755 --- a/script/bootstrap +++ b/script/bootstrap @@ -127,6 +127,30 @@ install_js_deps() { fi } +# resolvable : true when node, run from the repo root, finds it +resolvable() { + if missing node && [ -s "$HOME/.nvm/nvm.sh" ]; then + nvm_sh "nvm use $NODE_VERSION >/dev/null && cd \"$ROOT\" && \ + node -e \"require.resolve('$1')\"" 2>/dev/null + else + node -e "require.resolve('$1')" 2>/dev/null + fi +} + +# yarn install exits 0 without touching node_modules once +# node_modules/.yarn-integrity matches yarn.lock, so a package deleted from +# node_modules stays deleted. Fail unless node finds the modules the tests +# load: jest for make test, playwright-core and ethers for tests/e2e/. +check_js_deps() { + for module in jest playwright-core ethers; do + if ! resolvable "$module"; then + echo "bootstrap: node cannot find $module after yarn install" >&2 + echo " fix: rm -rf node_modules && make bootstrap" >&2 + exit 1 + fi + done +} + main() { cd "$ROOT" @@ -136,6 +160,7 @@ main() { ensure_node ensure_yarn install_js_deps + check_js_deps echo "bootstrap complete" }