Skip to main content

Portfolio Readiness Summary — 2026-04-22

One-screen roll-up of all 6 property scorecards + knowledge-layer freshness audit. Every number here is verifiable against the linked per-property scorecard in knowledge/readiness/reports/.

Scores at a glance

PropertyScoreStatusP0P1P2Scorecard
cwa33%NOT READY073cwa-20260422-2152.md
pewsearch33%NOT READY074pewsearch-20260422-1746.md
itw56%NOT READY054itw-20260422-2154.md
sermonwise11%NOT READY075sermonwise-20260422-1746.md
sharewiseN/ACOMING SOON321sharewise-20260422-1745.md
pro-website67%NOT READY053pro-website-20260422-1145.md

Portfolio totals: 0 production P0s, 31 P1s, 19 P2s across 5 live properties + 1 coming-soon.

Pro Website is +1pt vs the 2026-04-18 scorecard (66% → 67%). No regressions; one small improvement.


Methodology caveats — read before acting

Scores are conservatively low this run. Most subagents could not execute:

  1. Playwright viewport runs — Bash execution denied in subagent sessions. Dimension 2 scored WARN (spec-file presence only) rather than PASS.
  2. Supabase MCP queries — requires browser-based OAuth that wasn't available headlessly. Dimension 6 (drift) and parts of D3 (knowledge) couldn't run the actual SQL.
  3. moderation_violations.reviewed column does not exist — the skill's dimension 6 query (defined in C:/dev/.claude/skills/ensure-solid/SKILL.md) is broken across ALL properties. This is a skill-level bug, not a property issue. Fix: query moderation_events or add a reviewed column to moderation_violations.

Implication: true scores are likely in the 55-70% band once a session with Bash + MCP can run the checks. The relative ranking across properties is still meaningful — pro-website genuinely leads, sermonwise genuinely trails.


Cross-property patterns

Pattern 1: Registry has 87% last_run: null coverage

From the freshness audit: 26 of 30 registry entries have never been recorded as run. Two have last_break newer than last_run. This means:

  • The critical-path gate CI workflow works in theory but has no baseline to compare against
  • Every subagent scored dimension 1 conservatively because "no green run on record" reads the same as "broken"

Highest-leverage single action: run the existing Playwright specs once against production and let the skill stamp last_run fields. One 30-min session, lifts multiple P1s.

Pattern 2: Critical-path gate is silently bypassed

The freshness audit found that stripe-live-checkout and stripe-e2e-validation-monthly both declare code_files that don't exist in the repo (src/app/checkout/, src/lib/stripe/). The .github/workflows/critical-path-gate.yml workflow matches PR file-changes against these paths — since nothing matches, the gate never triggers. The CI gate meant to prevent another Hope Community billing failure is currently inert.

Urgency: HIGH — this is armed, looks green, but isn't actually guarding anything.

Pattern 3: cwa-pro-website.md acceptance spec still DRAFT

Pro Website is live with paying customers and 3 critical-path registry entries (cwa-pro-website-onboard, cwa-pro-website-render-ssr, cwa-pro-website-admin-edit). All 3 point to an acceptance spec that explicitly says "pending founder interview — DRAFT." Per CLAUDE.md rule #17, this is a hard gate. 30-45 min founder interview unblocks the full Pro Website readiness column.

Pattern 4: Marketing funnel wiring has drift

  • CWA: cwa.yaml says MailerLite group cwa-leads, code uses cwa-newsletter. New leads may be dropping into the wrong segment.
  • ITW: similar — direct API key deprecated in favor of CWA proxy, but itw.yaml still references legacy config.
  • Sermonwise: no welcome email automation at all after signup.

Pattern 5: Stripe price ID drift in docs vs canonical source

  • SermonWise: PRICING.md annual price ID is stale vs pricing.yaml (consolidated 2026-04-14). If Vercel ENV pulls from the stale file, annual charges go to the wrong price.
  • CWA: cwa.yaml voice_suite_monthly / bundle_suite_monthly don't match stripe-prices.ts.

Root cause: pricing.yaml is canonical but PRICING.md + readiness YAMLs have diverged.

Pattern 6: Per-property acceptance specs go stale in waves

Freshness audit: 8 acceptance specs will cross the 30-day staleness line between April 26-29. They all anchor on the 2026-03-27 through 2026-04-01 interview series. A single follow-up interview round can refresh most of them at once.


Top 10 punch list (portfolio-ordered)

