Date: 2026-05-15 (push mode, 60 min cadence, meta-coverage + link-integrity iter)
Built 2 new audits, patched 1 generator, built 1 new injector. Brand-rename pipeline closure continues to ripple into adjacent surfaces (og:title, canonical links).
Built audit-meta-tags-coverage.py (~140 lines). For each /builds/<slug>/index.html, verifies presence of:
<title> (>5 chars)<meta name="description"> (>=25 chars)<link rel="canonical"> pointing to expected URLFirst run discovered MAJOR coverage gaps:
<link rel="canonical"> (3rd-party SEO regression)<meta name="description">Patched /home/ubuntu/factory/director/og-meta-injector.py:
brand_brief_name(slug) import and used it for og:title (fixes 29 mismatches)<link rel="canonical" href="https://wishdeal.com/factory/builds/{slug}/"> to the injected meta block (fixes all 246)Re-ran the injector: 246 pages refreshed. Contract-ai og:title now says "Inkwell". audit-ai says "Ledgerline". Canonical tags now present on all 246.
Build pages were originally generated ad-hoc by Claude, so 118 of them lacked <meta name="description"> entirely. Built meta-description-injector.py to add them.
For each page missing a meta description, the injector pulls content (in priority order):
Run: 115 descriptions added, 131 skipped (already had).
The injector inserts the tag after <meta name="viewport"> in the head, falling back to before </head> if no viewport is present. Idempotent.
Built audit-internal-links.py (~95 lines). Walks every /builds/<slug>/index.html, extracts hrefs starting with /factory/, and verifies each target maps to an existing file on disk. Avoids HTTP requests because Caddy's fall-through to homepage would hide broken links from curl-style checks.
First run result: 246 pages scanned, 3,626 internal /factory/ links, ZERO broken.
This is a strong signal that the catalog's cross-linking is durable. The result also stress-tests the iter-101 INDEX_HTML_GUARD_RESTORE and the iter-102 brand-brief archetype repair - because both would have left dangling references behind, and zero broken links means those repairs held.
Initial threshold was >=40 chars (matches Google snippet recommendation but too strict for punchy brand taglines like "Your books, done by morning." 28c). Relaxed to >=25 chars - catches genuinely thin/broken descriptions (12 remaining are 5-24 chars) while accepting short brand-style copy.
Patched regen-quality-report.py:
latest_meta_tags_coverage() + latest_internal_links_quality()Live-check card count: 21 -> 23. Total content invariants: 27 -> 29.
| Audit | Cadence | Status after iter 127 |
|---|---|---|
| audit-fakeproof.py | daily | ok |
| audit-adoptability-drift.py | every 15 min | ok |
| audit-page-identity.py | every 30 min | ok |
| audit-hero-polish-drift.py | every 30 min | ok |
| audit-og-coverage.py | every 30 min | ok |
| audit-teaser-quality.py | every 30 min | 247/247 |
| audit-case-studies-quality.py | every 30 min | 239/247 |
| audit-faq-quality.py | every 30 min | 247/247 |
| audit-unlock-content.py | every 30 min | 247/247 |
| audit-adopt-content.py | every 30 min | 247/247 |
| audit-feedback-content.py | every 30 min | 247/247 |
| audit-pricing-content.py | every 30 min | 232/248 |
| audit-vs-content.py | every 30 min | 246/246 |
| audit-how-it-works-content.py | every 30 min | 246/246 |
| audit-sales-kit-content.py | every 30 min | 246/246 |
| audit-skeptic-memos-content.py | every 30 min | 246/246 |
| audit-cross-surface-name.py | every 30 min | 29/29 |
| audit-jsonld-coverage.py | every 30 min | 246/246 |
| audit-meta-tags-coverage.py | every 30 min | 234/246 (NEW) |
| audit-internal-links.py | every 30 min | 246/246, 3626 links (NEW) |
| em-dash-sweep.py | every 15 min | running |
4 substantive ships at 60-min cadence. The iter-124 cross-cutting audit pattern continues to pay dividends: each new cross-cutting audit (jsonld coverage, meta-tags coverage, internal-links integrity) catches a layer of drift that per-surface audits structurally cannot see. The brand-rename pipeline now flows through 10 generators + 1 injector.
Internal link integrity at 246/246 + 3,626 links validated is one of the strongest "the catalog hangs together" signals the audit suite has surfaced. Combined with cross-surface-name 29/29 and jsonld-coverage 246/246, the buyer's structural experience is verifiably consistent.