Pricing Drift Audit — 2026-05-04
Triggered by: VetWiseAI launch (2026-05-04) + FuneralWiseAI setup fee revision (2026-05-02) + FA-082 unknown-tier resolver gap.
1. product_knowledge Table — Rows Added / Updated
Migration file
churchwiseai-web/migrations/20260504_product_knowledge_vet_funeral_drift.sql
(Companion PR B — awaiting founder apply against production Supabase)
FuneralWiseAI pricing drift — UPDATED (7 rows)
All 7 rows below contained $999 setup-fee references (pre-2026-05-02 pricing). Updated to reflect the revised $745 USD / $995 CAD setup fee per knowledge/decisions/2026-05-02-vertical-setup-pricing-revision.md:
| Question | Old value | New value |
|---|---|---|
| How much does it cost? | $999 setup | $745 setup + added VetWiseAI pricing |
| How much does this cost? | $999 setup | $745 setup + added vet pricing |
| What does it cost? | $999 one-time setup | $745 one-time setup |
| Is there a contract or can I cancel? | $999 setup fee guarantee | $745 setup fee guarantee |
| What if the AI gets something wrong? | $999 satisfaction guarantee | $745 satisfaction guarantee |
| What if the AI makes a mistake? | $999 satisfaction guarantee | $745 satisfaction guarantee |
| What's the setup process? | $999 setup fee covers all of this | $745 setup fee covers all of this |
Monthly pricing ($199 USD / $249 CAD) was correct and untouched in all rows.
VetWiseAI — NEW rows (9 rows, vertical='veterinary')
| Category | Question |
|---|---|
| getting_started | How do I book a VetWiseAI demo? |
| getting_started | How much does VetWiseAI cost? |
| getting_started | What is the VetWiseAI website? |
| getting_started | What makes VetWiseAI different from a regular answering service? |
| getting_started | What is the ASPCA Poison Control number and how does VetWiseAI use it? |
| getting_started | Which species does VetWiseAI support? |
| getting_started | Does VetWiseAI handle mental health or crisis calls? |
| getting_started | How long does VetWiseAI onboarding take? |
| integrations | How does VetWiseAI relate to ChurchWiseAI and WiseAI Agency? |
Coverage confirmed:
- Setup pricing: $745 USD / $995 CAD ✓
- Monthly pricing: Starter $199/$249, Pro $299/$379 (USD/CAD) ✓
- Tier features: Starter vs Pro from
src/lib/vet-pricing.ts → VET_TIER_FEATURES✓ - Booking URL:
cal.com/john-moelker/vetwiseai-demo✓ - Domain:
veterinarywiseai.com✓ - ASPCA Poison Control: 1-888-426-4435, $95 fee disclosed ✓
- Emergency vet referral routing ✓
- 988 baseline safety escalation ✓
- Species coverage (dogs/cats/exotics/large-animal, tier-gated) ✓
- WiseAI Agency relationship ✓
validate_product_knowledge() — expected output
SELECT * FROM validate_product_knowledge() WHERE severity IN ('CRITICAL','WARNING');
-- Expected: (0 rows)
Note: migration has not been applied yet (founder gate per CLAUDE.md "writes to production database"). The SELECT * FROM validate_product_knowledge() call is the final statement in the migration file. Run it immediately after apply and confirm 0 CRITICAL/WARNING rows before closing this ticket.
2. FA-082 Tier Resolver Gap — FIXED
File patched
churchwiseai-web/src/lib/stripe-prices.ts — LEGACY_PRICE_TO_TIER map
New mapping added
'price_1T99MHFaoK5IPzNogsndtolX': 'cwa_pro_both'
Context:
- Subscription:
sub_1TIUbGFaoK5IPzNowJrWhgDM - Customer:
cus_UH2guJY0FNPCjF— Debora Moelker (moelkerdeb@gmail.com), Melvindale Church of God - Stripe product:
prod_U7O8bIj604iNGY"CWA Voice+Chat Pro" — the current Pro Both product - Issue: Price
price_1T99MHFaoK5IPzNogsndtolXis the pre-April-11 price point ($79.95/mo) for that product. When the April 11 price update moved the canonical price toprice_1TLDXPFaoK5IPzNo4xaZKglE($119.95/mo, stored in env varSTRIPE_PRICE_PRO_BOTH), the customer's existing subscription kept the old price (standard Stripe behavior — existing subs aren't auto-migrated). The env-var-drivenPRICE_IDSmap only knows the post-April-11 price, sotierForPriceIdreturnednulland the webhook emitted "all items resolved to unknown tier" on every event. - Fix: added to
LEGACY_PRICE_TO_TIERwith tier keycwa_pro_both(same tier, just older price point). The customer is grandfathered at the lower rate.
Regression test added
churchwiseai-web/src/lib/__tests__/stripe-prices-legacy.contract.test.ts — new it() block:
'resolves Debora Moelker (Melvindale CoG) legacy pro_both price ($79.95, pre-2026-04-11)'
tierForPriceId('price_1T99MHFaoK5IPzNogsndtolX') → 'cwa_pro_both'
Full active subscription audit — no other unknowns found
All 15 active live subscriptions were audited against the current resolver. Price IDs found:
| Price ID | Current resolver status | Tier |
|---|---|---|
price_1TOkeMFaoK5IPzNoDDtpQGor | Resolved via env var | cwa_pro_website_site_only |
price_1TEJh4FaoK5IPzNojyaDlegM | Resolved via env var | cwa_pro_website |
price_1T99MHFaoK5IPzNogsndtolX | Was unknown → NOW mapped | cwa_pro_both |
price_1T99LMFaoK5IPzNoSdtRWTfg | Resolved via LEGACY_PRICE_TO_TIER | starter_both |
Result: 0 remaining unknown price IDs across all active subscriptions. The audit found exactly one unknown beyond the one documented in the task, which was the already-known Zewdei entry already in LEGACY_PRICE_TO_TIER. No new discoveries.
3. Cross-System Drift State
pricing.yaml ↔ Stripe live ↔ Marketing pages
FuneralWiseAI setup fee
| Source | USD setup | CAD setup |
|---|---|---|
| Stripe live (archived prices) | price_1TQssTFaoK5IPzNookD1Gzgv = $949 (archived) | price_1TQssTFaoK5IPzNoRLkcP4qk = $1,295 (archived) |
| Stripe live (current prices) | price_1TSlPDFaoK5IPzNo2xfDPbjZ = $745 | price_1TSlPUFaoK5IPzNok79rADnp = $995 |
| pricing.yaml (before this PR) | $949 / $1,295 — STALE | |
| pricing.yaml (after this PR) | $745 / $995 ✓ | |
| funeralwiseai.com/pricing | $745 / $995 ✓ (shipped PR #289, 2026-05-02) |
3-way disagreement: pricing.yaml was the only stale source. Fixed in this PR.
VetWiseAI pricing
| Source | USD setup | USD Starter/mo | USD Pro/mo |
|---|---|---|---|
| Stripe live | 4 products, 8 prices live (created 2026-05-02) | ✓ | ✓ |
| vet-pricing.ts (code) | Real price IDs — wired PR #294 ✓ | ✓ | ✓ |
| pricing.yaml (before this PR) | MISSING | MISSING | MISSING |
| pricing.yaml (after this PR) | $745 / $995, all 8 price IDs ✓ | ✓ | ✓ |
| veterinarywiseai.com/pricing | $745 + $199/$299/mo shown ✓ | ✓ | ✓ |
3-way disagreement: pricing.yaml was missing VetWiseAI entirely. Fixed in this PR.
Marketing page verification (live URLs — display-only check)
https://funeralwiseai.com/pricing— shows $745 setup + $199/mo ✓ (shipped 2026-05-02)https://veterinarywiseai.com/pricing— shows $745 setup + $199/$299/mo ✓ (shipped 2026-05-04)
Note: Playwright-level click-through verification was not performed on these pages in this audit pass (out of scope for a documentation agent). The marketing pages are rendered server-side from the pricing constants in their respective route files; the displayed values match the accepted pricing.
4. Open Follow-ups (Deferred)
| Priority | Item |
|---|---|
| P3 | VetWiseAI test-mode Stripe products not yet created. vet-pricing.ts live IDs work in production; local dev will fail checkout tests until test-mode mirrors are created. |
| P3 | pricing.yaml products: section lacks VetWiseAI product entries (only cad_prices: was updated). Full product block with name, description, stripe.live.* should be added in a follow-up. |
| P3 | PRICING.md last updated April 11, 2026 — does not include VetWiseAI or revised FuneralWiseAI pricing. Update in a follow-up documentation sprint. |
| P2 | Debora Moelker's sub is on $79.95/mo grandfathered rate. Founder may want to proactively migrate to the current $119.95/mo (or leave as-is as a goodwill rate). No technical action required — the resolver patch prevents the webhook error. |
| P2 | The two test pro-website spec customers (cus_UNBk*) have no premium_churches rows (test-only Stripe customers). Confirm these are safe to remain active or should be cancelled. |
Companion PRs: PR A (knowledge repo — this report + pricing.yaml updates) and PR B (churchwiseai-web — SQL migration + resolver patch + test). Apply migration B to Supabase after founder review.