@tamsensedev/runner 0.13.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/LICENSE +5 -5
  2. package/README.md +61 -57
  3. package/dist/cli.js +646 -315
  4. package/dist/cli.js.map +1 -1
  5. package/dist/recorder.cjs.map +1 -1
  6. package/library/.claude-plugin/plugin.json +5 -5
  7. package/library/THIRD_PARTY_NOTICES.md +123 -123
  8. package/library/agents/code-architect.md +67 -67
  9. package/library/agents/code-explorer.md +61 -61
  10. package/library/agents/code-reviewer.md +73 -73
  11. package/library/agents/code-simplifier.md +62 -62
  12. package/library/agents/design-critic.md +52 -52
  13. package/library/agents/second-opinion.md +64 -64
  14. package/library/agents/security-auditor.md +86 -86
  15. package/library/agents/silent-failure-hunter.md +70 -70
  16. package/library/agents/test-coverage-analyzer.md +78 -78
  17. package/library/agents/test-runner.md +48 -48
  18. package/library/agents/ui-tester.md +50 -50
  19. package/library/licenses/Apache-2.0.txt +202 -202
  20. package/library/skills/accessibility/SKILL.md +144 -144
  21. package/library/skills/accessibility/references/wcag-checks.md +168 -168
  22. package/library/skills/addressing-review-feedback/SKILL.md +109 -109
  23. package/library/skills/app-screens/SKILL.md +96 -96
  24. package/library/skills/app-screens/references/shell-kpis-charts.md +108 -108
  25. package/library/skills/app-screens/references/states-density-phone.md +54 -54
  26. package/library/skills/app-screens/references/tables-forms-settings.md +104 -104
  27. package/library/skills/avoiding-generic-ai-design/SKILL.md +92 -92
  28. package/library/skills/avoiding-generic-ai-design/references/tells.md +112 -112
  29. package/library/skills/clean-commits/SKILL.md +85 -85
  30. package/library/skills/design-review/SKILL.md +107 -107
  31. package/library/skills/design-review/references/critique-passes.md +101 -101
  32. package/library/skills/design-review/references/screenshot-procedure.md +121 -121
  33. package/library/skills/differential-security-review/LICENSE +427 -427
  34. package/library/skills/differential-security-review/SKILL.md +105 -105
  35. package/library/skills/differential-security-review/references/adversarial.md +115 -115
  36. package/library/skills/differential-security-review/references/methodology.md +145 -145
  37. package/library/skills/differential-security-review/references/patterns.md +108 -108
  38. package/library/skills/false-positive-check/LICENSE +427 -427
  39. package/library/skills/false-positive-check/SKILL.md +95 -95
  40. package/library/skills/false-positive-check/references/bug-class-verification.md +128 -128
  41. package/library/skills/false-positive-check/references/deep-verification.md +113 -113
  42. package/library/skills/false-positive-check/references/evidence-templates.md +93 -93
  43. package/library/skills/false-positive-check/references/false-positive-patterns.md +122 -122
  44. package/library/skills/false-positive-check/references/gate-reviews.md +36 -36
  45. package/library/skills/false-positive-check/references/standard-verification.md +80 -80
  46. package/library/skills/focused-implementation/SKILL.md +104 -104
  47. package/library/skills/implementation-plan/SKILL.md +66 -66
  48. package/library/skills/interface-design/SKILL.md +144 -144
  49. package/library/skills/interface-design/references/craft-defaults.md +130 -130
  50. package/library/skills/interface-design/references/new-direction.md +62 -62
  51. package/library/skills/interface-design/references/writing.md +52 -52
  52. package/library/skills/interface-polish/SKILL.md +103 -103
  53. package/library/skills/interface-polish/references/detail-rules.md +154 -154
  54. package/library/skills/interface-polish/references/worst-case-data.md +158 -158
  55. package/library/skills/motion-design/SKILL.md +106 -106
  56. package/library/skills/motion-design/references/recipes.md +243 -243
  57. package/library/skills/postgres-performance/SKILL.md +97 -97
  58. package/library/skills/postgres-performance/references/rules.md +265 -265
  59. package/library/skills/project-orientation/SKILL.md +77 -77
  60. package/library/skills/reviewing-changes/SKILL.md +183 -183
  61. package/library/skills/safe-database-changes/SKILL.md +111 -111
  62. package/library/skills/safe-database-changes/references/backfills.md +75 -75
  63. package/library/skills/safe-database-changes/references/migration-tools.md +69 -69
  64. package/library/skills/safe-database-changes/references/postgres-ddl.md +199 -199
  65. package/library/skills/security-review/SKILL.md +132 -132
  66. package/library/skills/security-review/references/checks-by-area.md +107 -107
  67. package/library/skills/security-review/references/do-not-report.md +86 -86
  68. package/library/skills/spec-writing/SKILL.md +144 -144
  69. package/library/skills/systematic-debugging/SKILL.md +130 -130
  70. package/library/skills/systematic-debugging/references/flaky-tests.md +51 -51
  71. package/library/skills/systematic-debugging/references/root-cause-tracing.md +55 -55
  72. package/library/skills/task-interview/SKILL.md +84 -84
  73. package/library/skills/test-driven-development/SKILL.md +116 -116
  74. package/library/skills/test-driven-development/references/writing-good-tests.md +85 -85
  75. package/library/skills/ui-testing/SKILL.md +102 -102
  76. package/library/skills/ui-testing/references/headless-check.md +295 -295
  77. package/library/skills/ui-testing/references/local-stand.md +51 -51
  78. package/library/skills/ui-testing/references/playwright-patterns.md +134 -134
  79. package/library/skills/ui-testing/references/recording.md +61 -61
  80. package/library/skills/verification-before-completion/SKILL.md +113 -113
  81. package/library/skills/web-interface-guidelines/SKILL.md +202 -202
  82. package/package.json +46 -46
