Phase 7 — ENABLE_MULTI_ITEM_ADDS=monthly flipped to production
Decision
Flip ENABLE_MULTI_ITEM_ADDS from demo_only to monthly in Vercel production on 2026-05-12. Monthly-interval customers can now self-serve add, remove, and resume individual products (Chat / Voice / Pro Website) directly from the admin Subscription tab without emailing the founder.
Context
FA-082 is the multi-item self-serve subscription management epic. Phase 7 is the production flip. Prior phases built the routes, UI components, and Playwright spec; Phase 7 gates on all open issues being resolved.
The following FAs and PRs were prerequisites:
| Item | What it fixed |
|---|---|
| FA-082 | Core add/remove/resume flow (SubscriptionTab, AddProductCard, RemoveProductCard, ResumeProductButton, confirmation modals, cancellation survey) |
| FA-087 | Subscription items row normalization — multi-item flags were missing from premium_churches rows for existing customers |
| FA-102 | cancel_at_period_end flag propagation — cancellation flag was not persisting correctly after webhook processing |
| FA-105 | Entitlement guard — add-product route was not correctly checking whether the customer already had the product before adding |
| PR #440 | Entitlement guard fix (FA-105) |
| PR #441 | Preview setup-fee fix — preview modal was showing incorrect setup fee for Voice adds |
| PR #442 | Flag-interval fix — monthly/annual interval check for the ANNUAL_MIXING_NOT_SUPPORTED gate |
| PR #443 | Cancel-flag fixups — edge cases in cancel_at_period_end propagation |
All four PRs merged and deployed to production on 2026-05-12. End-to-end flow verified against the Melvindale CoG internal test account (100% coupon, zero real charges, safe for billing/Stripe/webhook E2E testing).
What Phase 7 means for customers
- Monthly-interval customers: Can self-serve add any inactive product (Chat, Voice, Pro Website) via the "Add a service" section of the admin Subscription tab. Can self-serve remove any active product (cancel at period end). Can resume a cancelled product before the cron sweep runs.
- Annual-interval customers: See the "Add a service" section HIDDEN, replaced by "email john@churchwiseai.com — usually same-day." They CAN cancel individual products (billing works correctly); they cannot self-serve add (ANNUAL_MIXING_NOT_SUPPORTED rate).
- Last-remaining-product cancel: Returns 409 LAST_REMAINING_PRODUCT — modal redirects to the full-account cancel flow.
What is deferred to Phase 8+
- Auto-recovery of post-sweep Resume (where the cron already dropped the Stripe item — Phase 7 returns 410; Phase 8 will re-add the item automatically)
- Annual → monthly self-serve migration with credit roll-over (currently founder-handled via email)
Registry
Critical-path registry updated: multi-item-self-serve and multi-item-stripe entries added to knowledge/tests/registry.yaml with critical_path: true (BILLING tier). Acceptance spec updated: knowledge/acceptance/multi-item-self-serve.md status changed from "not yet implemented (Phase 6)" to "SHIPPED — Phase 7 live 2026-05-12".
Acceptance spec
knowledge/acceptance/multi-item-self-serve.md — this decision supersedes the "Phase 7 pending soak" status. The spec is now the IMPLEMENTED source of truth.