Prioritized by blast radius × effort, not chronological FA-number.

  1. Fix stripe-live-checkout code_files paths — unlocks the actual critical-path gate. 5 min edit to registry.yaml. Highest leverage item on the board. (Freshness audit, finding #4)
  2. Run existing Playwright specs once and stamp last_run — closes ~6 "never run green" P1s across all 4 live products. Single ~30 min session. (Freshness audit Pattern 1)
  3. Complete cwa-pro-website.md founder interview — unblocks 3 Pro Website critical-path gates. 30-45 min. (FA-054 / pro-website P1)
  4. Fix FA-046 Pro Website auth hole — cancelled customers still have dashboard access. Tombstone view at admin/[token]/page.tsx. One PR, low risk. (pro-website P1)
  5. Re-sync product_knowledge from products.yaml + policies.yaml — chatbot + voice agent read stale product data at runtime. Run pnpm derive in a session that has Supabase MCP auth. (FA-064-cwa)
  6. Reconcile MailerLite group names — CWA + ITW both have drift between .yaml config and live code. (FA-066)
  7. Fix skill's dimension-6 SQL: moderation_violations.reviewed doesn't exist — edit C:/dev/.claude/skills/ensure-solid/SKILL.md to query the correct table/column. Unblocks dim 6 scoring across every property. (New finding, cross-cutting) — NOTE: remediation session attempted this but Edit was blocked on .claude/skills/ path; awaiting founder permission.
  8. Add 3 missing registry entries: itw-signup, sermonwise-signup-checkout, sermonwise-generate. ✅ DONE 2026-04-22 — all 3 added to knowledge/tests/registry.yaml. (Freshness audit, finding #5)
  9. SermonWise help page 404sermonwise.ai/help returns 404 while the product is live at $19.95/mo. Create a help surface with a canonical KB pointer. (FA-076-sermonwise — renumbered from FA-060)
  10. Post-mortem: refresh pewsearch-premium.md touchpoints 3, 4, 13 — still describe pre-decouple Pro Website claim flow. Stale since 2026-04-18. (pewsearch P1-07)

Housekeeping: duplicate FA numbering

The parallel subagents each appended to FOUNDER_ACTIONS.md concurrently, so the following numbers were used by TWO different action items:

  • FA-060 — (sermonwise help 404) AND (pewsearch critical-path run) → ✅ SermonWise item renumbered FA-076
  • FA-062 — (cwa chatbot never run) AND (sermonwise no welcome email) → ✅ SermonWise item renumbered FA-077
  • FA-063 — (cwa cancelled/trial-expired journeys) AND (sermonwise acceptance spec stale) → ✅ SermonWise item renumbered FA-078
  • FA-064 — (cwa product_knowledge drift) AND (sermonwise annual price ID) → ✅ SermonWise item renumbered FA-079

Resolved 2026-04-22 by remediation session 1. Redirect stubs left at the old positions in FOUNDER_ACTIONS.md pointing to the new numbers.

Fix: add a allocate_fa_number() helper to the skill that reserves a block up front and hands out numbers to subagents, so concurrent runs don't collide.


Coming soon: ShareWiseAI

Full scorecard: sharewise-20260422-1745.md

Go-live blockers (declared, not newly discovered):

  • P0 oauth-integrations — 762-line social-oauth.ts written; platform developer apps not registered; env vars missing in Vercel
  • P0 stripe-live-products — Live-mode Stripe products not created
  • P0 publisher-service — Scheduling/publish queue untested E2E against live platforms
  • P1 pilot-customers — Zero alpha customers
  • P1 acceptance specs — 0 specs in knowledge/acceptance/; both critical journeys have registry_entry: null
  • P2 FA-021social-smoke.spec.ts excluded from CI (pre-existing)

Not urgent — coming-soon status is honest here.


Freshness audit highlights

Full report: freshness-audit-20260422-1751.md

  • Registry (30 entries): 26 stale (last_run: null), 2 with open breaks, 5 with dangling code_files pointers
  • Acceptance specs (17 files): 0 stale today, but 8 cross the 30-day line by April 29 (refresh window)
  • Journey docs (3 files): 13 journeys declared in readiness YAMLs have NO .md in knowledge/journeys/ — major documentation gap

Recommended refresh targets (in order):

  1. cwa-pro-website.md (DRAFT) — highest single-doc leverage
  2. stripe-live-checkout code_files paths — fix makes the billing gate actually trigger
  3. pewsearch-pro-website.md — 25 days old, pre-decouple
  4. Run stripe-live-checkout spec and record green — closes a known billing P0 vulnerability
  5. Add the 3 missing registry entries (ITW + SermonWise)

Freshness auditor estimates: 8 specific fixes clear ~80% of downstream /ensure-solid P1 failures.


Session 1 — 30 min, CI unblock:

  • Fix stripe-live-checkout code_files paths (item #1)
  • Fix skill's moderation_violations.reviewed query (item #7)
  • Add 3 missing registry entries (item #8)
  • Renumber duplicate FA items

Session 2 — 1-2 hrs, run the tests:

  • Run existing Playwright specs against production, stamp last_run (item #2)
  • Re-sync product_knowledge (item #5)

Session 3 — 45 min, founder-gated:

  • Complete cwa-pro-website.md founder interview (item #3)

Session 4 — 1 hr, bug fixes:

  • FA-046 Pro Website auth hole (item #4)
  • MailerLite group name reconciliation (item #6)
  • SermonWise help page (item #9)

After these four sessions, expect portfolio average to move from ~40% to ~75%. A second full /ensure-solid all run will prove it.


Run metadata

  • Orchestrator: Claude Code /ensure-solid all
  • Subagents dispatched: 7 (6 property scorecards + 1 freshness audit), all model: sonnet, all read-only
  • Total wall-clock: ~15 minutes parallel (vs. ~90 minutes serial)
  • MCP servers used: churchwiseai-knowledge (read), supabase (partial — OAuth limitation)
  • Bash tool availability: inconsistent across subagent sessions — most checks graded conservatively
  • ACTIVE_WORK.md entry: released at 17:46 (sermonwise completion marker; full run synthesized after itw returned at 22:00+)
  • No code was edited. No DB writes. No deploys. No Stripe changes.