Nightly staging QA crawl
A report-only agent-browser route that crawls the staging product, validates the feature map, runs mutation probes, retests recent bugs, and creates focused follow-up tickets.
Operating model
timed jobThe timer seeds a dated Linear issue with the qa:staging-regression label. Symphony routes it into a report-only policy, Codex uses agent-browser against the staging app, and the run completes only after report evidence, follow-up links, and Slack output are recorded.
The crawl is not just a bug hunt. It compares live routes and controls against the app-owned feature map, then creates QA improvement tickets when the map or fixtures no longer describe the product.
System shape
click the nodesThe page follows the same timed issue pattern as the security agent. Click a node to trace how the timer turns into report evidence and improvement tickets.
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.
Prove the crawl has a real target
The run checks agent-browser, auth, allowlisted domains, baseline data, and optional installed-app fixture seeding before it starts exploring.
- agent-browser doctor and session check
- dedicated QA account available
- non-empty baseline tenant data
- fixture seed path recorded
The crawl can close as a clean pass when evidence rows are complete.
Execution tracks
interactiveThe tracks make each run inspectable. They separate inputs, outputs, and failure modes so reports do not collapse into vague status updates.
Feature coverage
Validate the app-owned feature map and record one action per row for every visible mapped feature.
- main-pages.json
- live navigation
- source routes
- coverage matrix
- missing coverage tickets
- skipped feature reasons
Coverage risk map
priority mapThese are the surfaces the crawl should prioritize before spending remaining budget on deeper exploration.
969284767066Output 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 broken primary workflows, data loss, cross-tenant exposure, or a production-blocking regression visible on staging.
- cannot sign in
- cross-tenant data visible
- record creation loses data
Run contract
evidence rowsThe seeded issue body is the source of truth for run parameters and evidence. Completion is gated on workpad rows, not on a prose statement.
Timed issue
Title format is Nightly staging regression QA - YYYY-MM-DD with qa:staging-regression, staging, and frontend labels.
Report-only route
No code edits, commits, pushes, PRs, or attempted fixes. Writes are report comments, Slack output, evidence attachments, and focused follow-up tickets.
Staging URL and allowed domainsBrowser viewport and agent-browser sessionVisible baseline data summaryFeature map path and validation resultMain-page feature matrixMutation probe summary with run tagRecent bug retest summaryQA-system improvement reviewRun-health retrospectiveSlack summary and Linear report linksLocal evidence cleanup after upload verificationCommand plan
operator pathThe implementation should start with the dry-run seeder and the agent-browser smoke checks before enabling the timer.
sudo -u symphony /opt/symphony/elixir/scripts/create_staging_qa_issue.sh --dry-run --date 2026-05-21sudo systemctl enable --now symphony-staging-qa.timersystemctl list-timers | grep symphony-staging-qaAGENT_BROWSER_ARGS="${AGENT_BROWSER_ARGS:---no-sandbox}" agent-browser doctor --quick --jsonScreenshots, clips, traces, HARs, and dumps are temporary upload inputs. The durable evidence is the native Linear attachment URL after fetch verification.
Rollout path
ship safelyDry-run the seeder no writes
Confirm title, labels, state, cycle, workpad rows, staging URL, allowed domains, budget, and viewport.
Seed account and fixtures auth first
Verify the dedicated QA account and baseline tenant. Optional installed-app fixture seeding is recorded when unavailable.
Enable nightly crawl report-only
Let the route create bug tickets and QA improvement tickets only when evidence is specific and fetchable.
Review drift weekly slow loop
Use repeated QA improvement tickets to tune fixtures, feature-map ownership, allowlists, and report quality.