Overview
Manual end-to-end test run of the current branch: analyze the changes, agree a test plan, start every app, run the tests, show a report, stop what this run started once the report is approved, delete the test plan and offer to delete the report. Nothing starts without an approved test plan; nothing this run started outlives the run.
Phases
| # | Phase | Read |
|---|---|---|
| 0 | Preconditions: infrastructure is up, no stale run | references/environment.md § Preconditions |
| 1-2 | Analyze changes and task documents, write the test plan, get it approved | references/test-plan.md |
| 3 | Check Playwright MCP and Max login, start all apps, write the state file | references/environment.md |
| 4 | Run the tests, record actual vs expected | references/execution.md |
| 5 | Write the report, show it through Plannotator; the apps keep running while the user reviews | references/report.md |
| 6 | Stop every app this run started, once the report is approved (or the review is dismissed, or the run is aborted). On approval also delete the test plan and ask whether to delete the report | references/environment.md § Teardown, § Cleanup of documents |
Read each reference when you reach its phase, not upfront.
Hard rules
- The test plan and the report are written in Russian (code, commands, identifiers stay as-is).
- The test plan goes through native Plan Mode (
EnterPlanMode→ExitPlanMode). No approval, no run. - Never start infrastructure. If it is down, stop and say what is down.
- API →
curl. Frontend → Playwright (the backend is covered through the page's own requests). Max bot or Max mini app → the web version of Max only. Existing e2e specs that cover a changed behavior join the plan. - Start the whole monorepo: every app, including those the tests do not touch, without asking which. Use only the project's own commands (
testing.apps[].startorstart:*scripts). Never override env vars or addNODE_TLS_REJECT_UNAUTHORIZED=0. - Record every app in
tmp/test-run-state.jsonthe moment it starts. Stop everyowned: trueentry in Phase 6. An app that already answers before you start it is not yours: do not start or stop it. - On report approval only: delete the test plan file and the run's temp files (app logs), then ask (
AskUserQuestion) whether to delete the report; keep it (and its evidence intmp/reports/<run>/) unless the user says delete. Dismissed review or abort: delete nothing. - Never fix code, commit, or push during a test run. Report failures; fix only on request.
- Playwright runs headless; open a visible window only for the Max login (
references/environment.md). Logging in is the user's job: never type a phone number or a code. - Bash: no
cd, nosleepchains (use Monitor), one check per call.
Project config
Project values live in .claude/dev-conventions.json under testing (schema in references/environment.md). No such block: discover start:* scripts in package.json, show them in the plan, offer to save them to the config.
Common mistakes
| Mistake | Fix |
|---|---|
| Starting apps before the plan is approved | Phase 3 begins only after ExitPlanMode approval |
Killing only the parent npm/nx process |
Kill the process group (kill -- -<pgid>) and verify the ports are free |
| Reporting "passed" without actual results | Every test gets expected vs actual |