Testing HQ · homebase · counted from origin/main 4420106f · 2026-07-30

MystFlo — every test we run, and what it actually proves

The homebase for all MystFlo testing — every layer as a card (what it covers · where it lives · the exact command · what it blocks · where its report is). Read as an honest ledger, not a scoreboard: layers that are stale, unproven, or absent are labelled as such, because a suite nobody trusts is worse than no suite at all.

Every count on this page was taken from origin/main via git ls-tree, not from a local working tree — a tree even a few commits behind reports specs that main has already deleted. The globs used are printed next to each figure so a disagreement can be settled on evidence.

★ How the tests ran — open the gallery Gate ladder The pyramid Honest ledger
G · Merge gate L1–L7 · Automated layers R1–R4 · Real-browser & manual P1–P2 · Periodic sweeps D · Test data & resets
★ Brain seeded journey — running now
How testing works here — the gate ladder
   WRITE TIME              PER MERGE (/ship)                 AFTER MERGE / PERIODIC
┌────────────────┐   ┌──────────────────────────────┐   ┌──────────────────────────────┐
│ lessons-learned│   │ scripts/local-checks.sh      │   │ /audit  whole-repo sweep     │
│ PRD read       │──►│  27 sections, numbered 1–19   │──►│  + closure loop (weekly)     │
│ chief standards│   │  FAIL = merge blocked          │   │                              │
└────────────────┘   ├──────────────────────────────┤   │ scripts/prove/  live harness  │
     prevents        │ quality · security · CTO      │   │  real EFs + prod DB, Stripe  │
                     │ adversarial review (Step 4)   │   │  TEST → PROVEN-LIVE/FAILED   │
                     └──────────────┬───────────────┘   └───────────┬──────────────────┘
                                    │                               │
                                    ▼                               ▼
                    ┌───────────────────────────────────────────────────────────┐
                    │ NOT A GATE — nothing here blocks a merge today              │
                    │ Playwright E2E (41 specs) · click-through (4 walked, rest draft) │
                    │ real-browser founder walks · Brain seeded journey rounds   │
                    └───────────────────────────────────────────────────────────┘

· The whole point of the bottom box: the review pipeline never clicks the real app. Nina's and Rina's demo windows were missed because live functionality failed in real use even though every PR passed quality / security / CTO review. The real-browser layer is the answer to that, and it is the least finished layer we have.
· GitHub Actions pr-checks.yml is advisory — five groups, same local-checks.sh --group. Merge still stays on /ship drain; Actions is not a permission slip.