@@ -1,102 +1,102 @@
1
- ---
2
- name: ui-testing
3
- description: Use when a change affects what users see or click in a web app and should be checked in a real browser, when writing or fixing Playwright or Cypress tests, or when a test step must verify UI behaviour. Runs the project's E2E suite or a headless check from a temp folder and reports screenshots and errors as evidence.
4
- ---
5
-
6
- # UI testing in a headless browser
7
-
8
- Reading the code tells you what should happen; a browser shows what does. This skill gets the app running, drives the changed flows headless, and turns what it saw into evidence for the report. Nobody watches the run, so every step must finish on its own and leave the machine as it was.
9
-
10
- The project's own setup wins: its E2E framework, config, fixtures, page objects, test data, auth helpers and scripts. Use them before anything from here.
11
-
12
- ## Hard rules
13
-
14
- 1. **Headless only.** Never open a window: no `--headed`, `--ui`, `--debug`, `show-report`, `show-trace`, `cypress open`, `PWDEBUG`. Playwright's HTML reporter opens a browser on failure when not in CI, so run with `--reporter=line` and `PW_TEST_HTML_REPORT_OPEN=never`. Set `BROWSER=none` when starting dev servers so they do not open one either.
15
- 2. **No new dependencies.** Do not add packages to the repository and do not download browsers (`playwright install`, `npx some-tool@latest`) just to check. Installing the project's own dependencies from its lockfile (`pnpm install --frozen-lockfile`, `npm ci`) is fine: a fresh checkout often has none. If the project has no Playwright but the `TAMSENSE_PLAYWRIGHT` environment variable is set, the TAMsense runner has already installed `playwright-core` and a headless browser outside the project, and the headless check script uses them. If nothing is, check from the code and say the browser check could not run.
16
- 3. **A local copy from the task folder, with the project's own start command, on a free port.** Start the app with its dev or preview script, never a hand-made server that skips its config. Find its local setup yourself, use only local settings from this checkout, check that every address points at this computer, and run its containers as your own compose project: see [references/local-stand.md](references/local-stand.md). Prefer the headless check script, which starts the server and stops its whole process tree for you. Stop it at the end, including child processes, and confirm the port is free again.
17
- 8. **Stop only what you started, by process id.** This is someone's own computer and their other programs may be running. Never kill processes by name or pattern: no `taskkill /IM`, `pkill`, `killall`, `Stop-Process -Name`. If you start a server yourself, record its PID and stop that process tree (`taskkill /PID <pid> /T /F` on Windows, `kill -- -<pgid>` elsewhere). If a process you started cannot be stopped that way, say so in the report and leave the rest alone.
18
- 4. **Outputs outside the repository.** Screenshots, traces, reports, scratch scripts and auth state go to a new folder in the OS temp directory. `git status` must show nothing new from you when you finish.
19
- 5. **Never fake it.** If the app cannot start (missing environment variables, secrets, a database or service you may not use), report exactly what is missing. Do not mock the whole backend and call the result a pass, and do not invent screenshots or results.
20
- 6. **Do not write to shared systems.** If the settings point at a shared, staging or production backend or database, do not start the app: the check could not run (local-stand.md, rule 7). Recorded browsers also abort requests that change data on other computers.
21
- 7. **Never hide failures.** Do not skip, `fixme`, delete or loosen a failing test to get a green run. In a check step, a failing test is a finding.
22
- 9. **Every browser is recorded for the task.** In a TAMsense run each Playwright context becomes a replay people watch on the task, and the tested site's TAMsense tracker is blocked. Open contexts through the recorder with a title and a purpose, mark the meaningful steps, close each with notes on what you tested and what happened, and add a video for canvas, maps, video players or iframes from another site: see [references/recording.md](references/recording.md).
23
-
24
- ## Process
25
-
26
- ### 1. Decide what to check
27
-
28
- From the task, the spec's acceptance criteria and the diff (`git diff origin/<base>...HEAD --stat`, then the changed components, routes and styles), write a short list of scenarios before touching the browser:
29
-
30
- - The main flow the task changed, end to end.
31
- - Its states: loading, empty, error, long or unusual content, many items, disabled controls.
32
- - A narrow screen (390 px wide) if layout or styles changed, plus a desktop width.
33
- - Keyboard use for any new or changed control (Tab to it, activate with Enter or Space, Escape closes overlays). The `accessibility` skill has the full checks.
34
-
35
- ### 2. Find how this project runs and tests its UI
36
-
37
- - E2E setup: `playwright.config.*`, `cypress.config.*`, `e2e/` or `tests/` folders, scripts like `test:e2e` in `package.json`, and the CI workflow steps that run them (they show the exact command, env vars and services).
38
- - The app: dev and preview scripts, required env vars (`.env.example`, config validation, README), services it needs (database, cache, other apps in a monorepo). Check whether required variables are set by name; never print their values.
39
- - Auth: seeded test users, a test login endpoint, existing storage-state setup.
40
- - The installed Playwright or Cypress version.
41
-
42
- ### 3a. The project has an E2E suite
43
-
44
- Run the specs related to the change, then the whole suite if it is fast enough.
45
-
46
- - Playwright: `PW_TEST_HTML_REPORT_OPEN=never npx playwright test <specs> --reporter=line --output <tmp>/test-results` (use the package manager the project uses). Its browsers are recorded by themselves under the step's name; a long suite fills the run's limit of 20 replays, so run the related specs rather than everything when you can. Its `webServer` config usually starts the app: check the port and `reuseExistingServer`, and make sure no stale server of yours is still running.
47
- - Cypress: `npx cypress run --spec <specs> --config screenshotsFolder=<tmp>/screens,videosFolder=<tmp>/videos,video=false` (headless by default).
48
- - If a run fails, rerun the failing spec alone to separate a real failure from a flaky one, and read the error and screenshot. Decide whether the failure comes from the change (the diff touches that flow) or existed before; say which and why.
49
-
50
- In a code step, add or update tests for the changed flow following the suite's structure; see [references/playwright-patterns.md](references/playwright-patterns.md) for locators, waiting, auth, mocking and the plan, write, repair loop. In a review or test step, do not edit the repository's tests; check extra scenarios with 3b instead.
51
-
52
- ### 3b. No suite, or scenarios the suite does not cover
53
-
54
- Use the headless check in [references/headless-check.md](references/headless-check.md): a Node.js script you write to a temp folder that resolves Playwright from the project, starts the app with the project's command on a free port, visits the pages at 1280 and 390 px, runs your steps with marks, records each page for the task, saves screenshots and a JSON summary (console errors, failed requests, horizontal overflow, optional axe scan), and stops the app.
55
-
56
- If the project has no Playwright among its dependencies and no other headless browser tool is available, do not add one. Check the change from the code and say so.
57
-
58
- ### 4. Look at the evidence
59
-
60
- - Open every screenshot with the Read tool and compare it with what the scenario expects. Describe what you see in plain words: what is on the screen, what is wrong, where.
61
- - Console errors, page errors and failed requests from the changed code are findings; third-party noise is not, but name it so the reader knows you saw it.
62
- - Sideways scrolling at 390 px, cut-off text, overlapping elements, missing states and dead buttons are findings.
63
- - For visual quality and consistency with the design system, apply the `design-review` skill; for the rules list, `web-interface-guidelines`; for accessibility, `accessibility`.
64
-
65
- ### 5. Clean up
66
-
67
- Stop the servers you started, by their process id only (hard rule 8), check the port no longer answers, remove containers and temp folders you created unless the task asks to keep artifacts, and run `git status` in every repository to confirm you left nothing behind.
68
-
69
- ## Report
70
-
71
- ```
72
- UI check: <passed | failed | could not run>
73
- How: <suite command or headless check>, browser <chromium | chrome | msedge>, widths <1280, 390>
74
- Recordings: <titles of the replays and videos attached to the task>
75
- Scenarios:
76
- - <scenario>: pass | fail | not checked (why). Evidence: <what the screenshot or log shows>
77
- Findings:
78
- - <file:line if traced> <what is wrong, how to reproduce, what was expected>
79
- Not checked: <and why: missing env vars X, Y; no browser available; flow needs an external provider>
80
- Assumptions: <test account used, data you created locally, version>
81
- ```
82
-
83
- In a test step, base the verdict on the scenarios: a broken acceptance criterion, an error from the changed code or a layout broken on narrow screens fails it. If the local copy could not start because of this computer (Docker not running, no local setup, settings that point outside), finish as [references/local-stand.md](references/local-stand.md) rule 7 says: `couldNotRun`, no handoff, the task waits for a person. If the browser check could not run for another reason, do not report it as passed; judge from the other evidence (tests, code) and state clearly that the UI was not seen. If the change itself stops the app from starting or building, that is a failure.
84
-
85
- ## Common mistakes
86
-
87
- - Assuming the page works because the build passed.
88
- - Fixed sleeps instead of waiting for the element that proves readiness.
89
- - Letting the HTML reporter or a dev server open a browser window.
90
- - Leaving the dev server running, or `test-results/` and screenshots inside the repository.
91
- - Testing only the happy path at desktop width.
92
- - Pointing the check at staging or production because the local app did not start.
93
- - Listing screenshot paths without saying what they show.
94
- - Generic names for screenshots and recordings ("screenshot1", "test run") instead of what they show and why.
95
-
96
- ## Done when
97
-
98
- - Every scenario from step 1 is checked or listed as not checked with a reason.
99
- - Evidence (described screenshots, error lines, failing assertions) backs each finding.
100
- - No window was opened, no dependency added, nothing left running or written into the repository.
101
-
102
- Sources: the start, wait, act, stop approach of anthropics/skills webapp-testing (Apache-2.0, commit dbd4588), testdino-hq/playwright-skill (MIT, commit 178d1cb), ideas from the Playwright test agents (Apache-2.0). Changed: rewritten for Node and the project's own setup, unattended rules added.
1
+ ---
2
+ name: ui-testing
3
+ description: Use when a change affects what users see or click in a web app and should be checked in a real browser, when writing or fixing Playwright or Cypress tests, or when a test step must verify UI behaviour. Runs the project's E2E suite or a headless check from a temp folder and reports screenshots and errors as evidence.
4
+ ---
5
+
6
+ # UI testing in a headless browser
7
+
8
+ Reading the code tells you what should happen; a browser shows what does. This skill gets the app running, drives the changed flows headless, and turns what it saw into evidence for the report. Nobody watches the run, so every step must finish on its own and leave the machine as it was.
9
+
10
+ The project's own setup wins: its E2E framework, config, fixtures, page objects, test data, auth helpers and scripts. Use them before anything from here.
11
+
12
+ ## Hard rules
13
+
14
+ 1. **Headless only.** Never open a window: no `--headed`, `--ui`, `--debug`, `show-report`, `show-trace`, `cypress open`, `PWDEBUG`. Playwright's HTML reporter opens a browser on failure when not in CI, so run with `--reporter=line` and `PW_TEST_HTML_REPORT_OPEN=never`. Set `BROWSER=none` when starting dev servers so they do not open one either.
15
+ 2. **No new dependencies.** Do not add packages to the repository and do not download browsers (`playwright install`, `npx some-tool@latest`) just to check. Installing the project's own dependencies from its lockfile (`pnpm install --frozen-lockfile`, `npm ci`) is fine: a fresh checkout often has none. If the project has no Playwright but the `TAMSENSE_PLAYWRIGHT` environment variable is set, the TAMsense runner has already installed `playwright-core` and a headless browser outside the project, and the headless check script uses them. If nothing is, check from the code and say the browser check could not run.
16
+ 3. **A local copy from the task folder, with the project's own start command, on a free port.** Start the app with its dev or preview script, never a hand-made server that skips its config. Find its local setup yourself, use only local settings from this checkout, check that every address points at this computer, and run its containers as your own compose project: see [references/local-stand.md](references/local-stand.md). Prefer the headless check script, which starts the server and stops its whole process tree for you. Stop it at the end, including child processes, and confirm the port is free again.
17
+ 8. **Stop only what you started, by process id.** This is someone's own computer and their other programs may be running. Never kill processes by name or pattern: no `taskkill /IM`, `pkill`, `killall`, `Stop-Process -Name`. If you start a server yourself, record its PID and stop that process tree (`taskkill /PID <pid> /T /F` on Windows, `kill -- -<pgid>` elsewhere). If a process you started cannot be stopped that way, say so in the report and leave the rest alone.
18
+ 4. **Outputs outside the repository.** Screenshots, traces, reports, scratch scripts and auth state go to a new folder in the OS temp directory. `git status` must show nothing new from you when you finish.
19
+ 5. **Never fake it.** If the app cannot start (missing environment variables, secrets, a database or service you may not use), report exactly what is missing. Do not mock the whole backend and call the result a pass, and do not invent screenshots or results.
20
+ 6. **Do not write to shared systems.** If the settings point at a shared, staging or production backend or database, do not start the app: the check could not run (local-stand.md, rule 7). Recorded browsers also abort requests that change data on other computers.
21
+ 7. **Never hide failures.** Do not skip, `fixme`, delete or loosen a failing test to get a green run. In a check step, a failing test is a finding.
22
+ 9. **Every browser is recorded for the task.** In a TAMsense run each Playwright context becomes a replay people watch on the task, and the tested site's TAMsense tracker is blocked. Open contexts through the recorder with a title and a purpose, mark the meaningful steps, close each with notes on what you tested and what happened, and add a video for canvas, maps, video players or iframes from another site: see [references/recording.md](references/recording.md).
23
+
24
+ ## Process
25
+
26
+ ### 1. Decide what to check
27
+
28
+ From the task, the spec's acceptance criteria and the diff (`git diff origin/<base>...HEAD --stat`, then the changed components, routes and styles), write a short list of scenarios before touching the browser:
29
+
30
+ - The main flow the task changed, end to end.
31
+ - Its states: loading, empty, error, long or unusual content, many items, disabled controls.
32
+ - A narrow screen (390 px wide) if layout or styles changed, plus a desktop width.
33
+ - Keyboard use for any new or changed control (Tab to it, activate with Enter or Space, Escape closes overlays). The `accessibility` skill has the full checks.
34
+
35
+ ### 2. Find how this project runs and tests its UI
36
+
37
+ - E2E setup: `playwright.config.*`, `cypress.config.*`, `e2e/` or `tests/` folders, scripts like `test:e2e` in `package.json`, and the CI workflow steps that run them (they show the exact command, env vars and services).
38
+ - The app: dev and preview scripts, required env vars (`.env.example`, config validation, README), services it needs (database, cache, other apps in a monorepo). Check whether required variables are set by name; never print their values.
39
+ - Auth: seeded test users, a test login endpoint, existing storage-state setup.
40
+ - The installed Playwright or Cypress version.
41
+
42
+ ### 3a. The project has an E2E suite
43
+
44
+ Run the specs related to the change, then the whole suite if it is fast enough.
45
+
46
+ - Playwright: `PW_TEST_HTML_REPORT_OPEN=never npx playwright test <specs> --reporter=line --output <tmp>/test-results` (use the package manager the project uses). Its browsers are recorded by themselves under the step's name; a long suite fills the run's limit of 20 replays, so run the related specs rather than everything when you can. Its `webServer` config usually starts the app: check the port and `reuseExistingServer`, and make sure no stale server of yours is still running.
47
+ - Cypress: `npx cypress run --spec <specs> --config screenshotsFolder=<tmp>/screens,videosFolder=<tmp>/videos,video=false` (headless by default).
48
+ - If a run fails, rerun the failing spec alone to separate a real failure from a flaky one, and read the error and screenshot. Decide whether the failure comes from the change (the diff touches that flow) or existed before; say which and why.
49
+
50
+ In a code step, add or update tests for the changed flow following the suite's structure; see [references/playwright-patterns.md](references/playwright-patterns.md) for locators, waiting, auth, mocking and the plan, write, repair loop. In a review or test step, do not edit the repository's tests; check extra scenarios with 3b instead.
51
+
52
+ ### 3b. No suite, or scenarios the suite does not cover
53
+
54
+ Use the headless check in [references/headless-check.md](references/headless-check.md): a Node.js script you write to a temp folder that resolves Playwright from the project, starts the app with the project's command on a free port, visits the pages at 1280 and 390 px, runs your steps with marks, records each page for the task, saves screenshots and a JSON summary (console errors, failed requests, horizontal overflow, optional axe scan), and stops the app.
55
+
56
+ If the project has no Playwright among its dependencies and no other headless browser tool is available, do not add one. Check the change from the code and say so.
57
+
58
+ ### 4. Look at the evidence
59
+
60
+ - Open every screenshot with the Read tool and compare it with what the scenario expects. Describe what you see in plain words: what is on the screen, what is wrong, where.
61
+ - Console errors, page errors and failed requests from the changed code are findings; third-party noise is not, but name it so the reader knows you saw it.
62
+ - Sideways scrolling at 390 px, cut-off text, overlapping elements, missing states and dead buttons are findings.
63
+ - For visual quality and consistency with the design system, apply the `design-review` skill; for the rules list, `web-interface-guidelines`; for accessibility, `accessibility`.
64
+
65
+ ### 5. Clean up
66
+
67
+ Stop the servers you started, by their process id only (hard rule 8), check the port no longer answers, remove containers and temp folders you created unless the task asks to keep artifacts, and run `git status` in every repository to confirm you left nothing behind.
68
+
69
+ ## Report
70
+
71
+ ```
72
+ UI check: <passed | failed | could not run>
73
+ How: <suite command or headless check>, browser <chromium | chrome | msedge>, widths <1280, 390>
74
+ Recordings: <titles of the replays and videos attached to the task>
75
+ Scenarios:
76
+ - <scenario>: pass | fail | not checked (why). Evidence: <what the screenshot or log shows>
77
+ Findings:
78
+ - <file:line if traced> <what is wrong, how to reproduce, what was expected>
79
+ Not checked: <and why: missing env vars X, Y; no browser available; flow needs an external provider>
80
+ Assumptions: <test account used, data you created locally, version>
81
+ ```
82
+
83
+ In a test step, base the verdict on the scenarios: a broken acceptance criterion, an error from the changed code or a layout broken on narrow screens fails it. If the local copy could not start because of this computer (Docker not running, no local setup, settings that point outside), finish as [references/local-stand.md](references/local-stand.md) rule 7 says: `couldNotRun`, no handoff, the task waits for a person. If the browser check could not run for another reason, do not report it as passed; judge from the other evidence (tests, code) and state clearly that the UI was not seen. If the change itself stops the app from starting or building, that is a failure.
84
+
85
+ ## Common mistakes
86
+
87
+ - Assuming the page works because the build passed.
88
+ - Fixed sleeps instead of waiting for the element that proves readiness.
89
+ - Letting the HTML reporter or a dev server open a browser window.
90
+ - Leaving the dev server running, or `test-results/` and screenshots inside the repository.
91
+ - Testing only the happy path at desktop width.
92
+ - Pointing the check at staging or production because the local app did not start.
93
+ - Listing screenshot paths without saying what they show.
94
+ - Generic names for screenshots and recordings ("screenshot1", "test run") instead of what they show and why.
95
+
96
+ ## Done when
97
+
98
+ - Every scenario from step 1 is checked or listed as not checked with a reason.
99
+ - Evidence (described screenshots, error lines, failing assertions) backs each finding.
100
+ - No window was opened, no dependency added, nothing left running or written into the repository.
101
+
102
+ Sources: the start, wait, act, stop approach of anthropics/skills webapp-testing (Apache-2.0, commit dbd4588), testdino-hq/playwright-skill (MIT, commit 178d1cb), ideas from the Playwright test agents (Apache-2.0). Changed: rewritten for Node and the project's own setup, unattended rules added.