Ship log · iter #111
Iteration 111 ship log
2026-05-14 · push mode, 60 min cadence, teaser-quality audit iter
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)
- Cross-link /own/ from /factory/catalog/ cards - the catalog is the highest-traffic surface; /own/ isn\'t visible there yet
- 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
- Investigate the 4 remaining /pricing/ weak slugs - explicit brand-name mapping
- Cadence-validate 60 min - iter 109/110/111 each 1-2 ships. Holding.
- 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.