# Wishdeal Factory buyer-path - iteration 98 ship log

**Date:** 2026-05-14 (push mode, 50 min cadence, audit-coverage iter)

## What shipped (2 substantive ships + 1 bug-fix)

This iter extended the iter-97 page-identity audit from 1 surface (/builds/) to 4 buyer-touching surfaces (/builds/, /builds/<slug>/pricing/, /unlock/, /adopt/). Plus fixed a double-counting bug discovered while wiring.

## Ship 1: audit-page-identity v2 - 4 buyer-touching surfaces

Updated audit-page-identity.py to scan 4 URL patterns per slug instead of 1:

| Pattern | URL template | Why |
|---|---|---|
| builds | /factory/builds/<slug>/ | Primary product page (iter 97 baseline) |
| pricing | /factory/builds/<slug>/pricing/ | $0 / $5 / $99 / $199 tier explainer |
| unlock | /factory/unlock/<slug>/ | The $5 unlock CTA path |
| adopt | /factory/adopt/<slug>/ | The $99-199 adopt CTA path |

These are the 4 surfaces a buyer touches on the revenue path. If any of them serves the Caddy fall-through homepage instead of the product page, the buyer journey breaks silently.

**Result on first run:** 982 requests across 4 patterns in 9.0s.
- ok: 956 (97.4%)
- ok-weak: 26 (all in /pricing/ pattern - pages where slug/name does not appear in first 32 KB; likely too-generic pricing copy)
- identity-mismatch: 0 (no fall-throughs anywhere)
- unreachable: 0
- skipped: 6 (no local file: 2 builds dirs + 2 unlock + 2 adopt for the 2 partial-build slugs)

**Snapshot schema expanded** to include `per_pattern` breakdown (ok/weak/mismatch/unreach/skip per pattern) plus aggregated counts.

**Cron:** still :26,:56 every 30 min (no change needed; v2 still runs in <10s).

**Why this matters:** The brief-ai case from iter 96 only affected /builds/<slug>/. If a similar regression hit /unlock/<slug>/ (the actual revenue path), buyers would land on the homepage when clicking "Unlock dossier $5" and silently abandon. Now that pattern is monitored.

## Ship 2: /quality-report/ card + audit table updated for v2

Updated regen-quality-report.py:
- Page identity card now shows total requests (982/982) with subtext "no fall-through (4 surfaces)"
- "What we audit" row updated: now describes 4 surfaces and ~980 requests per run

Live card: "Page identity 982/982 - no fall-through (4 surfaces)".

## Bug-fix: double-count in v2 totals

**The bug:** total_checked was counted twice in the aggregate. The `for k in totals: if k in s: totals[k] += s[k]` loop already incremented total_checked, but a separate `totals["total_checked"] += s["total_checked"]` line added it again. Result: card showed 1964/1964 instead of 982/982.

**Fix:** removed the redundant line. Now reports correctly.

**Lesson:** when refactoring an audit's snapshot schema, re-derive totals from the per-pattern dict don't accumulate from two places. The redundancy is invisible until verified.

## Audit-discovery: 26 pricing pages may be too generic

The 26 ok-weak findings are all in /builds/<slug>/pricing/ pages where the slug and product name do not appear in the first 32 KB of the page. This is not a fall-through failure (the page is real), but it suggests these pricing pages are template-y enough that they do not name the product.

Examples: agency-compliance-automation, aiops-ai, buyer-intelligence-ai.

Worth filing for a future "pricing page content polish" iter. Lower priority than other queue items.

## Health hygiene (Op rule 5)

- **Em-dash sweep**: pending
- **audit-fakeproof**: 0 hard / 0 soft (CLEAN)
- **audit-adoptability-drift**: 244 matched, 0 drift, 2 partial-build
- **audit-page-identity**: 982/982, 0 mismatch, 0 unreachable, 26 ok-weak across pricing pages
- **Health-check**: 77/77 passing
- **All structured-data**: maintained

## Status snapshot

- 244 scored products + 2 partial builds
- 246 build pages with index.html, all 4 buyer-surfaces audited
- 0 fake-proof findings, 0 score drift, 0 page-identity fall-throughs
- 12 essays + Read-next + JSON-LD
- 8 high-trust pages with JSON-LD durable
- /factory/catalog/ with CollectionPage
- 244 /builds/ pages with PNG OG + Product schema
- 5 transparency surfaces + 97 styled ship-log detail pages
- /quality-report/ surfaces 6 live-check cards (Page identity now covers 4 surfaces)
- 12 content invariants defended
- 77/77 health endpoints, 2320 sitemap URLs
- 134+ cron jobs running
- 50 min cadence active
- **Page-identity audit: 982 requests, 4 surfaces, 0 fall-throughs**

## Iter 98 throughput note

2 substantive ships + 1 bug-fix at 50-min cadence. The audit-coverage extension was the meaningful work (4x the buyer-surface coverage). The 26 ok-weak findings on pricing pages are a separate content-quality signal worth investigating later.

## Running queue (top 5 for iter 99)

1. **Cadence step to 60 min** - iter 92-98 averaged 2-3 ships. Could step.
2. **Investigate the 26 ok-weak pricing pages** - if they are too generic, polish-pass on the top 10 by Adoptability.
3. **page-identity extension to /feedback/<slug>/, /builds/<slug>/faq/, /builds/<slug>/vs/** - 3 more buyer-touching paths. ~700 more requests, ~5s.
4. **Investigate the Director polish-pass empty-write bug** - the original brief-ai cause has not been fixed.
5. **13th essay** - skip until queue has fresh candidate.

## Cumulative iter 1-98

- **Catalog**: 244 scored + 2 partial, 246 with index.html
- **Content library**: 12 essays + Read-next + 271 OG PNGs + 97 styled ship-log pages
- **High-trust pages**: 8 foundational + 5 transparency surfaces
- **Source durability**: 23+ generators (v2 audit + double-count fix iter 98) + 6 regen scripts auto-call injectors + 4 JSON snapshots + 134+ cron jobs
- **Content invariants**: 12 defended + audits-named-publicly + partial-build visible + page-identity verification across 4 surfaces

The audit suite now covers content correctness across three axes (claim integrity, score sync, identity match) AND across four buyer-touching surfaces per product. Time-to-detect on a regression: up to 30 min for a single audit cycle. The catalog is genuinely well-monitored end-to-end.
