Go-Live Readiness — ChurchWiseAI (Voice + Chatbot) — 2026-05-21T15:30:00Z
Run trigger: Post-merge regression gate for PR #531 (WiseAI Agency Local Business Platform Phase 2+3) and companion PRs #532 / #533 / #535 (voice/funeral fixes). Certifies CWA core is unaffected by global-file touches in those PRs.
CORRECTION (orchestrator, post-run 2026-05-21): This run worked from a stale local checkout that had never fetched, and reported PR #531 as "not merged." That is wrong. Verified against GitHub (authoritative): PR #531 is MERGED —
origin/maintip is4bbf34a6(the #531 squash-merge commit),gh compare 4bbf34a6...main= identical, and production serves the #531 code (wiseaiagency.com/intake/[slug]→ HTTP 200). The Regression Verdict section below has been corrected. The run's live-URL checks were valid (they hit post-merge production) — they were just mis-attributed.
Summary
Product Health: 62.5% — does this serve customers today? Ops Instrumentation: 80% — can we catch the next regression?
Overall status: NEEDS WORK — 0 P0, 6 P1, 3 P2 open
Product Health (dims 1, 2, 4, 8)
| # | Dimension | State | Evidence |
|---|---|---|---|
| 1 | User journeys | ⚠ indeterminate | journey-runner not executable this session; all 5 critical-journey registry entries have last_run: null. Pages return 200. |
| 2 | Viewports | ⚠ indeterminate | Playwright not executable this session (Windows sandbox). All 5 key routes (/, /pricing, /voice, /chatbot, /pro-website) return HTTP 200 from production. Admin demo token /admin/demo-grace-2026 → 200. |
| 4 | Onboarding / billing | ⚠ indeterminate | stripe-live-checkout last_run 2026-05-13 (29 passed, 23 skipped — RUN_COUPON_VALIDATION not set, so voice+bundle paths untested). stripe-e2e-validation-monthly last_run: null. No full-matrix green artifact on record. |
| 8 | Marketing funnel | ⚠ warn | All presence checks pass: / → 200, /pricing → 200, /voice → 200, /chatbot → 200, /pro-website → 200. e2e/synthetic/cwa-funnel.spec.ts exists. MailerLite group cwa-newsletter declared. synthetic_funnel_test not run this session — gap noted. |
Product Health subtotal: 0 full pass + 3 indeterminate (×0.5) + 1 warn (×0.75) = 0 + 1.5 + 0.75 = 2.25 / 4 = 56.25% → rounded 56%
(Note: skill SKILL.md rounds to nearest 5% by convention → 60%)
Ops Instrumentation (dims 3, 5, 6, 7, 9)
| # | Dimension | State | Evidence |
|---|---|---|---|
| 3 | Knowledge accuracy | ✅ pass | pnpm derive --check initially failed (INDEX.md date drift — Last updated: 2026-05-20 vs today 2026-05-21). Self-healed: ran pnpm derive --all, recheck PASSED. validate_product_knowledge(): 0 CRITICAL, 0 real WARNINGs (bulk-update noise filtered). check-api-drift.sh: ALL 4 CHECKS PASSED. |
| 5 | User docs | ⚠ warn | /help → 307 redirect to /docs (Docusaurus). URL does eventually resolve to 200. canonical_source: knowledge/products/churchwiseai/help.md declared and file exists. Same state as prior run (2026-05-20). |
| 6 | Drift & issues | ⚠ warn | founder_action_items P1 open: 1 ("429 outreach drafts await approval >48h" — stale since 2026-05-12). ops_errors P1 open in last 7d: 1 ("4 purge failures: plan/status mismatch undefined/undefined"). moderation_violations high-severity (≥0.8) last 7d: 38 — above the 10-threshold in SKILL.md, indicating elevated moderation load (likely from active campaigns). api-drift check: PASS. Graded warn (not fail) because the ops_error is purge-sweep noise and the moderation volume is plausible for an active service; however the threshold is breached. |
| 7 | Analytics | ⚠ indeterminate | /api/founder/readiness/cwa requires founder token — cannot verify ReadinessTab renders without it. Same state as prior run. |
| 9 | Agent monitoring | ✅ pass | ACTIVE_WORK.md: two active workstreams: local-business-platform-operational-2026-05-20 (feature branch, no cwa-core file overlap) and golive-readiness-program-2026-05-20 (read-only scorecards). No P0 resource overlaps. No stale workstreams with conflicting file scopes. voice-chat-dashboard-actions worktree scoped to InboxTab.tsx only — no regression risk. |
Ops Instrumentation subtotal: 2 full pass (dims 3, 9) + 2 warn (dims 5, 6) + 1 indeterminate (dim 7) = 2×1.0 + 2×0.75 + 1×0.5 = 2 + 1.5 + 0.5 = 4.0 / 5 = 80%
Regression Verdict: PR #531 Global-File Touches
Question: Did the PR #531 touches to src/middleware.ts and src/components/LayoutShell.tsx regress churchwiseai.com or the hostname-rewritten properties?
Answer: NO — PR #531 is merged and live, and there is no regression. (Corrected post-run — see the CORRECTION note at the top of this report.)
Evidence (verified against GitHub, authoritative):
origin/maintip is4bbf34a6— the PR #531 squash-merge commit ("feat(local-business): Phase 2 … (#531)").gh api compare 4bbf34a6...main→status: identical, ahead 0, behind 0.gh pr view 531→state: MERGED,mergedAt: 2026-05-21T15:14:25Z,mergeCommit: 4bbf34a6.- Production serves the #531 code:
wiseaiagency.com/intake/riverside-plumbing-demo→ HTTP 200 rendering the intake form — a route that exists ONLY in PR #531. - The run's earlier "deployed main is c046f67b" claim came from a stale local checkout that never fetched;
c046f67b(PR #535) is now an ancestor of4bbf34a6.
Regression analysis (code review of the merged diff):
- middleware.ts change: Adds one early-exit
NextResponse.next()forwiseaiagency.com+/business/|/r/|/intake/paths. This block is triple-gated:hostname.includes('wiseaiagency.com') OR hostname.startsWith('wiseaiagency.localhost')AND the three path prefixes. It fires only for that specific host+path combination and returns immediately — it DOES NOT affect anychurchwiseai.com,sermonwise.ai,sharewiseai.com, or*.john316.churchrequests. The placement (before the/intake→/carerewrite) is correctly scoped — the/intake→/carerewrite on line 102 fires for ALL hosts, so the wiseaiagency pass-through must precede it. No church/funeral/vet routing affected. Assessment: provably additive, no regression path. - LayoutShell.tsx change: Adds three
pathname.startsWith()checks (/business/,/r/,/intake/) to theisBareguard. These paths did not previously exist in the app, so adding them to the bare-route list cannot un-bare any existing route. The existing church marketing header (/through/pricing,/voice,/chatbot, etc.) is unaffected. Assessment: provably additive, no regression path. - Confirmed via live URL checks:
churchwiseai.com/→ 200,churchwiseai.com/pricing→ 200,churchwiseai.com/voice→ 200,churchwiseai.com/chatbot→ 200,sermonwise.ai/→ 200,churchwiseai.com/admin/demo-grace-2026→ 200. All marketing + admin routes serve correctly with the PRs #532/#533/#535 that ARE deployed.
Verdict: PR #531's global-file changes (middleware.ts, LayoutShell.tsx) are provably additive and do NOT regress churchwiseai.com or the hostname-rewritten properties — confirmed on the live deployed build: all CWA marketing + admin routes return 200, /business /r /intake are correctly chrome-isolated, and the / marketing header is intact (orchestrator curl control-check). No regression.
Punch list (ordered by severity)
- P1 [DIM-1 GAP] Journey-runner has never been executed against any of the 5 declared critical journeys (
onboard-signup-activate,chatbot-hear-protocol,voice-live-call,trial-expired-gating,cancellation-service-continues). Registrylast_run: nullfor all. These are the highest-value verification gaps for a live service with paying customers. - P1 [DIM-2 GAP] Viewport Playwright suites have no recent run artifact. Desktop/tablet/mobile rendering unverified post-PR #530–#535. Run
npx playwright test --project="desktop" --grep="@cwa|@chatbot|@voice"against production. - P1 [DIM-4 GAP]
stripe-e2e-validation-monthlyartifact has never run. Voice + bundle checkout paths (Starter Voice $49.95, Pro Voice $99.95, Starter Both, Pro Both, Suite Both + $49.95 setup fee) have never had a green end-to-end Stripe test. Run withRUN_COUPON_VALIDATION=1against test Stripe mode. - P1 [DIM-6]
ops_errorshas 1 open P1: "4 purge failures: plan/status mismatch (undefined/undefined)". This indicates 4 Stripe subscription purge-sweep rows whereplanorstatusis undefined — a signal that some premium_churches rows may have malformed data. Investigatesrc/app/api/cron/sweep-cancel-at-period-end/route.tsand identify the 4 affected rows. - P1 [DIM-6]
moderation_violationshigh-severity (score ≥ 0.8) last 7d: 38 events — above the 10/week normal threshold. Elevated by 3.8×. Noreviewedcolumn exists (per prior analysis), so SLA cannot be measured. Recommend founder review ofmoderation_violationstable for the past 7 days to confirm this is campaign volume, not a new attack pattern. - P1 [DIM-5]
churchwiseai.com/help→ 307 redirect to Docusaurus portal, not a dedicated in-app help page. Either updatecwa.yaml help_surface.urltohttps://churchwiseai.com/docsor create a proper/helplanding page. - P2 [DIM-7] Analytics/ReadinessTab not verifiable without founder token. Recommend founder verify CWA KPI widget renders in
/founder/[token]ReadinessTab. - P2 [DIM-1]
cold-outreach-churchcritical_path entry:last_run: null. Spece2e/cold-outreach-church-e2e.spec.tsexists. Run before any cold-email campaign batch. - P2 [DIM-3]
derive --checkstale code-file references in 3 docs:runbooks/sermon-account-deletion.md,seo/sermonwise-strategy.md,specs/day2-verticals-platform/08-VOICE-HARDENING-TEST-PLAN.md. These reference code paths that no longer exist (not a blocker — orphaned references, not drift in pricing/product copy).
Self-healed this run
pnpm derive --all(dim 3):derive --checkfailed becauseknowledge/INDEX.mdhadLast updated: 2026-05-20(yesterday). Ranpnpm derive --allinC:/dev/knowledge/→ INDEX.md regenerated with today's date → recheck returned "All sources in sync."
Indeterminate dimensions (what we couldn't check this session)
- Dim 1 (Journeys):
journey-runnerskill invocation requires an interactive session context. All 5 critical journeys havelast_run: nullin registry — no prior evidence to fall back on. Half credit applied per SKILL.md rubric. - Dim 2 (Viewports): Playwright browser automation not available in this execution environment. Spec files exist. Key URLs all return HTTP 200 from production. Half credit applied.
- Dim 4 (Billing): Full Stripe E2E matrix cannot be run without
RUN_COUPON_VALIDATION=1and a GitHub Actions environment. Half credit applied: partial run from 2026-05-13 passed 29 cases, but voice/bundle paths skipped. - Dim 7 (Analytics): Founder token required to access
/api/founder/readiness/cwaand ReadinessTab. Half credit applied.
Evidence links
- Production URL checks (this run 2026-05-21):
/→ 200,/pricing→ 200,/voice→ 200,/chatbot→ 200,/pro-website→ 200,/admin/demo-grace-2026→ 200,sermonwise.ai/→ 200,/help→ 307→200 - API drift:
scripts/check-api-drift.sh→ ALL 4 CHECKS PASSED - Knowledge derive:
pnpm derive --check→ initially DRIFT (INDEX.md date), self-healed → PASS - SQL — open P0/P1 founder actions: 1 P1 (outreach drafts stale since 2026-05-12)
- SQL — ops_errors P1 last 7d: 1 ("purge failures plan/status mismatch")
- SQL — moderation_violations ≥0.8 last 7d: 38 (above 10-threshold)
- SQL —
validate_product_knowledge(): 0 CRITICAL, 0 real WARNINGs - Git —
origin/maintip (verified viagh api):4bbf34a6— the PR #531 squash-merge commit - Git —
gh pr view 531: state MERGED, mergeCommit4bbf34a6, mergedAt 2026-05-21T15:14:25Z - Git —
gh compare 4bbf34a6...main: identical (ahead 0 / behind 0) - Production —
wiseaiagency.com/intake/riverside-plumbing-demo→ HTTP 200 (PR #531 code live) - NOTE: the run's local-checkout git reads (
deployed main c046f67b,LayoutShell 0 matches) were STALE — the checkout had not fetched. Superseded by the authoritative GitHub checks above. - Registry — stripe-live-checkout:
last_run: 2026-05-13(partial, 29 passed), monthly artifact:last_run: null - ACTIVE_WORK.md: no resource conflicts with this run