👋 What is this?
This dashboard runs automated checks against FranFunnel and tells you what’s working. Pick what to check, then hit ▶ Run now.
green = working · red = broken · grey = skipped (not set up — not broken)
⚠️ Anything tagged @mutates sends real texts / creates real leads. Keep “skip real-data tests” checked unless you mean to.
Latest results
Surfaces
What we check
Tests
| Test | Health | Projects | Tags |
|---|---|---|---|
| Loading… | |||
New test
fixme-stubbed test(…) at the
end of the chosen spec file (so it never reddens CI) — fill in the
body in your editor, then commit.
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
Virtual lead
Acts as a real lead texting FranFunnel — same transport as the
scenarios, but you type the lines. Replies send
real SMS from the Twilio test number (env
TWILIO_*); the conversation is read from the lead's
timeline.
Fires lead.new = the initial reach-out. ⚠️ Creating
a lead sends a real welcome SMS — the phone must be the
Twilio test number so the welcome lands where replies send from.
Conversation
Payload — the lead created in FranFunnel (fires lead.new)
Default lead fields plus any custom variables (sent to FranFunnel's lead/add as extra fields).
Talk to Autopilot
Enrolls a test_ lead (testMode) into Autopilot. All
real sends are suppressed and replies are pushed back here —
FranFunnel is never touched.
Enrolls a fresh test_ lead with the payload below
(context + initial message), like FranFunnel's sign-up. Replies
pushed to
.
Conversation
Payload — the lead sign-up sent to Autopilot's enroll-lead webhook
Default lead fields plus any custom variables. This is what FranFunnel would send on sign-up.
Pre-release smoke & E2E suite for the FranFunnel platform — one repo, one report, one gate across surfaces.
Test coverage map
Every test, grouped by file. Click a file to expand its tests.
Common commands
npm run test:fastUnit + contract — deterministic, no creds, no network (~1s).
Run before every commit.
npm run typechecktsc --noEmit across the whole repo.
npm run test:smokeThe full pre-release gate (--grep @smoke).
npm run test:safeEverything except @mutates.
npm run doctorPreflight: what's configured, what runs vs skips, Twilio +
surface reachability.
npm run statsFlaky tests + slowest + run trend from history.
npm run sms -- read|watch|sendRead/send SMS on the Twilio test number.
npm run dashboardThis dashboard → http://127.0.0.1:4321.
Test projects
waitFor, Twilio scoping. Deterministic.
Run npm run doctor or open Health to see which
will run vs skip with your current config.
Tags
Every test carries tags; filter with the Tag dropdown or
--grep.
--project unit · contract · api · scenarios.
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.
-
Autopilot (direct test mode): ff-tester drives the
autopilot over its own webhook/test endpoints (no Supabase,
no FranFunnel). It targets the agent set in
AUTOPILOT_TEST_OWNER_KEY(which must haveallowTestLeads=true), unlocked byAUTOPILOT_WEBHOOK_SECRET.
Shortcuts & tips
- ⌘/Ctrl + Enter on the Run tab launches a run.
- Quick-run chips and your project/tag/exclude-@mutates 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.
Users
Full access. Manages all users and roles.
Can add/remove regular users.
Dashboard access only.
| Role |
|---|