# Wishdeal Factory buyer-path - iteration 111 ship log

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

## What shipped (2 substantive ships)

This iter built the teaser-quality audit + wired it into /quality-report/ as invariant #15. Result: 247/247 dossier teasers clean.

## Ship 1: audit-teaser-quality.py - new audit class

Built audit-teaser-quality.py (~110 lines). For each /srv/sites/factory/dossiers/<slug>/teaser.md, verifies:
- **H1** has product name, matches adoptability.json name (or contains it)
- **Tagline blockquote** exists with >= 5 chars
- **Adoptability score line** present + score matches adoptability.json
- **Category** declared
- **Unlock URL** contains the slug
- **"What you get when you unlock" bullets** >= 5

**Result on first run:** 247 teasers scanned -> **247 clean, 0 issues**, 2 missing (the partial-build slugs), 2 stub-slug (AUTO + FETCH_FROM_INBOX placeholders).

**Why this matters**: the teaser is what a buyer reads BEFORE paying $5. A broken teaser (missing tagline, wrong score, no bullets, name mismatch) erodes trust at the highest-leverage point in the funnel. Now monitored.

**Writes JSON snapshot** at /srv/sites/factory/teaser-quality.json. Includes total_scanned, clean_count, issues_count, issues_by_type aggregation, sample_issues list.

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

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

Patched regen-quality-report.py with:
- New helper `latest_teaser_quality()` reads the JSON snapshot
- New card: "Dossier teaser quality 247/247 - all teasers clean"
- New audit-table row describing the audit
- New content invariant #15: "No malformed dossier teasers"

**Live-check card count: 8 -> 9.** Total content invariants: 14 -> 15.

## The 7 audit suites at iter 111

| 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** |
| 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**: 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 (NEW iter 111)
- **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, all audited
- 0 fake-proof findings, 0 score drift, 0 page-identity fall-throughs, 0 hero-polish drift, 0 missing OG cards, 0 malformed teasers
- 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 + 111 styled ship-log detail pages
- /quality-report/ surfaces **9 live-check cards** (added Dossier teaser quality)
- **15 content invariants defended**
- **7 audit systems** operational
- 77/77 health endpoints, 138+ cron jobs
- 60 min cadence active

## Iter 111 throughput note

2 substantive ships at 60-min cadence. Teaser-quality is the audit covering the highest-leverage buyer-conversion surface (the file buyers read before paying $5). All 247 currently clean - so the audit is a guard against regression.

## Running queue (top 5 for iter 112)

1. **Cross-link /own/ from /factory/catalog/ cards** - the catalog is the highest-traffic surface; /own/ isn\'t visible there yet
2. **Audit /factory/dossiers/<slug>/full.md (the gated $5 dossier itself)** - 247 markdown files; needs the dossier-fetch HMAC token to read, so audit might be more complex
3. **Investigate the 4 remaining /pricing/ weak slugs** - explicit brand-name mapping
4. **Cadence-validate 60 min** - iter 109/110/111 each 1-2 ships. Holding.
5. **13th essay** - skip until queue has fresh candidate.

## Cumulative iter 1-111

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

Every public-facing content artifact a buyer reads is now monitored. From the catalog card -> /builds/<slug>/ -> /unlock/<slug>/ -> /dossiers/<slug>/teaser.md -> /own/<slug>/ + sub-paths -> /quality-report/ -> /api-docs/. All 7 audits return clean.
