Date: 2026-05-15 (push mode, 60 min cadence, full-rename-closure iter)
This iter closed the split-brain rename loop entirely: cross-surface card went from WARN 24/29 to OK 29/29. Built JSON-LD audit (which discovered AND fixed a second-order brand-rename split-brain), then targeted title swaps eliminated the last 5 hand-written holdouts.
Built audit-jsonld-coverage.py (~140 lines). For each /builds/<slug>/index.html, verifies:
<script type="application/ld+json"> blockFirst run discovered second-order brand-rename split-brain: 45 products had JSON-LD names that didn't match their brand brief (overlapped with the 29 title-split-brain + ~16 brand briefs where H1 is the slug). After refining the audit to skip trivial renames AND patching the JSON-LD generator, all 246 build pages cleared.
Patched /home/ubuntu/factory/director/jsonld-injector.py line 24 to use brand_brief_name(slug) or p.get("name", slug) - same pattern as the 8 surface generators from iter 125. The shared brand_name_helper.py module from iter 125 made this a 5-line patch.
Re-ran the injector: 48 pages refreshed. Contract-ai JSON-LD now says "Inkwell". audit-ai now "Ledgerline". All 29 brand-renamed products' Product JSON-LD now names match their brand briefs.
The 5 remaining split-brain products had hand-written content the generators don't regenerate (brief-ai/cashflow-ai/handoff-ai/lawfirm-ai case-studies + coach-ai faq). Built fix-handwritten-titles.py to do targeted <title> and first <h1> rewrites, replacing canonical name with brand brief name. Body content untouched (editorial work for Wes).
Results:
Caveat (transparent): this is a title-only fix. The case-studies body content for 4 products still mentions canonical names many times. Buyers see the brand on the title bar / browser tab / SEO snippet, but the prose reads as the canonical name. Wes can decide later whether to rewrite body prose to fully align.
| Audit run | Iter 124 | After iter 125 | After iter 126 |
|---|---|---|---|
| audit-cross-surface-name | 0/29 (FAIL) | 24/29 (WARN) | 29/29 (OK) |
| audit-jsonld-coverage | NEW (n/a) | NEW (n/a) | 246/246 (OK) |
This is the most substantial multi-iter operational improvement since the audit-perimeter close at iter 123.
Patched regen-quality-report.py:
latest_jsonld_coverage()Live-check card count: 20 -> 21. Total content invariants: 26 -> 27.
| Audit | Cadence | Status |
|---|---|---|
| audit-fakeproof.py | daily | 0/0 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 (Wes-task) |
| 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 (Wes-task) |
| 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 (was 0/29) |
| audit-jsonld-coverage.py | every 30 min | 246/246 (NEW) |
| em-dash-sweep.py | every 15 min | running |
3 substantive ships at 60-min cadence. The brand-rename pipeline is now consistent end-to-end (build page, all 9 surface pages, JSON-LD). Multi-iter operational fix complete: 124 (discover) -> 125 (pipeline fix, 24/29) -> 126 (JSON-LD + titles, 29/29).
The remaining body-content rename for 4 case-studies (Brief AI -> Foreword etc.) is editorial work tagged for Wes review.
The factory's rename pipeline is now consistent from brand brief through to the HTML head, body, and structured data. Zero split-brain.