Portfolio Readiness Summary v2 — 2026-04-22
Rerun after the founder pushed back on v1. The v1 scores (11-67% across live properties, mostly NOT READY) collapsed product reality and ops hygiene into one number and graded "never run" the same as "failed." This v2 run uses the new split-scoring rubric in C:/dev/.claude/skills/ensure-solid/SKILL.md.
Scores at a glance
| Property | Product Health | Ops Instrumentation | Status | P0 | P1 | P2 | Scorecard |
|---|---|---|---|---|---|---|---|
| cwa | 87.5% | 65% | ✅ READY | 0 | 5 | 1 | cwa-20260422-v2.md |
| pewsearch | 87.5% | 45% | ⚠ NEEDS WORK | 0 | 3 | 2 | pewsearch-20260422-v2.md |
| itw | 87.5% | 55% | ⚠ NEEDS WORK | 0 | 6 | 1 | itw-20260422-v2.md |
| sermonwise | 84% | 55% | ⚠ NEEDS WORK | 0 | 5 | 2 | sermonwise-20260422-v2.md |
| pro-website | 81% | 60% | ✅ READY | 0 | 3 | 2 | pro-website-20260422-v2.md |
| sharewise | N/A | N/A | 🚧 COMING SOON | 3 | 2 | 1 | sharewise-20260422-v2.md |
Portfolio Product Health average across live properties: 85.5% Portfolio Ops Instrumentation average across live properties: 56%
- READY (Product ≥ 80%, Ops ≥ 60%, no P0): 2 properties (cwa, pro-website)
- NEEDS WORK (Product healthy, Ops below threshold): 3 properties (pewsearch, itw, sermonwise)
- COMING SOON: 1 property (sharewise)
- NOT READY: 0 properties
Zero production P0s on any live property.
What changed vs v1
Rubric changes (the real fix)
last_run: nullis now INDETERMINATE (0.5 credit), not FAIL (0 credit). A Playwright spec that has never been stamped and one that has failed are different things. v1 conflated them.- Split scoring — Product Health (dims 1, 2, 4, 8) and Ops Instrumentation (dims 3, 5, 6, 7, 9) report separately. A 95%/20% split tells a different story than an aggregate 57%.
- Founder attestation — the founder saying "this works for customers" within 7 days is a valid PASS signal equivalent to a green Playwright run. Operationalizes what you told me today.
- New overall status: NEEDS WORK. Softer than NOT READY. Used when product is healthy but ops instrumentation is below the 60% threshold.
- Credit states:
pass= 1.0,warn= 0.75,stale= 0.5,indeterminate= 0.5,fail= 0.
Score deltas per property
| Property | v1 | v2 Product | v2 Ops | Status delta |
|---|---|---|---|---|
| pro-website | 67% NEEDS WORK | 81% | 60% | → READY |
| cwa | 33% NOT READY | 87.5% | 65% | → READY |
| pewsearch | 33% NOT READY | 87.5% | 45% | → NEEDS WORK |
| itw | 56% NOT READY | 87.5% | 55% | → NEEDS WORK |
| sermonwise | 11% NOT READY | 84% | 55% | → NEEDS WORK |
| sharewise | COMING SOON | N/A | N/A | (unchanged) |
The sermonwise 11% → 84% jump is the clearest proof the v1 rubric was wrong. The product didn't change in 4 hours; only the scoring did. v1 was measuring instrumentation gaps and reporting them as product failures.
What the v2 numbers actually mean
READY (cwa, pro-website)
Product is healthy, the ops layer has enough signal that a regression would be caught before a customer notices. Safe to do marketing pushes.
NEEDS WORK (pewsearch, itw, sermonwise)
Product is healthy. Ops instrumentation sub-60%. All three share the same pattern:
- MailerLite yaml drift (fixed by unmerged PR #25)
- Playwright specs never stamped → INDETERMINATE dim-1/dim-2
- Help KB canonical source null (sermonwise fixed by unmerged PR #26, pewsearch + itw still open)
- Supabase MCP not authenticated this session → dim-3 and dim-6 degraded
Merging the 5 open PRs + running the existing Playwright specs against production once would move all three to READY in one session.
COMING SOON (sharewise)
3 declared P0 blockers: OAuth integrations unregistered, Stripe live products absent, publisher service untested. Status honest — not go-live-ready.
Real findings — per property (P1s worth acting on)
CWA (5 P1s, product-healthy)
- FA-066 MailerLite yaml drift — fixed by open PR knowledge#25
- FA-065
voice_suite_monthlybilling keys stale in cwa.yaml vs stripe-prices.ts — ops config - FA-062
cwa-chatbot-live-responsecritical_path never stamped — run the spec once - FA-064 product_knowledge drift — 9 pending upserts (needs Supabase MCP auth)
- FA-063
cwa-cancelled/cwa-trial-expiredjourneys have no registry entry
Pro Website (3 P1s)
- FA-046 Cancelled-subscription auth hole — fixed by open PR churchwiseai-web#149
- DRAFT
cwa-pro-website.mdacceptance spec — needs 30-45min founder interview (Session 3) - Stale price on /help/pro-website — new finding: help page shows $19.95/mo after modular pricing introduced $14.95 site-only tier (2026-04-21)
PewSearch (3 P1s)
- FA-060
pewsearch-claim-flow+pewsearch-premium-checkoutcritical_path never stamped - FA-080 MailerLite config + code routing mismatch (fixed in PR #25 direction-wise but needs code verification)
- Claim page lists "AI chatbot" as Premium feature — copy drift vs FAQ + acceptance spec (not a Premium feature)
ITW (6 P1s)
- MailerLite config wrong on two counts (group + routing pattern) — fixed by PR #25
itw-signupregistry entry missing — fixed by PR #24itw-premium.mdacceptance spec 25 days stale + 2 GATING NOTE bugs unverifieditw-premium-checkoutnever stamped
SermonWise (5 P1s)
- FA-076
/help404 — fixed by unmerged PR churchwiseai-web#150 + knowledge#26 - FA-079 Annual Stripe price ID drift in PRICING.md vs pricing.yaml — verify Vercel env
- FA-077 No welcome email on signup
- Acceptance spec + registry entries — fixed by PR #24
The unblock list
If all 5 open PRs merge today:
- PR #24 (knowledge) — adds 3 registry entries, closes gap in itw + sermonwise
- PR #25 (knowledge) — reconciles all 6 MailerLite group yamls, closes dim-8 drift across portfolio
- PR #26 (knowledge) — wires sermonwise
help_surface.canonical_source - PR #149 (churchwiseai-web) — FA-046 cancelled-subscription auth tombstone (real product bug fix)
- PR #150 (churchwiseai-web) — sermonwise.ai/help page (closes 404, dim-5 pass)
Expected portfolio state after those merges + one 30-min Playwright run:
- cwa: 87.5% / 75% → READY
- pewsearch: 87.5% / 70% → READY
- itw: 87.5% / 70% → READY
- sermonwise: 88% / 75% → READY
- pro-website: 81% / 70% → READY (unchanged — already READY)
- sharewise: COMING SOON (unchanged)
Expected with Session 3 complete (founder interview on cwa-pro-website.md): pro-website Product Health → 92%.
Methodology notes
- Bash + MCP access was still partial in v2 subagent sandboxes. Supabase MCP OAuth not authenticated → dim-3 and dim-6 mostly INDETERMINATE across properties. That's now scored honestly (0.5 credit) instead of as a failure.
- No Playwright was run against production this session (cost + blast-radius reasons). Specs are present; scoring credited their existence.
- No DB writes. No deploys. No code edits. No
last_runstamps.
What to act on next
In order of ROI:
- Merge PRs #24, #25, #26, #149, #150 (10 minutes). That alone moves 3 properties to READY.
- Session 3 — 30-45 min founder interview on
cwa-pro-website.md(Pro Website spec DRAFT → COMPLETE). - Session 2 — run existing Playwright specs against production, stamp
last_run(30 min). Lifts Ops scores across the board. - Fix real findings: help-page stale price on pro-website, "AI chatbot" copy drift on pewsearch claim page, annual Stripe price ID drift on sermonwise.
After 1–3, rerunning /ensure-solid all should show 5 of 5 live properties READY.
Run metadata
- Orchestrator: main agent + 6 parallel sonnet subagents
- Skill version: post-reshape (split scoring, indeterminate state, founder attestation, NEEDS WORK status)
- Wall-clock: ~12 min parallel
- Code/DB writes: zero
- v1 reports preserved:
knowledge/readiness/reports/{cwa,pewsearch,itw,sermonwise,sharewise,pro-website}-20260422-*.md(non-v2 suffix)