CI and artifacts
Leave E2E_DEMO unset in GitHub Actions. Specs stay fast. The same walk writes a click storyboard (shot on teaching clicks: pointer + held ring) instead of walk.mp4. Transcripts still write unless E2E_DEMO_TRANSCRIPT=0. Record video locally (E2E_DEMO=1); do not strip shot or call page.screenshot in that run. See Video.
Do not skip assertions to make a recording prettier.
Where files land
| Path | Who writes it | Cleared when |
|---|---|---|
test-results/e2e-demo/stills/<stamp>/ | Playwemo storyboard (stills + transcript) | Only if E2E_DEMO_CLEAN=1 |
test-results/e2e-demo/video/<stamp>/ | Playwemo headed walk (transcript + walk.mp4) | Only if E2E_DEMO_CLEAN=1 |
test-results/e2e-demo/stills/latest.txt | Playwemo | Rewritten each stills run |
test-results/e2e-demo/video/latest.txt | Playwemo | Rewritten each video run |
test-results/playwright/ | Playwright failure dumps | Every Playwright run |
test-results/ is usually gitignored. Keep stamps so you can compare runs. Wipe them with E2E_DEMO_CLEAN=1 or bun run docs:e2e:clean.
Sharing a walk
To show a recording in Cursor chat or a PR, copy walk.mp4 into a published artifacts directory. Cloud Agents then inline the file — see Cursor.
Default: /opt/cursor/artifacts when that folder exists. Override:
E2E_DEMO=1 E2E_DEMO_COPY_WALK=/opt/cursor/artifacts/my_walk.mp4 \
bunx playwright test e2e/my-walk.spec.tsThe transcript copy is the same basename with .txt.
Headed overlay video is a local command (E2E_DEMO=1), not the default CI job.