Date: 2026-05-14 (push mode, 50 min cadence, audit-coverage iter)
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.
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.
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.
Updated regen-quality-report.py:
Live card: "Page identity 982/982 - no fall-through (4 surfaces)".
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.
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.
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.
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.