The pyramid — and where it actually holds
                        /\
                       /  \        Real-browser walks   4 walked · activation/wallet still draft
                      /    \       + Brain seeded journey (3 rounds, in progress)
                     /──────\
                    /        \     Live prove harness    9 cases, real EFs + prod DB
                   /          \    E2E · Playwright      41 specs — not a merge gate
                  /────────────\
                 /              \  Edge fn · Deno        133 test files — gated (13d)
                /                \ Assistant eval        deterministic + opt-in live (13b)
               /──────────────────\
              /                    \ Unit · Vitest       155 test files — gated on the
             /______________________\                        changed diff only (19)

   honesty line ──────────────────────────────────────────────────────────────────
   · 27 vitest files fail on a clean main (#2398) — invisible to the changed-file gate
   · 1 Brain E2E spec still describes a Brain that no longer exists (#2945, brand-voice)
   · no accessibility, visual-regression, load, or cross-browser layer exists at all

The doc docs/testing/testing-strategy.md still draws this pyramid as "E2E (32 specs) / Edge (expanding) / Unit" and dates itself April 2026 — the counts above are from origin/main 4420106f and supersede it. Drift list at the bottom of this page.

G · The merge gate — scripts/local-checks.sh

The one thing that can stop a merge. ./scripts/local-checks.sh · --quick skips npm install · --fix auto-fixes lint. Summary prints PASS / FAIL / WARN / SKIP; any FAIL prints BLOCKED and exits non-zero.

Numbering caveat — read before quoting a count
CLAUDE.md calls this "19 checks." 19 is the highest number, not the count. On origin/main there are 28 numbered headings, one of which (12, Slack webhook health) only records that the work moved to /ship's final step — so 27 sections actually execute. Numbering runs 1–19 with sub-letters (11b, 12b–12e, 13b–13d, 18b, 18c), carries a duplicate 9 (migration security lint AND metadata template-id consistency), has no top-level 13 or 16, and the original 19 (vision price sync) was retired with the number reused. Quote "27 executable sections" or quote nothing — grep -cE '^# [0-9]+[a-z]?\. ' scripts/local-checks.sh returns 28.
#CheckWhat it blocks
1Secret scan — TruffleHogCommitted credentials
2Dependency audit — npm auditKnown-vulnerable deps
3Security anti-pattern scanCredential logging · n8n API from frontend · select('*') on sensitive tables
4Semgrep SAST — diff-scoped, .semgrep/mystflo-rules.yml8 custom rules: select-star · credential-logging · error-leakage · missing-rate-limit · frontend-n8n-access · XSS via dangerouslySetInnerHTML · Date.now() in a meter identifier · billing thresholds on add-ons
5TypeScript compiletsc -bAny TS error (zero-error policy, T374)
6Production buildMissing files tsc --noEmit can't see
7ESLintLint errors
8Migration apply dry-runA migration that won't apply
9Migration security lintRLS / SECURITY DEFINER / grant violations in SQL
9*Metadata template-id consistency (duplicate number)Missing/duplicate template_id across workflow metadata.json
10n8n workflow validatorMissing Extract Body · strict IF typeValidation · multi-output Code nodes · missing respondToWebhook
11Edge-function sprawl guardrailA new standalone EF with no EF-JUSTIFICATION: tag (100-EF Supabase cap)
11bDeno type check — changed EF files, baseline-awareType errors in touched edge functions
12bTrigger-gateway status gate (#2166)checkAssistantActive not imported on a trigger path
12cTrigger-gateway regression testThe gate imported but not actually enforcing
12dShared-engine card identity (#2302)Card-identity drift across shared-engine assistants
12eRate-limit endpoint registration (#2716)An endpoint missing from ENDPOINT_LIMITS
13bAssistant eval gate — On-Brand Support golden + voiceDeterministic prompt/answer regression (ONBRAND_EVAL_LIVE=0 in CI)
13cRequired-config contract testsServer-side activation gate regressions
13dFull Deno test sweep (#2259)EF mock-rot across all of supabase/functions/
14PRD spec + pricing zone integrityHand-edited auto-gen ## Spec blocks · price drift out of the DB
15Platform PRD acceptance contractA PRD missing machine-checkable AC rows
17Billing wiring guardrailA published paid template with no debitable price_per_run
18Documentation hygieneDoc-governance violations (escape: DOC_HYGIENE_ENFORCE=0)
18bDoc-sync manifestCode change with no matching doc update
18cPRD claims lint (#2201)Claims in a PRD not backed by code — always exits 0 today
19Vitest unit suite (#2375/#2399)vitest run --changed <base> only. WARNs instead of PASSing when nothing was exercised, so "no test files found" can't read as green
L1–L7 · Automated test layers

What runs without a human. Each card: what it covers · where it lives · the exact command · what it gates.

155 files · jsdom
.test.tsx ············ 82
.test.ts ············· 73
largest cluster:
components/brain ····· 41+
L1 · Unit
Vitest Gated
Data transformations, hook logic, utilities, config-diff, provider alias resolution, component conditional rendering. Not React Query cache, not visual layout.
LivesMostly src/**/__tests__/, but the suite is defined by the vitest glob, not the folder
Count155git ls-tree -r --name-only origin/main | grep -cE '^src/.*\.test\.(ts|tsx)$' (73 .ts + 82 .tsx), matching the config glob exactly
Configvite.config.tsinclude: ['src/**/*.test.{ts,tsx}'], jsdom, src/test-setup.ts
Runnpm test · npm run test:run · npm run test:coverage
Gateslocal-checks 19 — changed diff only; MF_CI_FULL_VITEST=1 forces full
Debt#2398 — 27 files fail on clean main, invisible to the changed-file gate
133 files · Deno runtime
brain-ops/actions/ ··· 16+
_shared/ ············· many
assistants · billing · webhooks
L2 · Edge functions
Deno tests Gated
Edge-function business logic in isolation — error classifier, error pipeline, schema validator, meter recording, brain-ops actions, webhook handlers.
Livessupabase/functions/**/*.test.ts
Count133git ls-tree -r --name-only origin/main | grep -cE '^supabase/functions/.*\.test\.ts$'
Rundeno test --allow-read --allow-env --no-check supabase/functions/
Gateslocal-checks 11b (type check, changed files) + 13d (full sweep)
Drifttesting-strategy.md still says coverage is _shared/ only and "All others: 0"
two-layer standard
harnessgolden · deterministicvoice
retrieval floor: cosine ≥ 0.4
L3 · Assistant eval
Eval suites Gated
Proves an assistant's prompt/answer behaviour against the live _shared/ prompt builder. Layer 1 deterministic + zero-cost (gates CI); layer 2 LLM-scored, opt-in, needs a model key. RAG retrieval quality is PROVE case B4.
Livestests/eval/assistants/on-brand-support.{harness,golden,voice}.ts + voice-judge-agreement.harness.ts
Gateslocal-checks 13b, forced ONBRAND_EVAL_LIVE=0 in CI
Specdocs/testing/testing-strategy.md §2.1
41 specs · chromium only
tests/e2e/*.spec.ts23
tests/e2e/assistants/18
unresolved (#2945)1
L4 · E2E
Playwright Not a gate
Full user journeys against the deployed app. Runs against production by default. Nothing in local-checks.sh runs Playwright, and GitHub Actions pr-checks.yml does not run E2E — so no E2E result blocks a merge today.
Livestests/e2e/ · auth tests/auth.setup.tstests/.auth/user.json
Count41git ls-tree -r --name-only origin/main | grep -cE '^tests/e2e/.*\.spec\.ts$' (23 root + 18 assistants)
Configplaywright.config.ts — baseURL https://platform.mystflo.com, one project (chromium, Desktop Chrome), CI retries 2
Rundoppler run -- npx playwright test
PLAYWRIGHT_BASE_URL=http://localhost:8080 doppler run -- npx playwright test
Stalebrain-brand-voice likely — #2945 · brain-v2-smoke deleted and brain-read-wallet-empty repointed by #2963 (merged 2026-07-30)
9 describe blocks
Pulse active tab4
Post-activation modal8
Billing4
L5 · Behavioural audit
Platform health Not a gate
Behavioural validation, not "page loads" — metrics correctness, state transitions, cross-page consistency, UI states per PRD. Nine areas: Explore, activation wizard, Pulse active/past, post-activation modal, billing, Brain, metrics consistency, lifecycle transitions.
Livestests/e2e/platform-health.spec.ts
Run./scripts/platform-health.sh (scorecard) · or the spec directly
OracleHeadless assertions only — no design-frame comparison
real EFs · prod DB · Stripe TEST
PROVEN-LIVE side effect confirmed
FAILED ····· assertion failed
CANT-RUN ··· missing precondition
L6 · Live proof
Prove harness Not a gate
Exercises real deployed Edge Functions against the prod DB and asserts real side effects — a DB row, a meter event, a webhook-driven status flip. Exists because MystFlo's costly mistakes were false assumptions only a live run disproved. Never triggers a real charge.
Livesscripts/prove/9 cases on origin/main: B4, B5, G1, G2, G3, M3, W2, W4, W5 (plus _brain-fixture, _wa-fixture, index.ts)
Rundoppler run --project mf-platform --config prd -- deno run -A scripts/prove/run.ts · --only=G2,W2 · --account=workprojects
Safetyworkprojects = sandbox, full teardown · peyton@mystflo.com = REAL, additive only
Drifttesting-strategy.md says "4 built"; 9 case files exist
4 gotcha classes
missing Extract Body
strict IF typeValidation
multi-output Code node
missing respondToWebhook
L7 · Workflows
n8n validation Gated
Static validation of checked-in n8n workflow JSON against the four bug classes that historically shipped broken workflows.
Livestests/e2e/assistants/validate-n8n-workflows.sh
Run./tests/e2e/assistants/validate-n8n-workflows.sh
Gateslocal-checks 10
Manual./n8n-templates/test-webhook-payload.sh <slug> test
R1–R4 · Real-browser & human-driven QA

The layer that walks the product like a founder. Every scenario reconciles three oracles: the design frame (docs/design/design-artifacts/*.html) as the visual oracle · the PRD acceptance criteria (AC-<AREA>-NN) as the behavioural oracle · the deployed app — real EFs, real DB, Stripe TEST, no mocks.

┌──────────────────────┐   authors   ┌────────────────────────┐  executes  ┌─────────────────┐
│ Platform QA Agent     │──plan──────►│ scenario / test plan    │───────────►│ MAIN session     │
│ Read·Grep·Glob·Bash  │             │ preconditions · steps   │  in Chrome │ Claude-in-Chrome│
│ no browser tools      │             │ expected frame · pass   │            │  against DEPLOYED│
└──────────┬───────────┘             └────────────────────────┘            └────────┬────────┘
           │ asserts DB side-effects                                                │ on FAIL
           │ (QA test accounts only)                                                ▼
           └───────────────────────────────────────────────► structured bug ──► /debug

The split is deliberate and binding: the QA Agent has no browser tools, so it authors and (post-run) asserts backend side effects; the MAIN session drives the clicks. An agent that claims it clicked the app is reporting something that did not happen.

★ 3 rounds complete · real businesses, real spend
R1 site+IGR2 IG-onlyR3 IG-only
wipe → intake → research → gate → read → vision → playbook
R1 · Seeded journey
Brain seeded journey Complete — fixes shipped & deployed
Three full Brain journeys on real businesses, against production, on the peytonworkprojects@gmail.com test account. Each round started from a wiped Brain and walked intake → research checklist → identity gate → paid read → Instagram vision → playbook. Headline: extraction fidelity was consistently high across all three (verbatim schedules, follower counts, glyph bullets, bilingual structure) — every defect found traces to the write/confirm/save layer AFTER extraction, not the AI reads themselves. 6 of the resulting defects are fixed and live in production (#2988, PR #2997) as of 2026-07-31; 2 remain open follow-ups (see each round report). Reports below link the full raw payloads.
Specdocs/testing/test-plan-brain-seeded-journey-2026-07.md
Pass bardocs/testing/test-plan-brand-extraction-2026-07.md §8.5 — brand extraction ground truth
Resetscripts/reset-brain-data.sh between rounds (dry-run by default, --execute to mutate, every DELETE user_id-scoped)
SourcesCaptures staged in the ops Supabase private mystflo-vault bucket, referenced as bare paths in research.raw_notes.image_paths — never signed URLs
raw payload first
1 ▸ website-research extraction (full)
2 ▸ per-image vision extraction (full)
─────────────────────────
3 ▸ then analysis + verdict
R1 · Report contract
Raw-data-first — binding on every round report
Each round's report must surface the RAW extraction payloads before any analysis — the full website-research extraction and the full per-image vision extraction, verbatim — so the analysis can be checked against its own source rather than taken on trust. A round report that leads with a verdict is not accepted. This is why the reports are their own artifacts rather than a summary paragraph on this hub.
WhyA brand read returning "warm, creative, spiritual" is a FAIL however pleasant it sounds; only the raw payload shows whether the sign-off, the bilingual structure, or the absent exclamation marks were actually seen (§8.5)
Round 1 of 3
7/7
event-schedule rows verified byte-for-byte
R1 · Website + Instagram
Female Founders Breakfast Complete
Site research + reputation read + Instagram. Ran against a contaminated crawl pool (reset-script bug, since fixed) — claim grading still holds, "clean baseline" framing does not. 10 defects incl. the cross-tenant scare that turned out to be the account's own stale test history.
Cost$30.42 → $27.31 (−$3.11)
Round 2 of 3
174/650/114
follower counts, exact match on re-read
R2 · Instagram-only (@uglywoobali)
Uglywoo Bali Complete
First genuinely clean-baseline round, post reset-script fix. Confirmed the 2.4 tiling threshold works correctly at 1.91 aspect. Found the "flapping" bug — later shown to be a missing UI gate, not a data problem.
Cost$27.31 → $27.01 (−$0.30)
Round 3 of 3
6/6
§8.5 hard-pass-bar markers, all PASS
R3 · Instagram-only (@ambrestudio)
Ambre Studio Complete
First round with a real founder name in source — clears the §8.5 pass bar cleanly, and [PERSON_NAME] did NOT reproduce here (Rounds 1's occurrence was pipeline-scoped). Settled the "My Business" root cause. Includes post-fix live verification of #2988's deploy.
Cost$27.01 → $25.80 (−$1.21)
Voice + FAQ generation
4 sits
FFB · Bali Offline · Clay Room · Ambre
Quality matrix · full FAQ dump + screenshots
Brain voice + FAQ generation Waiting
Peyton 2026-08-18 roster. FFB is Event host (not Club keeper). Makers / drop-makers / club-runner held off. Open this HTML later — every generated FAQ pair and every screenshot lives in the page. Unexecuted: no signed-in Chrome / wipe credentials in this environment.
Budget~$64 worst case
Round 6 · in progress
5 biz
110 scored turns planned, 0 run — activation blocked
R6 · On-Brand Support 5-business accuracy eval
5-business conversation accuracy Blocked
Proves TMPL-9P3X can be set up per business and answer real customer questions from that business's Brain at ≥95% accuracy — FFB (real) + 4 synthetic ICP businesses (retreat/workshop/maker/F&B host), ~22 scored turns each. Business #1 (FFB) Brain seeded and verified; activation is a confirmed dead end — Brain Check gates (Business hours, Contact details, Brand voice) each fail through a different bug and both "Try" and "Complete Setup" refuse to finish the wizard. 6 defects filed this round (#3145–#3151). No conversation has run yet; this card updates once a decision is made on how to unblock activation.
Plandocs/testing/test-plan-onbrand-5-business-accuracy-2026-08.md
Datadocs/testing/round-6-business-playbooks.md — all 5 businesses, 8-field playbooks, answer keys, accuracy/speed/voice rubric
Blocker#3151 — activation gate never clears (P0)
20 flows mapped · 4 walked
R2 · Click-through
Click-through plans Partial — 4 walked
Scripted real-browser founder walks, each step asserting against a named design frame. Ratified 2026-07-24 (#2688). Walked as QA: research engine · Pulse status lock (2026-08-13, PASS) · Connect-apps (2026-08-14, FAIL #3466) · Brain FAQ journey (2026-08-09, MIXED). Guest-blocked 2026-08-15 (no QA password in the cloud VM): activation, wallet, reactivation, Pulse monitoring, Launch Kit, LOOK — ledger rows exist; Peyton WP re-run still owed.
Ledgerdocs/testing/testing-artifacts/test-ledger.md — Plan · Report · Verdict · written Outcome. Cloud + Chrome (one click at a time) writes the row via qa-run-finish.sh. A run not in that file did not happen.
Livesdocs/testing/click-through/ — README (the standard) + coverage-matrix + per-flow plans
Top gapsActivation Try/preview never walked live · wallet top-up → real charge → balance reflect never walked · Pulse monitoring never checked against the pulse.html frame
live channel · real WABA
WhatsApp threadreal
Slack escalation3-tier
R3 · Channel
On-Brand Support live WhatsApp R7 MIXED
The chat-assistant journey runs in WhatsApp, not the web UI, so it has no browser walk by design. Round 7 (2026-08-13) ran the first real 6-turn FFB conversation — activation blocker gone, billing charged, price-verbatim failed. Ledger row + report are checked in.
Plandocs/testing/on-brand-support-live-whatsapp-test-plan.md
Reportdocs/testing/test-report-2699-onbrand-ffb-live-conversation.md
Accountpeyton@mystflo.com — the only account holding the real WABA
human checklists
UX/UI launch review
MVP FE↔BE integration
WhatsApp end-to-end
T336 regression baseline
R4 · Checklists
Manual test plans Reference
Human-run checklists in docs/testing/ with no automation behind them. Kept because they encode judgment a script can't, but none has a recorded pass/fail run in-repo — treat each as a checklist, not evidence.
Filesuxui-launch-review-checklist.md · mvp-frontend-backend-integration-testing.md · whatsapp-end-to-end-testing.md · T336-regression-baseline.md
P1–P2 · Periodic sweeps

What the per-merge diff can never see.

weekly · whole repo
rlscredsef-authssrfdeadcodedocsconfigbilling
P1 · Security + drift
/audit Live
The whole-repo twin of /ship's diff-scoped reviews — catches drift a per-merge review can never see (RLS on old tables, dead code, doc-vs-code drift, unattested EFs) and routes findings to closure instead of an issue graveyard. Reconciles open findings before filing anything new, auto-closes resolved, escalates anything still reproducing after 7 days to a Peyton-owned launch blocker.
Run/audit · /audit dry · /audit reconcile · /audit lens <name> · /audit fix <id>
OutputGitHub issues labelled audit, Slack #security-log via security-scan-relay
NeverFixes at scan time · auto-merges · closes an issue it did not create
does the reviewer work?
Mutation seeding5/5
Known-miss replaydone
Live samplingnot started
P2 · Meta-testing
Review pipeline eval Partial
Measures whether /quality-review and /security-review actually catch real bugs rather than assuming the design works. Mutation seeding hit 5/5 finder recall; known-miss replay found one live bug (stale main...HEAD diffing — same root cause as the #1418 near-miss) and one correct non-catch. Live sampling — the check on false-positive noise — has never run.
Resultsdocs/testing/review-pipeline-eval.md
Archdocs/architecture/agents/review-pipeline-architecture.md
15 runs · accuracy grading
crawl coverage
synthesis fidelity
gap quality
P2b · Pipeline accuracy
Brain research E2E Exemplar
Grades research-pipeline accuracy across runs on the QA sandbox, driven through the app's APIs with no browser. The only flow the coverage matrix marks as genuinely live-tested. Not the same document as the seeded journey above — that one drives the real UI for visual evidence; this one grades output quality. Don't conflate their outputs.
Plandocs/testing/brain-research-e2e-test-plan-2026-07.md
Ground truthdocs/testing/test-plan-brand-extraction-2026-07.md §8.5–8.6 (locked test set)
D · Test data, accounts & resets

Every reset script is dry-run by default and user_id-scoped. There is ONE Supabase — every run touches production.

AssetWhat it doesCommand
reset-test-account.shE2E baseline reset — user-id-scoped, restores seed connections. Run before an E2E suite so tests start predictable.scripts/reset-test-account.sh
reset-brain-data.shWipes ALL Brain data for one founder — profile, RAG chunks + embeddings, gate verdicts, source snapshots, personas, reputation reads, onboarding chats, uploaded Brain files. Preserves connected apps, WhatsApp customer data, activation state, offerings.scripts/reset-brain-data.sh --email <addr> then --execute
seed-brain-playbook-test-account.tsSeeds a populated Brain playbook onto workprojects via the real brain-profile EF path (no direct SQL, no AI content). Idempotent. Both test accounts otherwise start with an empty Brain (#2437).doppler run --project mf-platform --config prd -- deno run -A scripts/seed-brain-playbook-test-account.ts
peytonworkprojects@gmail.comSandbox account — non-WhatsApp assistants, general testing, full seed + teardown. The seeded-journey rounds run here.
peyton@mystflo.comREAL account — holds the real WABA, used only for WhatsApp cases. Prove harness is additive only here and refuses to delete a row it didn't create this run.
Doppler secretsTEST_USER_EMAIL / TEST_USER_PASSWORD; anon key is VITE_SUPABASE_PUBLISHABLE_KEY with SUPABASE_ANON_KEY as the server-side alias.doppler run --project mf-platform --config <env> --
The honest ledger — stale, unproven, absent

A hub that only lists what exists is a flattering hub. This is what is broken, unverified, or simply missing.

Stale or failing today

Verified against origin/main, not a local working tree — a tree 11 commits behind reported two already-fixed specs as still broken. #2963 (merged 2026-07-30) deleted brain-v2-smoke.spec.ts and repointed brain-read-wallet-empty.spec.ts's selectors from /Read it/i to /Research/i; both are off this list. One Brain spec remains.

WhatStateDetail
tests/e2e/brain-brand-voice.spec.ts Likely stale — not individually proven 3 tests asserting tone presets, gated capture, persona starter line. B5 restructured every voice surface (VoiceRegistersPanel, HowYouSoundSheet, the calibration game). Flagged as likely by inference from the same shape as the proven case, not confirmed. The one Brain spec still unresolved. #2945
Vitest suite on clean main 27 files failing No single root cause. The ship gate runs --changed only, so this debt is invisible per-PR and gating on the full suite would block every PR. #2398
Click-through scenarios 4 QA-walked · 6 guest-blocked 2026-08-15 Pulse status PASS (2026-08-13). Connect-apps FAIL #3466 (2026-08-14). FAQ journey MIXED (2026-08-09). Research engine is the exemplar. 2026-08-15 guest batch logged BLOCKED (no QA password) — activation Try/preview still never walked as Peyton WP. Index: test-ledger.md.
local-checks 18c — PRD claims lint Always exits 0 Registered as a check but cannot currently fail. It reports; it does not gate.
Review pipeline — live sampling Never started The one eval that would tell us whether findings are noisy enough to be ignored. Only meaningful on real post-merge PRs.
Absent entirely — no tooling in the repo
CategoryStatusWhy it matters here
AccessibilityNoneNo axe-core, jest-axe, pa11y, or Lighthouse anywhere in package.json, tests/, or scripts/. Contrast, focus order, and screen-reader labelling on a dark glassmorphic UI are entirely unverified.
Visual regressionNoneNo toHaveScreenshot / toMatchSnapshot, no Percy / Chromatic / Argos. Design parity is scored by a human or an agent eyeballing screenshots against a frame — nothing catches a silent pixel regression between reviews. Notable given MOCKUP-ARTIFACT-FIRST is binding.
Cross-browser / mobile viewportNoneplaywright.config.ts defines exactly one test project: chromium, Desktop Chrome. No WebKit, no Firefox, no mobile device project — while the layout-tier contract makes 375px the tier scored first.
Load / performanceNoneNo k6, artillery, or autocannon. Rate limits, EF cold starts, and pgvector query cost under concurrency are untested.
E2E as a merge gateNonePlaywright appears in no local-checks.sh section, and pr-checks.yml does not run E2E. Every E2E result is advisory. Merge stays on /ship drain.
Where docs/testing/ contradicts the code
Doc saysCode says
testing-strategy.md — "E2E, 32 specs"; dated April 202641 spec files (23 root + 18 assistants)
testing-strategy.md §3 test-structure listing includes tmpl-clfu01, tmpl-rvreq01Neither file exists. Missing from the listing: tmpl-cohb01, tmpl-wsbk01, and every brain-*, guest-preview, preview-banner, connects-deeplink, google-picker-migration, t383-data-source-picker, whatsapp-number-picker, waitlist-page, activation-flow spec
testing-strategy.md §2 — Deno coverage is _shared/; "All others: 0"133 Deno test files across brain-ops, assistants, brain-generate, webhooks, and more
testing-strategy.md §5 — "Full 11-check suite"; Semgrep "7 custom rules"27 executable sections; Semgrep has 8 rules. CLAUDE.md's "19 checks / 9 custom rules" is also wrong on both numbers
testing-strategy.md — prove harness "4 built, 12 planned"; G1/B4/B5/M3 listed ⬜ todo9 cases on origin/main: B4, B5, G1, G2, G3, M3, W2, W4, W5 (plus 2 fixtures + index.ts)
testing-strategy.md §5 — GitHub Actions pre-merge-checks.yml "runs on push to main"pre-merge-checks.yml is gone. Live workflow is advisory pr-checks.yml (five local-checks.sh --group jobs). Merge stays on /ship.
test-plan-brain-seeded-journey-2026-07.md pre-flight #1 — "a REAL account, not a QA test account"; #6 — "no wipe mechanism exists, orchestrator must supply one"Rounds run on the peytonworkprojects@gmail.com QA account, and scripts/reset-brain-data.sh is the wipe mechanism. The plan was authored before both were settled and its pre-flight table has not been updated. #2536 (user-facing Brain deletion) remains open — that is the product gap, not the ops one
· Repo HTML is the source of truth — this page republishes from docs/testing/testing-artifacts/testing-hq.html at the same URL, so the board always shows the latest state
· Counts taken off disk 2026-07-30 · every "absent" row was verified by searching for the tool, not assumed
· Written companion: docs/testing/testing-artifacts/README.md · canonical strategy doc: docs/testing/testing-strategy.md (carries the drift listed above)