Nightly local staging E2E
A deterministic Playwright route that seeds local Supabase, checks the VPS staging stack, runs ac-frontend E2E, uploads evidence when needed, and files grouped bug tickets.
Operating model
timed jobThe service has an ExecStartPre seed step, then creates a dated Linear issue with qa:local-staging-e2e. Symphony runs the report-only route from ac-frontend against the local staging stack and cleans local artifacts after evidence upload.
Do not hard-code 5173. Symphony derives SYMPHONY_FRONTEND_PORT, SYMPHONY_FRONTEND_URL, and PLAYWRIGHT_BASE_URL per workspace so concurrent frontend runs do not collide.
System shape
click the nodesThis job is the deterministic counterpart to broad staging QA. It validates the local stack before Playwright and treats cleanup as part of the run contract.
Cadence design
compare modesEach timed job has a small set of modes that decide whether the run is healthy, degraded, or ready to create follow-up work. Use the controls to compare the operating contract.
Make the local stack testable
The seed step prevents blank local data from masquerading as an E2E failure or auth issue.
- E2E auth user exists
- organization and owner membership exists
- baseline CRM rows exist
- seed can run idempotently after db reset
Keep the report degraded and create a run-health or stack follow-up instead of calling the suite healthy.
Execution tracks
interactiveThe tracks make each run inspectable. They separate inputs, outputs, and failure modes so reports do not collapse into vague status updates.
Stack health
Verify the local API, Supabase, frontend URL, and Celery worker dependencies before Playwright.
- health endpoints
- systemd services
- seed script
- service health summary
- blocked setup rows
- stack follow-ups
Failure risk map
priority mapWhen the suite fails, the report should quickly show whether the issue is stack setup, test coverage, product behavior, or evidence handling.
969086827264Output rubric
ticket rulesThe run should create follow-up work only when the output is concrete. Use the rubric to keep reports, bug tickets, and operational follow-ups separated.
Critical
Use for total E2E outage caused by product behavior after the stack and seed are proven healthy.
- login always fails
- core app shell blank
- data save path loses records
Run contract
evidence rowsThe local E2E issue must prove stack health, test execution, evidence upload, and cleanup before it moves to Symphony Complete.
Timed issue
Title format is Nightly local staging E2E - YYYY-MM-DD with qa:local-staging-e2e, staging, frontend, and e2e labels.
Report-only route
No code edits, commits, pushes, PRs, or attempted fixes. Writes are report comments, bug tickets, evidence attachments, Slack output, and state updates.
App URL and PLAYWRIGHT_BASE_URLLocal staging service healthE2E commandE2E start, end, and durationE2E result summaryNative Linear evidence attachmentsBug ticketsRun-health retrospectiveSlack summaryLocal artifact cleanupFrontend/dev-server cleanupCommand plan
operator pathUse these commands to dry-run, install, and inspect the timer path.
sudo -u symphony /opt/symphony/elixir/scripts/create_local_staging_e2e_issue.sh --dry-run --date 2026-05-21sudo /opt/symphony/elixir/scripts/seed_local_supabase.sh --checksudo systemctl enable --now symphony-local-staging-e2e.timercurl -fsS http://127.0.0.1:8008/healthCleanup removes per-run artifacts and managed servers only. It must not delete node_modules, the Playwright browser cache, npm cache, or other reusable setup.
Rollout path
ship safelyDry-run and seed preflight
Verify the issue body, labels, cycle, local Supabase seed, and local API health.
Install companion services stack
Ensure the ac-python-api Celery worker and beat services are enabled with the same environment files.
Enable nightly E2E report-only
Run Playwright nightly and create grouped bugs only for actionable failures with evidence.
Watch residue disk hygiene
Confirm cleanup rows stay green so traces, videos, HARs, and temp logs do not accumulate.