Ship log · iter #112
Iteration 112 ship log
2026-05-14 · push mode, 60 min cadence, case-studies audit iter
Date: 2026-05-14 (push mode, 60 min cadence, case-studies audit iter)
What shipped (2 substantive ships + 1 audit-discovery)
This iter built the case-studies quality audit and wired it into /quality-report/. The audit immediately surfaced 8 case-studies pages that drift from the honest-framing convention. /quality-report/ now publicly shows a warn state for the first time in many iters.
Ship 1: audit-case-studies-quality.py - new audit class
Built audit-case-studies-quality.py (~100 lines). For each /builds/<slug>/case-studies/index.html, verifies:
- WD_CASE_STUDIES_TEMPLATE_v1 marker present (template-generated pages)
- Title contains product name from adoptability.json
- Honest framing markers present (at least one of: "fermi", "no live", "honestly", "honest read", "placeholder", "operator partnership")
Result on first run: 247 scanned -> 239 clean, 8 issues, 1 missing
- 239 case-studies pages pass all 3 checks
- 8 pages with issues (all 3 issue types correlated):
- after-hours-voice-intake-ai-for-law-firms-that-qua (no-marker + title-no-product + no-honest-framing)
- afterhours (no-marker + no-honest-framing)
- brief-ai (no-marker + no-honest-framing) - recently restored from iter 96 backup
- cashflow-ai (no-marker + no-honest-framing)
- creator-revenue-ai (no-marker + no-honest-framing)
- handoff-ai (no-marker + no-honest-framing)
- lawfirm-ai (no-marker + no-honest-framing) - the graduated product
- outreach-sequence-ai (no-marker + no-honest-framing) - partial-build
Cron: every 30 min at :32
Audit-discovery: afterhours has fabricated case studies
Inspected afterhours/case-studies/. The page contains:
Three venues. Three different operational crises. One AI platform. The Monarch Rooftop, Velvet Underground Collective, The Midnight Social. These are not curated highlight reels. They are operational histories from venues with real problems and real deadlines.
These appear to be fabricated case-studies with named entities. The audit-fakeproof.py regex set does not catch this pattern (no "trained on", "SOC 2 certified", "X+ customers" tokens) but it is fake-proof in spirit.
For Wes: afterhours is your flagship product. The case-studies page presents fabricated venues as real operational histories. Either:
- The venues are real (rare; let us know who they actually are and we can document)
- The framing should be relabeled as "what running AfterHours would look like" hypothetical
- The page should be replaced with a "no case studies yet" honest-version page
Same concern applies to lawfirm-ai (the graduated product). The /factory/builds/lawfirm-ai/ case-studies should be reviewed; the LIVE version at intakecounsel.com is separate from the catalog page.
The 8 case-studies-issues are now publicly visible on /quality-report/ as a warn state. First "warn" state on the dashboard in many iters. Honest, not hidden.
Ship 2: /quality-report/ wired + invariant #16
Patched regen-quality-report.py with:
- New helper
latest_case_studies_quality() - New card: "Case-studies quality 239/247 - 8 need framing" (warn class)
- New audit-table row
- New content invariant #16
Live-check card count: 9 -> 10. Total content invariants: 15 -> 16.
The 8 audit suites at iter 112
| Audit | Cadence | Snapshot | Invariant # |
| audit-fakeproof.py | daily 4:30am | audit-fakeproof.json | 1-10 |
| audit-adoptability-drift.py | every 15 min | adoptability-drift.json | 11 |
| audit-page-identity.py | every 30 min | page-identity.json | 12 |
| audit-hero-polish-drift.py | every 30 min | hero-polish-drift.json | 13 |
| audit-og-coverage.py | every 30 min | og-coverage.json | 14 |
| audit-teaser-quality.py | every 30 min | teaser-quality.json | 15 |
| audit-case-studies-quality.py | every 30 min | case-studies-quality.json | 16 |
| em-dash-sweep.py | every 15 min | (log only) | 1-2 |
Health hygiene (Op rule 5)
- Em-dash sweep: pending
- audit-fakeproof: 0 hard / 0 soft (CLEAN)
- audit-adoptability-drift: 246 matched, 0 drift, 2 partial-build
- audit-page-identity: 2456 ok / 4 weak / 0 mismatch (10 surfaces)
- audit-hero-polish-drift: 177/177 match
- audit-og-coverage: 246/246 ok
- audit-teaser-quality: 247/247 clean
- audit-case-studies-quality: 239/247 clean / 8 need framing (NEW iter 112)
- Health-check: 77/77 passing
Status snapshot
- 246 scored products + 2 partial builds
- 246 build pages + 246 /own/ + 247 day-one + 247 operator + 247 teasers + 246 case-studies, all audited
- 0 fake-proof findings (regex-checked) but 8 case-studies pages have hand-written fabricated framing (Wes-task)
- 247 brand briefs with valid archetype
- 12 essays + Read-next + JSON-LD
- 8 high-trust pages with JSON-LD durable
- /factory/catalog/ with CollectionPage
- 273 OG PNG images
- 5 transparency surfaces + 112 styled ship-log detail pages
- /quality-report/ surfaces 10 live-check cards (added Case-studies quality)
- 16 content invariants defended
- 8 audit systems operational
- 77/77 health endpoints, 139+ cron jobs
- 60 min cadence active
Iter 112 throughput note
2 substantive ships + 1 audit-discovery at 60-min cadence. The discovery (afterhours case-studies fabrication) is meaningful but the fix is Wes-decision-level. Documented in the ship log for him.
Running queue (top 5 for iter 113)
- Cross-link /own/ from /factory/catalog/ cards (the catalog UX work, still pending)
- Wes-task: review the 8 case-studies pages that need honest framing (especially afterhours + lawfirm-ai)
- Audit /factory/builds/<slug>/faq/ pages - 246 buyer-touching pages, may have similar drift
- Cadence-validate 60 min - iter 110/111/112 each 1-2 ships
- 13th essay - skip until queue has fresh candidate
Cumulative iter 1-112
- Catalog: 246 scored + 2 partial, 246 with index.html
- Content library: 12 essays + Read-next + 273 OG PNGs + 112 styled ship-log pages
- High-trust pages: 8 foundational + 5 transparency surfaces
- Audit infrastructure: 8 audit systems + 10-surface page-identity coverage
- Source durability: 27+ generators + 6 regen scripts auto-call injectors + 7 JSON snapshots + 139+ cron jobs
- Content invariants: 16 defended at surface+source AND publicly surfaced
The catalog's first publicly-visible warn state is up. 8 case-studies pages need honest-framing rewrites. The audit infrastructure caught a class of content drift that the regex-based audit-fakeproof missed.