Run
Surfaces
Latest results
Coverage & roadmap
Tests
| Test | Projects | Tags |
|---|---|---|
| Loading… | ||
Tags
| Tag | Tests | Actions |
|---|---|---|
| Loading… | ||
Environments
.env.Add environment
Credential profiles
.env. Stored locally in config/credentials.json (gitignored) — never committed.Add profile
Lead templates
Add template
Run history
SMS conversation
Test coverage map
Every test, grouped by file with the purpose it verifies (pulled from each spec). Click a file to expand its tests.
What this is
A central pre-release smoke / E2E suite for the FranFunnel platform — one repo, one report, one gate across surfaces. It points at deployed environments (staging/prod), so it gates a release rather than a local build.
This dashboard is local-only (binds 127.0.0.1), reads your own .env, and lets you run the suite, watch results live, inspect history, drive SMS, and preflight — all from the browser.
Common commands
| Command | What it does |
|---|---|
npm run test:fast | unit + contract — deterministic, no creds, no network (~1s). Run before every commit. |
npm run typecheck | tsc --noEmit across the whole repo. |
npm run test:smoke | the full pre-release gate (--grep @smoke). |
npm run test:safe | everything except @mutates. |
npm run doctor | preflight: what's configured, what runs vs skips, Twilio + surface reachability (also the Health tab). |
npm run stats | flaky tests + slowest + run trend from history (also the Insights tab). |
npm run sms -- read|watch|send | read/send SMS on the Twilio test number (also the SMS tab). |
npm run dashboard | this dashboard → http://127.0.0.1:4321. |
Test projects
| Project | Covers | Needs |
|---|---|---|
| unit | Pure logic — SMS classifiers, CLI parser, waitFor, Twilio scoping. Deterministic. | nothing |
| contract | FranFunnel adapter vs a local HTTP fixture — request shapes + error contract. | nothing |
| smoke | Cross-surface reachability + web render (health). | network |
| api | FranFunnel API contract (safe; the mutating lead-create is opt-in). | network |
| ff2-web | FranFunnel login app — negative always, positive with creds. | FF2_TEST_EMAIL/PASSWORD |
| autopilot | Authed admin journeys J1–J10 (shell, lists, detail, bookings, diagnostics, search, queue, playground). | Supabase service-role + email |
| scenarios | Cross-system sagas: lead → autopilot SMS negotiation → booking. @mutates | FF_API_KEY (+ Twilio) |
Run npm run doctor or open Health to see exactly which will run vs skip with your current config.
Tags
Every test carries tags; filter with the Tag dropdown or --grep.
@smoke fast pre-release gate · @p0@p1@p2 priority · @auth needs a session · @unit pure logic · @contract adapter contract · @scenario cross-system saga · @mutates writes/real side-effects (excluded from the safe run)
Dashboard tabs
| Run | Pick a surface/tag/env and run — live progress bar, Stop, quick-run chips, optional 📱 watch-SMS. |
| Tests | Search, edit tags per test, and ▶ run one / ↻5 stability check any test. |
| Tags | Create / rename / delete tags across the suite. |
| Environments | Named target-URL sets; the active one is injected into runs. |
| Credentials | Named credential profiles injected into runs (secrets stay local). |
| Lead templates | Per-field lead generation for scenario runs. |
| History | Every run recorded locally; click a row for the per-test breakdown + errors. |
| Insights | Pass-rate trend, flaky tests (click to drill into their timeline + last error), slowest tests. |
| SMS | Live two-way conversation on the test number — read, watch (5s), and send as the lead. |
| Health | Browser preflight: targets, creds, what-runs, Twilio auth, reachability. The header dot mirrors it. |
Scenarios & safety
- Lead creation hits PROD (
app.franfunnel.com) — staging's lead endpoints are unreliable, and prod/staging share a backend, so the staging autopilot still handles it. - Twilio is scoped strictly to
TWILIO_NUMBER(the simulated lead) and filtered by timestamp — the suite never touches other traffic on the shared account. - Self-cleaning: each scenario cancels its booking over SMS, stops the autopilot drip, and archives the lead — even on failure.
- Authed autopilot tests mint a Supabase session from
SUPABASE_URL; it only authenticates against the matching app env. Setup verifies this and fails with a clear message on a staging-session-vs-prod-app mismatch. - Never click mutating controls on shared envs: Lead Control Center send/handoff, Bookings Sync, Playground run, create forms.
Shortcuts & tips
- ⌘/Ctrl + Enter on the Run tab launches a run.
- Quick-run chips and your project/tag selection are remembered across reloads.
- The header dot (● top-right) shows surface health; click it for the Health tab.
- Hover most controls for a tooltip explaining what they do.