Skip to main content

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

PropertyProduct HealthOps InstrumentationStatusP0P1P2Scorecard
cwa87.5%65%✅ READY051cwa-20260422-v2.md
pewsearch87.5%45%⚠ NEEDS WORK032pewsearch-20260422-v2.md
itw87.5%55%⚠ NEEDS WORK061itw-20260422-v2.md
sermonwise84%55%⚠ NEEDS WORK052sermonwise-20260422-v2.md
pro-website81%60%✅ READY032pro-website-20260422-v2.md
sharewiseN/AN/A🚧 COMING SOON321sharewise-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)

  1. last_run: null is 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.
  2. 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%.
  3. 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.
  4. New overall status: NEEDS WORK. Softer than NOT READY. Used when product is healthy but ops instrumentation is below the 60% threshold.
  5. Credit states: pass = 1.0, warn = 0.75, stale = 0.5, indeterminate = 0.5, fail = 0.

Score deltas per property

Propertyv1v2 Productv2 OpsStatus delta
pro-website67% NEEDS WORK81%60%READY
cwa33% NOT READY87.5%65%READY
pewsearch33% NOT READY87.5%45%→ NEEDS WORK
itw56% NOT READY87.5%55%→ NEEDS WORK
sermonwise11% NOT READY84%55%→ NEEDS WORK
sharewiseCOMING SOONN/AN/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_monthly billing keys stale in cwa.yaml vs stripe-prices.ts — ops config
  • FA-062 cwa-chatbot-live-response critical_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-expired journeys 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.md acceptance 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-checkout critical_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-signup registry entry missing — fixed by PR #24
  • itw-premium.md acceptance spec 25 days stale + 2 GATING NOTE bugs unverified
  • itw-premium-checkout never stamped

SermonWise (5 P1s)

  • FA-076 /help 404 — 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_run stamps.

What to act on next

In order of ROI:

  1. Merge PRs #24, #25, #26, #149, #150 (10 minutes). That alone moves 3 properties to READY.
  2. Session 3 — 30-45 min founder interview on cwa-pro-website.md (Pro Website spec DRAFT → COMPLETE).
  3. Session 2 — run existing Playwright specs against production, stamp last_run (30 min). Lifts Ops scores across the board.
  4. 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)