--- key: testing.live-e2e-prepush-timing title: 2026-07-21 — Live-E2E runs BEFORE the push, and downloads are curled, not browsed (#542) status: active since: '2026-07-21' supersedes: none superseded-by: none rule: Run live-E2E via `scripts/e2e-local.sh` before pushing a write-path or UI change, and exercise download endpoints with curl, never a browser tab. signals: 'live E2E timing · pre-push validation · `scripts/e2e-local.sh` · download endpoint · browser tab · paths: `scripts/e2e-local.sh`, `docs/e2e-local.md` · issues: #542' mechanics: 'Seeding recipe: `docs/e2e-local.md` → "Seeding a local TV library for E2E" (tiny ffmpeg testsrc MKVs + `LibraryPath` SQL rows + scan). The *requirement* itself is `release.live-e2e-required`; this record adds only the timing and the download rule.' --- Live-E2E after the push wastes a CI run to learn something the local harness would have said first — and on this Gitea a run cannot be cancelled. Fold E2E findings into the branch while nothing is pushed. Download endpoints must be curled for the same reason as the Playwright rule: a tab has no page to settle on and the browser tool hangs.