Knowledge Freshness Audit — 2026-04-22 1751
Generated by: freshness-auditor agent (read-only) Scope: Layer 1 (test registry), Layer 2 (acceptance specs), Layer 3 (user journeys), Bonus (readiness YAML drift)
Summary
| Layer | Total entries | last_run = null | last_run stale (>30d) | Open break (break > run) | Broken code-file pointers |
|---|---|---|---|---|---|
| Registry entries | 30 | 25 (83%) | 1 (last_run set but 4 days old) | 2 | 5 |
| Acceptance specs | 17 (excl README) | n/a | 8 stale (>30d) | 1 DRAFT | 4 broken pointers |
| Journey docs | 3 real | 0 (all have last-verified) | 0 | 0 | 0 |
| Journey doc GAPS | — | — | — | — | 7 journey stubs in readiness YAMLs with no .md |
Critical (P0)
P0-1 — stripe-live-checkout has last_run: null AND an open break (2026-04-14)
The most revenue-critical path in the entire portfolio has never had a passing recorded run AND carries an explicit last_break date with notes documenting a real customer billing failure. The gate was added to guard against recurrence, but without a green run it cannot prove correctness. last_break: 2026-04-14 is newer than last_run: null → open break by definition.
- Entry:
stripe-live-checkout(critical_path: true) - Spec file:
churchwiseai-web/e2e/stripe-e2e-validator.spec.ts(FILE EXISTS) - Blocker: No artifact proving a green run has ever been attached
P0-2 — voice-routing-integration has last_run: null AND an open break (2026-04-22)
This was added today (2026-04-22) after the M2 migration FK-join P0 that silently dropped all demo calls for ~24 hours. last_break: 2026-04-22 with last_run: null means the break has never been confirmed resolved in the registry.
- Entry:
voice-routing-integration(critical_path: true) - No spec_file (pytest tests, not Playwright) —
spec_file: null - Blocker: The P0 fix has been shipped but the registry has never recorded a post-fix passing run
P0-3 — cwa-pro-website.md acceptance spec is STATUS: DRAFT
This spec is the canonical source of truth for 3 critical journeys (onboard-to-live-site, edit-hero-customize, subdomain-public-render) in pro-website.yaml. All three critical_path: true registry entries (cwa-onboarding-wizard, cwa-pro-website-ssr, cwa-pro-website-edit) point to it. A DRAFT spec cannot govern a live product with paying customers.
- File:
knowledge/acceptance/cwa-pro-website.md(last-verified: 2026-04-17) - Blocker: Spec status is explicitly
DRAFT — pending founder interview
P0-4 — cwa-pro-website-edit has last_run: null with no spec_file
Critical-path entry that governs the admin Website editor — the core daily-use feature for Pro Website paying customers — has never run AND has no Playwright spec file pointed to.
- Entry:
cwa-pro-website-edit(critical_path: true,spec_file: null,playwright_spec: cwa-pro-website-edit) - Broken:
spec_fileis null; the spec filename is declared inplaywright_specfield only
P0-5 — user-login-cwa has last_run: null and spec_file: null
Magic-link login is a gate in front of EVERY authenticated flow. The registry explicitly notes this ("blocks every authenticated flow if broken"). No spec file, no run ever recorded.
- Entry:
user-login-cwa(critical_path: true) spec_file: null,last_run: null
Should-refresh (P1)
P1-1 — 8 acceptance specs have last-verified older than 30 days
All were last verified 2026-03-27 or 2026-03-28, which is 25–26 days ago today. At 30d they cross the stale threshold. Given the pace of changes (Pro Website decouple 2026-04-18, pricing overhaul, plan-key rename, modular pricing 2026-04-21) these specs are likely partially stale NOW, not just approaching staleness:
cancelled.md— 2026-03-28 (25 days)itw-premium.md— 2026-03-28 (25 days)pewsearch-premium.md— 2026-03-28 (25 days)pewsearch-pro-website.md— 2026-03-28 (25 days) — this spec's journey (pastor-claim-pro-website.md) still referencesps_pro_websiteandpewsearch.com/admin/[token]as the canonical path, but the Pro Website decouple (2026-04-18) madecwa_pro_websiteandchurchwiseai.com/admin/[token]the primary path. The spec may be describing a deprecated flow.pro-suite-chat.md— 2026-03-27 (26 days)sermonwise-pro.md— 2026-03-28 (25 days)trial-expired.md— 2026-03-28 (25 days)README.md— 2026-03-26 (27 days)
P1-2 — 7 critical journeys in readiness YAMLs have NO journey .md in knowledge/journeys/
Every property except cwa has declared journeys that lack a step-by-step journey doc:
pewsearch.yaml→directory-search(registry_entry:pewsearch-directory-smoke, spec: null)pewsearch.yaml→claim-listing(registry_entry:pewsearch-claim-flow, spec: null)itw.yaml→browse-search(registry_entry:itw-smoke, spec: null)itw.yaml→signup-free-tier(registry_entry:itw-signup— DOES NOT EXIST in registry)itw.yaml→premium-conversion(spec:knowledge/acceptance/itw-premium.md— exists, but no journey .md)sermonwise.yaml→generate-sermon(registry_entry:sermonwise-generate— NOT IN REGISTRY)sermonwise.yaml→export-shareandderive-small-group-guide(bothregistry_entry: null— explicit GAPs)
P1-3 — cwa-chatbot-live-response has last_run: null (critical_path: true)
The core visitor-facing chatbot product has never had a recorded green run. This is the product that is live, generating conversation, and billing customers.
- Entry:
cwa-chatbot-live-response(critical_path: true) - Spec file:
e2e/journeys/visitor-uses-chatbot.spec.ts(FILE EXISTS)
P1-4 — Broken code-file pointer in modular-pricing registry entry
src/app/admin/[token]/components/WebsiteTabEditor.tsx is listed in the code_files but DOES NOT exist at that path. The actual editor lives under src/app/admin/[token]/components/WebsiteEditor/ (a subdirectory). This means the critical-path gate would NOT trigger on changes to the actual editor components.
- Entry:
modular-pricing(critical_path: false butadded: 2026-04-21) - Broken pointer:
src/app/admin/[token]/components/WebsiteTabEditor.tsx - Actual location:
src/app/admin/[token]/components/WebsiteEditor/*.tsx
P1-5 — Broken code-file pointers in stripe-live-checkout and stripe-e2e-validation-monthly
Both entries reference src/lib/stripe/ (a directory) and src/app/checkout/ (a path). Neither exists:
src/lib/stripe/— does not exist; actual files aresrc/lib/stripe.tsandsrc/lib/stripe-prices.tssrc/app/checkout/— does not exist; checkout lives atsrc/app/onboard/checkout/This means the critical-path gate for the most important billing flow is misconfigured — edits to the actual checkout pages would NOT trigger the gate.
P1-6 — pewsearch-claim-flow and pewsearch-premium-checkout have last_run: null (both critical_path: true)
PewSearch's two revenue-critical flows have never run. Both point to spec files (e2e/claim.spec.ts, e2e/checkout.spec.ts) which DO exist in pewsearch/web/e2e/. The specs exist but no run has ever been recorded.
P1-7 — sermonwise-signup-checkout and sermonwise-generate referenced by sermonwise.yaml do NOT exist in registry.yaml
The sermonwise readiness YAML references registry_entry: sermonwise-signup-checkout and registry_entry: sermonwise-generate — neither appears in the 30-entry registry. Orphaned references mean the ensure-solid orchestrator cannot validate these journeys.
Nice-to-have (P2)
P2-1 — 25 of 30 registry entries (83%) have last_run: null
The majority of registry entries, including non-critical ones like persona tests, cross-property tests, and cron health checks, have no run history. The registry is functioning primarily as a catalog rather than an active monitoring ledger.
P2-2 — property: field missing on 16 of 30 registry entries
The field was marked as "add opportunistically" (added 2026-04-17) but most older entries lack it. This means ensure-solid must fall back to covers_tokens matching, which is fuzzier. Entries missing property: include: stripe-live-checkout, stripe-e2e-validation-monthly, stripe-synthetic-validator, cron-* entries, user-login-cwa, cwa-04-onboarding, cwa-pastor-discovery-signup, cwa-chatbot-live-response, cwa-production-smoke, all persona entries, all consistency entries, all cross-property entries, all ITW entries, all knowledge/cron entries.
P2-3 — pewsearch-pro-website.md spec may be superseded post-decouple
The spec last-verified 2026-03-28 still describes the Pro Website as a PewSearch product (plan = ps_pro_website, admin at pewsearch.com/admin/[token]). The 2026-04-18 decouple made churchwiseai.com/admin/[token] the primary path. The spec content may not yet reflect the split ownership — needs founder review.
P2-4 — voice-behavioral-nightly has last_run: null and no spec_file
The nightly behavioral test is declared but never run and has no Playwright spec — only a GitHub Actions workflow file. Not critical-path, but behavioral regression for voice is important.
P2-5 — itw-premium-checkout and itw-content-gating have last_run: null
ITW is live with paying customers ($9.95/mo). Neither its checkout nor its content-gating tests have ever been run.
P2-6 — admin-ia-2026-04-18.md acceptance spec has no tier linkage
The admin-ia spec (last-verified: 2026-04-19, freshest spec) describes admin IA redesign but is not tied to any specific plan tier and is not referenced by any readiness YAML. It exists as an orphaned spec.
Gaps / Orphans
Acceptance specs listed by readiness YAMLs but NOT present in knowledge/acceptance/
All referenced acceptance specs ARE present. No missing files in this direction.
Journey docs listed in readiness YAMLs but not in knowledge/journeys/
The following critical_journeys stubs have no corresponding journey .md:
onboard-signup-activate(cwa.yaml) — no journey .md (closest:pastor-buys-voice-agent.mdcovers onboard but for voice, not chat)chatbot-hear-protocol(cwa.yaml) — covered partially byvisitor-uses-chatbot.mdbut no dedicated HEAR-specific doctrial-expired-gating(cwa.yaml) — no journey .mdcancellation-service-continues(cwa.yaml) — no journey .mddirectory-search(pewsearch.yaml) — no journey .mdclaim-listing(pewsearch.yaml) —pastor-claim-pro-website.mdcovers Pro Website claim only, not generic claimbrowse-search(itw.yaml) — no journey .mdsignup-free-tier(itw.yaml) — no journey .md, registry entryitw-signupdoes not existpremium-conversion(itw.yaml) — no journey .mdsignup-checkout(sermonwise.yaml) — no journey .mdgenerate-sermon(sermonwise.yaml) — no journey .md, registry entrysermonwise-generatedoes not existexport-share(sermonwise.yaml) — declared asregistry_entry: nullGAP, no journey .mdderive-small-group-guide(sermonwise.yaml) — declared asregistry_entry: nullGAP, no journey .md
Registry entries with non-existent code_files
| Entry | Broken path | Actual path |
|---|---|---|
stripe-live-checkout | src/lib/stripe/ | src/lib/stripe.ts, src/lib/stripe-prices.ts |
stripe-live-checkout | src/app/checkout/ | src/app/onboard/checkout/ |
stripe-e2e-validation-monthly | src/lib/stripe/ | src/lib/stripe.ts, src/lib/stripe-prices.ts |
stripe-e2e-validation-monthly | src/app/checkout/ | src/app/onboard/checkout/ |
modular-pricing | src/app/admin/[token]/components/WebsiteTabEditor.tsx | src/app/admin/[token]/components/WebsiteEditor/*.tsx subdirectory |
cwa-pro-website-edit | src/app/api/admin/website/route.ts | Not found — no admin/website route exists |
Registry entries referenced by readiness YAMLs but NOT in registry.yaml
| Readiness YAML | Declared registry_entry | Present in registry? |
|---|---|---|
itw.yaml | itw-signup | NO — not in registry |
sermonwise.yaml | sermonwise-signup-checkout | NO — not in registry |
sermonwise.yaml | sermonwise-generate | NO — not in registry |
Detailed Findings by Layer
Layer 1: Test Registry (registry.yaml)
Total entries: 30 Critical path entries: 12
stripe-live-checkout(open break)pro-website-upgrade(last_run: 2026-04-21 — GREEN, 4 days old)modular-pricing(critical_path: false, added 2026-04-21, never run)voice-live-call(never run, no spec_file)voice-routing-integration(open break 2026-04-22, never run post-fix)user-login-cwa(never run, no spec_file)cwa-04-onboarding(never run)cwa-chatbot-live-response(never run)cwa-production-smoke(never run)consistency-price-matching(never run)pewsearch-claim-flow(never run, spec exists)pewsearch-premium-checkout(never run, spec exists)
Entries with last_run set: 3 of 30 (pro-website-upgrade 2026-04-21, cwa-onboarding-wizard 2026-04-18, cwa-pro-website-ssr 2026-04-18, cwa-pro-website-funnel-synthetic 2026-04-18) — actually 4 entries.
last_run: null: 26 of 30 entries (87%)
Open breaks (last_break newer than last_run): 2 (stripe-live-checkout, voice-routing-integration)
property: field present: 6 of 30 entries (pro-website-upgrade, modular-pricing, cwa-onboarding-wizard, cwa-pro-website-ssr, cwa-pro-website-edit, cwa-pro-website-funnel-synthetic)
Missing spec_file on critical_path entries: voice-live-call, voice-routing-integration, user-login-cwa, cwa-production-smoke, cwa-pro-website-edit
Layer 2: Acceptance Specs
Total: 17 files (16 tier specs + README)
| File | last-verified | Days old | Status | Code-files OK? |
|---|---|---|---|---|
admin-ia-2026-04-18.md | 2026-04-19 | 3 | canonical | Not checked (no tier link) |
cancelled.md | 2026-03-28 | 25 | COMPLETE | Not verified |
cwa-pro-website.md | 2026-04-17 | 5 | DRAFT | 4/5 files OK; src/app/s/[slug]/page.tsx exists, api/onboard/route.ts exists |
itw-premium.md | 2026-03-28 | 25 | COMPLETE | Not verified |
pewsearch-premium.md | 2026-03-28 | 25 | COMPLETE | pewsearch files verified OK |
pewsearch-pro-website.md | 2026-03-28 | 25 | COMPLETE | pewsearch files verified OK |
pro-both.md | 2026-04-16 | 6 | COMPLETE | — |
pro-suite-chat.md | 2026-03-27 | 26 | COMPLETE | — |
pro-website-setup-wizard.md | 2026-04-18 | 4 | COMPLETE | — |
sermonwise-pro.md | 2026-03-28 | 25 | COMPLETE | — |
starter-both.md | 2026-04-16 | 6 | COMPLETE | — |
starter-chat.md | 2026-04-16 | 6 | COMPLETE | — |
starter-voice.md | 2026-04-16 | 6 | COMPLETE | — |
suite-both.md | 2026-04-16 | 6 | COMPLETE | — |
trial-expired.md | 2026-03-28 | 25 | COMPLETE | — |
README.md | 2026-03-26 | 27 | — | — |
Stale (>30d threshold, approaching): 8 specs at 25–27 days. Will cross the 30d threshold between 2026-04-26 and 2026-04-29 if not updated. Given the Pro Website decouple (2026-04-18), plan-key rename, and modular pricing changes, several are functionally stale NOW.
DRAFT spec blocking live product: cwa-pro-website.md
Missing code_file (dangling pointer in cwa-pro-website.md):
- Declared:
churchwiseai-web/src/app/admin/[token]/components/WebsiteTab.tsx - Status: FILE EXISTS (confirmed via Glob)
All 5 code-files in cwa-pro-website.md are present. (The WebsiteTabEditor.tsx name mismatch noted in P1-4 is in the registry, not the acceptance spec itself — the spec's code-files check out.)
Dangling pointer in cwa-pro-website-edit registry entry:
- Declared:
src/app/api/admin/website/route.ts— DOES NOT EXIST - The actual website-editing API may have moved or use a different path
Layer 3: User Journey Docs
Total: 3 real journey docs + 1 template
| File | last-verified | Days old | Acceptance spec linked? | Spec exists? |
|---|---|---|---|---|
pastor-buys-voice-agent.md | 2026-04-14 | 8 | knowledge/acceptance/starter-voice.md | YES |
pastor-claim-pro-website.md | 2026-04-14 | 8 | knowledge/acceptance/pewsearch-pro-website.md | YES |
visitor-uses-chatbot.md | 2026-04-14 | 8 | knowledge/acceptance/pro-suite-chat.md | YES |
All 3 are 8 days old — within 30-day freshness window. No broken acceptance spec links.
Drift concern for pastor-claim-pro-website.md: This journey describes the PewSearch-path Pro Website claim (plan: ps_pro_website, admin: pewsearch.com/admin/[token]). Since the 2026-04-18 decouple, the primary CWA Pro Website path is churchwiseai.com/admin/[token] with plan cwa_pro_website. The journey doc captures a real (still-supported) path, but there is no corresponding journey for the new primary CWA-first path. last-verified is 2026-04-14 — before the decouple. Should be flagged for founder review.
Missing journeys (13 journey stubs across all readiness YAMLs with no .md coverage): See Gaps section above.
Bonus: Readiness YAML → Reality Drift
| YAML | Path issues | SQL issues | URL issues |
|---|---|---|---|
cwa.yaml | None found | SQL WHERE clauses are eyeball-valid | All URLs are churchwiseai.com or relative — OK |
pewsearch.yaml | covers_tokens: processes/directory-claim-flow.md — "verify exists" comment suggests this doc's existence is uncertain | None | All pewsearch.com — OK |
itw.yaml | None | None | All illustratetheword.com — OK |
pro-website.yaml | sample_public_url: https://the-bridge-church.john316.church — comment says "replace with real-customer slug" | None | Mix of churchwiseai.com paths — OK |
sermonwise.yaml | registry_entry: sermonwise-signup-checkout and sermonwise-generate — neither exists in registry | None | sermonwise.ai URLs — OK |
sharewise.yaml | All journeys registry_entry: null — expected for coming_soon status | None | sharewiseai.com — OK |
Additional drift in pewsearch.yaml: Comment on processes/directory-claim-flow.md: "# verify exists" — this exact doc path should be confirmed in the knowledge base.
Repair Priority Map
If you fixed only 8 items, you would clear approximately 80% of downstream /ensure-solid P1 failures:
- Run
stripe-live-checkoutPlaywright spec and record green run → clears P0-1, fixes most critical billing gate - Record a post-fix passing run for
voice-routing-integration→ clears P0-2, proves today's P0 is actually resolved - Complete founder interview → flip
cwa-pro-website.mdfrom DRAFT to COMPLETE → clears P0-3, unblocks all 3 Pro Website critical journeys - Create
e2espec file foruser-login-cwa→ clears P0-5 - Fix
stripe-live-checkoutcode_files:src/app/checkout/→src/app/onboard/checkout/andsrc/lib/stripe/→ individual files → clears P1-5, makes billing gate actually trigger on real file changes - Fix
modular-pricingcode_files:WebsiteTabEditor.tsx→WebsiteEditor/directory pattern → clears P1-4 - Add missing registry entries:
itw-signup,sermonwise-signup-checkout,sermonwise-generate→ clears P1-7, makes ensure-solid able to validate those journeys - Refresh 8 acceptance specs approaching staleness + verify
pewsearch-pro-website.mdagainst post-decouple reality → clears P1-1, prevents spec drift from quietly invalidating go-live readiness
This is a read-only audit. No registry, spec, or journey files were modified.