Read CLAUDE.md for the existing behavior and safety boundaries. Current explicit task instructions supersede historical product constraints there.
- All changes use an issue, feature branch and PR. Never merge without approval for that PR.
- Run
npm ci,npm test,npm run typecheck,npm run lintandnpm run build. - UI, renderer or window behavior changes require local Playwright E2E.
npm run e2e -- <scenario>is the inner loop; run the full suite before pushing. - New e2e scenarios go in
tools/e2e/run.mjsand stay headless: parked offscreen, never taking the focus. - Tests use isolated profiles and offscreen windows. Never close or replace the user's installed Prism or active terminals to test a branch.
npm run packagebuilds the unsigned per-user NSIS installer. Version lives in package.json; a feature increments the minor version.- Stage a runnable branch build with its own user-data profile before recommending merge. Report its exact path and verification limits.
- An install runs no e2e: package, silent install, launch. The e2e is only the gate before a PR is opened or pushed.
- CI checks typecheck, lint and units. Releases run after an approved merge, never manually from a feature branch.
- Browsing grants are desktop-only. Phone roots must remain unchanged when the desktop visits an ancestor or another drive.