# Wishdeal Factory buyer-path - iteration 116 ship log

**Date:** 2026-05-14 (push mode, 60 min cadence, unlock-page audit iter)

## What shipped (2 substantive ships)

This iter built audit-unlock-content.py + wired into /quality-report/ as invariant #18. Result: 247/247 unlock pages clean.

## Ship 1: audit-unlock-content.py - new audit class

Built audit-unlock-content.py (~100 lines). For each /factory/unlock/<slug>/index.html, verifies:
- **Title** contains product name
- **Adoptability score** visible (NN/100 pattern after HTML tag stripping)
- **$5 price** visible in content
- **Email-capture form** present (input type=email)
- **Substantial page size** (>=3KB)

**Initial false-positive caught**: first regex tried `score[^>]*>\\s*\\d+` which failed for the actual `<span class="score-pill">Adoptability <span class="v">80</span>/100</span>` structure (nested spans). Fixed by stripping all HTML tags before applying `\\b\\d{2}\\s*/\\s*100\\b` regex. Audit went from 0/247 to 247/247.

**Result on first run**: 247 scanned -> **247 clean, 0 issues**. The unlock pages are uniformly well-formed.

**Why this matters**: /unlock/<slug>/ is the $5 purchase decision moment - the highest-leverage page in the funnel. teaser-quality (iter 111) audits the markdown teaser file; this audit complements by checking the rendered HTML unlock page.

**Cron:** every 30 min at :47

## Ship 2: /quality-report/ wired + invariant #18

Patched regen-quality-report.py with:
- New helper `latest_unlock_content_quality()`
- New card: "Unlock page quality 247/247 - all unlock pages clean"
- New audit-table row
- New content invariant #18

**Live-check card count: 11 -> 12.** Total content invariants: 17 -> 18.

## The 10 audit suites at iter 116

| 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 |
| audit-faq-quality.py | every 30 min | faq-quality.json | 17 |
| **audit-unlock-content.py** | **every 30 min** | **unlock-content-quality.json** | **18** |
| em-dash-sweep.py | every 15 min | (log only) | 1-2 |

Plus health-check.py producing /factory/admin/health.json every 10 min.

## Health hygiene (Op rule 5)

- **Em-dash sweep**: 3 files / 11 dashes
- All 10 audit suites operational and verified clean (except 8 case-studies + 2 FAQ warn states from earlier iters)

## Status snapshot

- 246 scored products + 2 partial builds
- 246 build pages + 246 /own/ + 247 day-one + 247 operator + 247 teasers + 246 case-studies + 246 FAQs + 247 unlock pages
- 0 fake-proof findings; 8 case-studies + 2 FAQs in warn state
- 247 brand briefs with valid archetype
- 12 essays + Read-next + JSON-LD
- 8 high-trust pages with JSON-LD durable
- /factory/catalog/ with CollectionPage + 246 cards link /own/
- 273 OG PNG images
- 5 transparency surfaces + 116 styled ship-log detail pages
- /quality-report/ surfaces **12 live-check cards** (added Unlock page quality)
- **18 content invariants defended**
- **10 audit systems** operational
- 77/77 health endpoints, 141+ cron jobs
- 60 min cadence active

## Iter 116 throughput note

2 substantive ships at 60-min cadence. The unlock-content audit added the $5 conversion-moment page to the monitored set. All 247 pages clean - so the audit is preventive (catches future drift) rather than fixing current state.

## Running queue (top 5 for iter 117)

1. **Audit /factory/adopt/<slug>/ content quality** - companion to /unlock/; covers the $99-199 adopt CTA path
2. **Investigate FAQ rebrand cases** - update audit to accept brand-rename via brand brief lookup
3. **Wes-task: 8 case-studies fabrications** still open
4. **Cadence-validate 60 min** - iter 113-116 averaged 1-2 ships
5. **13th essay** - skip until queue has fresh candidate

## Cumulative iter 1-116

- **Catalog**: 246 scored + 2 partial, 246 with index.html, all cards link /own/
- **Content library**: 12 essays + Read-next + 273 OG PNGs + 116 styled ship-log pages
- **High-trust pages**: 8 foundational + 5 transparency surfaces
- **Audit infrastructure**: **10 audit systems** + 10-surface page-identity coverage
- **Source durability**: 29+ generators + 6 regen scripts auto-call injectors + 9 JSON snapshots + 141+ cron jobs
- **Content invariants**: **18 defended** at surface+source AND publicly surfaced

Every buyer-touching page in the funnel is now under audit: catalog -> build page -> unlock page -> dossier teaser. Plus the parallel /own/ path. Plus the 7 sub-paths on each. 12+ content-quality cards on /quality-report/.
