# Wishdeal Factory buyer-path - iteration 122 ship log

**Date:** 2026-05-15 (push mode, 60 min cadence, double-audit iter)

## What shipped (2 substantive ships)

This iter built TWO new audit classes - vs-content and how-it-works - bringing the suite to 15 audits with 23 invariants. Both new audits 246/246 clean on first run.

## Ship 1: audit-vs-content.py - 14th audit class

Built audit-vs-content.py (~120 lines). For each /factory/builds/<slug>/vs/index.html, accepts EITHER pattern:
- **Gated template** (190/246 pages): "this section is in the $5 dossier" + /unlock/<slug>/ CTA. This is honest gating - the audit accepts it as long as the unlock CTA points to the correct product.
- **WD_VS_TEMPLATE_v1** (56/246 pages): real named-competitor comparisons. The audit requires at least 2 `.inc-name` or `.vs-cell` blocks.

Plus universal checks: title-name match (with brand-rename + AI-suffix-stripped support), /factory/ CTA, substantial page size.

**Why dual-pattern**: gated honesty is a deliberate design choice - the highest-value section is gated behind $5 - and the audit shouldn't penalize honest gating. By accepting BOTH patterns, the audit catches drift (missing unlock CTA on gated pages, empty incumbent blocks on vs-template pages) without false-positives on intentional gating.

**Result on first run:** 246/246 clean, 0 issues.

**Deeper LLM-quality audit class noticed (deferred)**: account-based-sales-ai's vs-template-v1 lists QuickBooks/Xero/FreshBooks as named competitors. Those are accounting tools - the product is account-based-sales-AI. The named competitors look auto-generated without domain specialization. An LLM-aware audit could catch this, but it's out of scope for a regex-based suite.

**Cron:** every 30 min at :11, :41

## Ship 2: audit-how-it-works-content.py - 15th audit class

Built audit-how-it-works-content.py (~140 lines). For each /factory/builds/<slug>/how-it-works/index.html, verifies:
- Title contains product name (with brand-rename support)
- At least 3 `.section` content blocks
- At least 3 of 4 required section keywords (implementation plan / tech stack / mvp scope / build task)
- /factory/ CTA link
- Substantial page size (>=3KB)

The how-it-works page is the explainer buyers read to answer "what does this product actually do? what gets built?" - one of the most critical buyer-touching surfaces. All 246 pages share a consistent template (Implementation plan / Tech stack / MVP scope / First 7 build tasks).

**Result on first run:** 246/246 clean, 0 issues.

**Cron:** every 30 min at :13, :43

## /quality-report/ wired - 2 new cards + invariants #22-23

Patched regen-quality-report.py twice:
- New helpers `latest_vs_content_quality()` + `latest_how_it_works_quality()`
- New cards: "Vs page quality 246/246" + "How-it-works quality 246/246"
- New audit-table rows describing both patterns
- New content invariants #22 (vs) and #23 (how-it-works)

**Live-check card count: 15 -> 17.** Total content invariants: 21 -> 23.

## The 15 audit suites at iter 122

| 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 |
| audit-adopt-content.py | every 30 min | adopt-content-quality.json | 19 |
| audit-feedback-content.py | every 30 min | feedback-content-quality.json | 20 |
| audit-pricing-content.py | every 30 min | pricing-content-quality.json | 21 |
| **audit-vs-content.py** | **every 30 min** | **vs-content-quality.json** | **22** |
| **audit-how-it-works-content.py** | **every 30 min** | **how-it-works-quality.json** | **23** |
| em-dash-sweep.py | every 15 min | (log only) | 1-2 |

## Health hygiene (Op rule 5)

- All 13 prior audits unchanged
- audit-vs-content: 246/246 clean
- audit-how-it-works-content: 246/246 clean
- 24 total products in warn (8 case-studies, 16 pricing-page issues)

## 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 + 247 adopt + 247 feedback + 248 pricing + 246 vs + 246 how-it-works pages, all audited
- 0 fake-proof findings; 24 in warn (8 case-studies, 16 pricing) - both Wes-tasks
- 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 + 122 styled ship-log detail pages
- /quality-report/ surfaces **17 live-check cards**
- **23 content invariants defended**
- **15 audit systems** operational
- 77/77 health endpoints, 146+ cron jobs
- 60 min cadence active

## Iter 122 throughput note

2 substantive ships at 60-min cadence. The audit suite now covers every buyer-touching surface a buyer can land on from the catalog: build page, pricing, faq, vs, how-it-works, teaser, case-studies, unlock, adopt, feedback, /own, day-one, operator. **The audit-coverage perimeter is essentially closed.**

## Running queue (top 5 for iter 123)

1. **Audit /factory/builds/<slug>/sales-kit/ content quality** - 5 outreach assets per product (last remaining major surface)
2. **Audit /factory/builds/<slug>/skeptic-memos/ content quality** - objection-handling pages
3. **Wes-task: 16 pricing-page issues** (8 too-few-prices, 8 title-drift)
4. **Wes-task: 8 case-studies fabrications**
5. **Build cadence-validate report** - confirm 60-min cadence is producing expected throughput

## Cumulative iter 1-122

- **Catalog**: 246 scored + 2 partial, 246 with index.html, all cards link /own/
- **Content library**: 12 essays + Read-next + 273 OG PNGs + 122 styled ship-log pages
- **High-trust pages**: 8 foundational + 5 transparency surfaces
- **Audit infrastructure**: **15 audit systems** + 10-surface page-identity + brand-rename support on 6 audits + template-agnostic pricing + dual-pattern vs audit
- **Source durability**: 31+ generators + 6 regen scripts auto-call injectors + 14 JSON snapshots + 146+ cron jobs
- **Content invariants**: **23 defended** at surface+source AND publicly surfaced

The audit-coverage perimeter is essentially closed. Remaining work shifts from "build new audit classes" to "reconcile warn-state products" (24) and "deepen audit quality" (e.g. LLM-aware competitor-domain matching).
