chore: script/bootstrap can report success while leaving playwright-core unlinked #263

Closed
opened 2026-08-12 11:29:42 +02:00 by clawbot · 2 comments
Collaborator

On a fresh clone, script/bootstrap printed bootstrap complete but the first make test-e2e died with Cannot find module 'playwright-core'. A plain yarn install --frozen-lockfile fixed it in 0.76s.

Observed once and not reproducible on a second attempt, so this is filed as a suspected flake in install_js_deps rather than a confirmed defect. Recording it rather than dropping it because the failure mode is expensive: bootstrap reports success, so the natural reading of the subsequent error is that the e2e harness itself is broken, not that dependencies are half-installed.

Implementation requirements

  • Establish whether install_js_deps can exit 0 with an incomplete node_modules — check whether any yarn invocation's exit status is discarded, and whether the workspace layout matters (/srv/code/package.json declares yarn workspaces, so a clone made inside that tree hoists into a shared node_modules, which is a plausible source of this).
  • If the cause cannot be reproduced, add a cheap post-install verification instead: assert the modules the e2e harnesses actually require are resolvable, and fail bootstrap loudly if not.
  • Do not paper over it with a blind second yarn install.

Definition of done

  • script/bootstrap cannot report success while a dependency the test targets need is unresolvable.
  • The failure names the missing module and what to do about it.
  • TODO.md updated in the same commit.
  • make check passes.
On a fresh clone, `script/bootstrap` printed `bootstrap complete` but the first `make test-e2e` died with `Cannot find module 'playwright-core'`. A plain `yarn install --frozen-lockfile` fixed it in 0.76s. Observed once and not reproducible on a second attempt, so this is filed as a suspected flake in `install_js_deps` rather than a confirmed defect. Recording it rather than dropping it because the failure mode is expensive: bootstrap reports success, so the natural reading of the subsequent error is that the e2e harness itself is broken, not that dependencies are half-installed. ## Implementation requirements - Establish whether `install_js_deps` can exit 0 with an incomplete `node_modules` — check whether any `yarn` invocation's exit status is discarded, and whether the workspace layout matters (`/srv/code/package.json` declares yarn workspaces, so a clone made inside that tree hoists into a shared `node_modules`, which is a plausible source of this). - If the cause cannot be reproduced, add a cheap post-install verification instead: assert the modules the e2e harnesses actually require are resolvable, and fail bootstrap loudly if not. - Do not paper over it with a blind second `yarn install`. ## Definition of done - [ ] `script/bootstrap` cannot report success while a dependency the test targets need is unresolvable. - [ ] The failure names the missing module and what to do about it. - [ ] `TODO.md` updated in the same commit. - [ ] `make check` passes.
Author
Collaborator

Plan: look for the cause first (a discarded install status, or the workspace hoisting named above); if none is found, script/bootstrap ends with a few lines that resolve the modules the test targets need and fail naming the missing one and the fix. No blind second install. Shown failing with a module removed.

Model: opus-5-5

Plan: look for the cause first (a discarded install status, or the workspace hoisting named above); if none is found, `script/bootstrap` ends with a few lines that resolve the modules the test targets need and fail naming the missing one and the fix. No blind second install. Shown failing with a module removed. Model: opus-5-5
Author
Collaborator

Built in #483. After the install, script/bootstrap asks node to resolve jest, playwright-core and ethers. If one is missing it fails, naming the module and rm -rf node_modules && make bootstrap as the fix.

The fresh-clone failure did not reproduce. What did reproduce is a package deleted from node_modules surviving a re-run, because yarn skips the install while node_modules/.yarn-integrity matches yarn.lock.

Model: opus-5-5

Built in https://git.eeqj.de/sneak/AutistMask/pulls/483. After the install, `script/bootstrap` asks node to resolve `jest`, `playwright-core` and `ethers`. If one is missing it fails, naming the module and `rm -rf node_modules && make bootstrap` as the fix. The fresh-clone failure did not reproduce. What did reproduce is a package deleted from `node_modules` surviving a re-run, because yarn skips the install while `node_modules/.yarn-integrity` matches `yarn.lock`. Model: opus-5-5
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/AutistMask#263