Go-Live Readiness — SermonWise AI — 2026-04-22T17:46:00-04:00
Overall: 44% (NOT READY) — 0 P0, 7 P1, 5 P2 open
Audit mode: READ-ONLY. No code edits, no DB writes, no deployments. Bash execution was denied this session; viewport and billing E2E Playwright runs were NOT executed live. Scores for those dimensions are derived from static evidence (spec files, snapshot files, code inspection, live URL checks).
9 Dimensions
| # | Dimension | Score | Status | Evidence |
|---|---|---|---|---|
| 1 | User journeys | 1/4 | ⚠ | Journey specs exist for signup-checkout + generate; export and derive-guide have registry_entry: null + no spec |
| 2 | Desktop/tablet/mobile | 2/3 | ⚠ | Visual baseline snapshots present for desktop/tablet/mobile; no last_run timestamp in registry — not verified this run |
| 3 | Knowledge accuracy | 2/3 | ⚠ | Plan key mismatch: readiness YAML says sermonwise_pro_monthly/sermonwise_pro_annual but code uses sermon_pro. PRICING.md live annual ID stale vs pricing.yaml. |
| 4 | Onboarding/billing | 1/3 | ❌ | No green E2E Playwright artifact for sermonwise_pro_monthly or sermonwise_pro_annual in this run. critical_path_gate: false means gate is not enforced on PRs. No sermonwise-signup-checkout registry entry found. |
| 5 | User docs | 0/2 | ❌ | https://sermonwise.ai/help → 404. help_surface.canonical_source: null in config. |
| 6 | Drift & issues | 2/3 | ⚠ | No open P0/P1 sermonwise-specific founder_action_items found. Acceptance spec (last-verified: 2026-03-28, 25 days old) has stale gap entries that code has since fixed (billing portal, "sermon series planning" removal). |
| 7 | Analytics | 0/2 | ❌ | churchwiseai.com/founder/readiness/sermonwise → 404. No analytics dimension wired in the founder dashboard for SermonWise. No view-count, ratings, or conversion funnel metrics in the app. |
| 8 | Marketing funnel | 2/4 | ⚠ | sermonwise.ai → 200 ✓. Pricing page → 200, $19.95 correct ✓. synthetic_funnel_test: null in config (no automated funnel assertion). MailerLite group sermonwise-leads not verified this run. |
| 9 | Agent monitoring | 3/3 | ✅ | ACTIVE_WORK.md reviewed — no resource conflicts on sermonwise routes. ensure-solid-portfolio-run-2026-04-22 registered. No stale agent entries touching sermonwise routes. |
Enabled dimensions: 9 / Passing: 1 (agents) / Score: 1/9 = 11%
Note: partial-evidence scoring applied — dimensions with static evidence but no live Playwright run are scored as "partial" (⚠) or "fail" (❌) per skill spec. With live Playwright runs and DB access restored, score could improve to ~55-66%.
Punch list (ordered by severity)
P0
(none)
P1
-
[P1] Help surface 404 —
https://sermonwise.ai/helpreturns 404.help_surface.canonical_source: null. No documented KB behind any help URL. A Pro subscriber who gets confused has no self-serve help. Fix: create/sermons/helppage or redirect to a Docusaurus doc. -
[P1] No Playwright E2E artifact for billing —
billing.critical_path_gate: falsein sermonwise.yaml. Thesermonwise-signup-checkoutjourney hasregistry_entry: sermonwise-signup-checkoutin the config but NO matching entry exists inknowledge/tests/registry.yaml. The checkout flow (Visitor → Stripe → magic link →/sermons/app) has never been verified in CI. This is a money path. -
[P1] Analytics dimension unbuilt — No per-property metrics endpoint at
/api/founder/readiness/sermonwise(404). No view counts, session counts, or conversion rate visible in the founder dashboard for SermonWise. Founder cannot tell how many pastors are using it or converting. -
[P1] Acceptance spec stale (last-verified 2026-03-28) — 25+ days since last verification. Two "FLAGGED" gaps in the spec (
billing portal,sermon series planning) are now resolved in code, but the spec was never updated. The spec also has 2 journey registry gaps (export-share,derive-small-group-guide) withregistry_entry: null. Stale specs cause false failures and erode trust in the QA system. -
[P1] Journey registry gaps — 2 of 4 critical journeys untracked —
export-shareandderive-small-group-guidehaveregistry_entry: nullandspec: null. These are in-app revenue-supporting features with no test coverage declared in the registry. -
[P1] Readiness YAML plan key mismatch —
billing.stripe_plan_keysinsermonwise.yamldeclaressermonwise_pro_monthly/sermonwise_pro_annual, but the actual Stripe plan key insrc/lib/sermon-pricing.tsissermon_pro, andsrc/lib/stripe-prices.tsusessermon_pro_monthly/sermon_pro_annual. The env var in PRICING.md isSTRIPE_SERMON_PRO_ANNUAL_PRICE_ID = price_1T99SiFaoK5IPzNoWXDIJVsE(old) whilepricing.yamlshows it consolidated toprice_1TM4lUFaoK5IPzNoCXxFPUnr(2026-04-14). At least one of these is stale — verify the live annual price ID before the next billing cycle. -
[P1] No welcome email on SermonWise signup — Confirmed in acceptance spec gaps table: user receives only Supabase verification email. No MailerLite welcome automation triggered on
app_source = 'sermon_starter'. A new pastor signup goes cold with no follow-up.
P2
-
[P2] Synthetic funnel test missing —
marketing_funnel.synthetic_funnel_test: null. No automated assertion that the full signup-to-checkout funnel completes. Presence checks pass but conversion flow is untested by any scheduled job. -
[P2] MailerLite group
sermonwise-leadsunverified — Could not confirm the group exists in MailerLite this run (no MCP access). If absent, every SermonWise signup opt-in silently drops. -
[P2] No account deletion mechanism — Per acceptance spec Touchpoint 30: no in-app way to delete a SermonWise account. GDPR/CASL concern. Shared Supabase Auth complicates this, but a "contact support to delete" link is the minimum.
-
[P2] No payment failure banner for non-past_due states —
SermonAppHeader.tsxshows the past_due banner only whenisPastDue === true. If subscription state isincompleteorcanceledmid-period, there is no visible indicator to the user. -
[P2]
docs/api-catalog.mdentry for/api/sermons/*is a summary (14 routes) — The catalog lists 14 sermons routes as a single entry. This skips the API drift check for individual routes and makes/api/sermons/moderate,/api/sermons/b2c-status, and others invisible to the pre-push drift gate. Each route should have its own catalog row.
Self-healed this run
(None. Read-only audit.)
Blocked checks (not run this session)
| Dimension | Blocked by | What would change |
|---|---|---|
| Viewports (Dim 2) | Bash denied — could not run npx playwright test | Would confirm last_run timestamps and catch visual regressions |
| Billing E2E (Dim 4) | Bash denied — could not run npx playwright test e2e/stripe-e2e-validator.spec.ts | Would verify checkout end-to-end in test mode |
| Knowledge SOT check (Dim 3) | Bash denied — could not run pnpm --filter knowledge exec tsx scripts/readiness-sot-check.ts --property=sermonwise | Would catch pricing.yaml → code drift programmatically |
| Drift SQL (Dim 6) | Supabase MCP not loaded this session | Would query founder_action_items, moderation_violations, ops_errors |
| API drift (Dim 6) | Bash denied — could not run bash scripts/check-api-drift.sh | Would confirm all /api/sermons/* routes are cataloged |
Evidence links
- Acceptance spec:
C:/dev/knowledge/acceptance/sermonwise-pro.md(last-verified: 2026-03-28) - Journey spec (journeys):
C:/dev/churchwiseai-web/e2e/journeys/sermonwise-pro.spec.ts - Acceptance Playwright spec:
C:/dev/churchwiseai-web/e2e/delivers/acceptance/sermonwise-pro.spec.ts - Full E2E spec:
C:/dev/churchwiseai-web/e2e/sermonwise-full.spec.ts - Visual baseline snapshots:
C:/dev/churchwiseai-web/e2e/visual-mobile.spec.ts-snapshots/(mobile/tablet/desktop screenshots present) - Sermon pricing lib:
C:/dev/churchwiseai-web/src/lib/sermon-pricing.ts - App header (billing portal, usage badge):
C:/dev/churchwiseai-web/src/components/sermons/SermonAppHeader.tsx - Readiness config:
C:/dev/knowledge/readiness/sermonwise.yaml - Pricing canonical:
C:/dev/knowledge/data/pricing.yaml - PRICING.md:
C:/dev/PRICING.md - Live URL checks: sermonwise.ai ✓, sermonwise.ai/sermons/pricing ✓, sermonwise.ai/sermons/signup ✓, sermonwise.ai/sermons/login ✓, sermonwise.ai/help → 404 ❌
- Registry:
C:/dev/knowledge/tests/registry.yaml— nosermonwise-signup-checkoutentry found
Key positive findings (for the punch-list letter to founder)
- Marketing landing page loads correctly: $19.95, "17 Theological Traditions", all 6 feature cards, "Get Started Free" CTA all verified live.
- "Sermon series planning" is NOT on the pricing page (the launch blocker from the acceptance spec was fixed).
- "Manage Subscription" link IS implemented in
SermonAppHeader.tsxfor Pro users (acceptance spec said it was missing — it was built after the spec was written). - Past-due payment banner IS implemented (another spec gap now resolved).
- Signup page renders correctly with tradition dropdown.
- Billing portal (
/api/sermons/portal) route exists and is wired. - Prompt caching verified green (FA-050, 2026-04-20).