# Wishdeal Factory buyer-path - iteration 126 ship log

**Date:** 2026-05-15 (push mode, 60 min cadence, full-rename-closure iter)

## What shipped (3 substantive ships)

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.

## Ship 1: audit-jsonld-coverage.py - 19th audit class

Built audit-jsonld-coverage.py (~140 lines). For each /builds/<slug>/index.html, verifies:
- At least 1 `<script type="application/ld+json">` block
- Parseable as JSON
- @context contains schema.org
- @type is one of {Product, AboutPage, TechArticle, WebPage, Article, CollectionPage, ProfilePage, SoftwareApplication}
- Required fields present: name, description, url
- **BONUS - brand-rename consistency**: if brand brief specifies a non-trivial rename, JSON-LD name should match it (skips false positives where brand brief H1 is just the slug)

**First 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.

## Ship 2: jsonld-injector.py patched + 48 JSON-LD blocks refreshed

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.

## Ship 3: 5 hand-written split-brain titles fixed (targeted swap)

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:**
- brief-ai/case-studies: Brief AI → Foreword (title + h1 swapped)
- cashflow-ai/case-studies: CashFlow AI → Riverine (title swapped, no h1 match)
- handoff-ai/case-studies: Handoff AI → Relay (title + h1)
- lawfirm-ai/case-studies: LawFirm AI → Counsel (title + h1)
- coach-ai/faq: Coach AI → Stride (title + h1)

**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.

## End-state: 29 split-brain → 0 split-brain (100% audit-pass)

| 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.

## /quality-report/ wired + invariant #27

Patched regen-quality-report.py:
- New helper `latest_jsonld_coverage()`
- New card "JSON-LD coverage 246/246 - all build pages have valid JSON-LD" (OK)
- Cross-surface card now shows "29/29 all renames consistent" (OK, was WARN)
- New audit-table row + invariant #27

**Live-check card count: 20 -> 21.** Total content invariants: 26 -> 27.

## The 19 audit suites at iter 126

| 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 |

## Health hygiene (Op rule 5)

- audit-cross-surface-name: 29/29 clean (was 0/29 then 24/29)
- audit-jsonld-coverage: NEW, 246/246 clean
- Only remaining warns: 16 pricing issues + 8 case-studies fabrications (24 total, all Wes-tasks)

## Status snapshot

- 246 scored products + 2 partial builds
- 19 audit systems
- 0 fake-proof findings; 24 in warn (16 pricing-page issues + 8 case-studies fabrications)
- ZERO products in split-brain state (was 29)
- 247 brand briefs with valid archetype; brand_brief_name now read by 9 generators including jsonld-injector
- 12 essays + Read-next + JSON-LD
- 8 high-trust pages with JSON-LD durable + 1 split-brain detail
- 273 OG PNG images
- 5 transparency surfaces + 126 styled ship-log detail pages
- /quality-report/ surfaces **21 live-check cards** (0 FAIL, 2 warn, 19 ok)
- **27 content invariants defended**
- **19 audit systems** operational
- 77/77 health endpoints, 151+ cron jobs
- 60 min cadence active

## Iter 126 throughput note

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.

## Running queue (top 5 for iter 127)

1. **Audit-meta-tags-coverage** - verify every /builds/<slug>/ has title, meta description, canonical, og:title, og:image, og:description. 20th audit + invariant #28.
2. **Audit-internal-link-integrity** - sample-walk /factory/ links to verify they resolve. 21st audit + invariant #29.
3. **Wes-task: 16 pricing issues** + 8 case-studies fabrications + 4 case-studies body-content (Foreword/Riverine/Relay/Counsel)
4. **Restore 4 custom sales-kit index.htmls** with brand-rename support
5. **Cadence-validate report** - throughput stats

## Cumulative iter 1-126

- **Catalog**: 246 scored + 2 partial, 246 with index.html, all cards link /own/
- **Content library**: 12 essays + Read-next + 273 OG PNGs + 126 styled ship-log pages
- **High-trust pages**: 8 foundational + 5 transparency surfaces + 1 split-brain detail
- **Audit infrastructure**: **19 audit systems** (17 per-surface + 2 cross-cutting) + 10-surface page-identity + brand-rename support on 6 audits + multi-pattern audits
- **Source durability**: 32+ generators + 9 of them now read brand brief via shared helper + 6 regen scripts auto-call injectors + 18 JSON snapshots + 151+ cron jobs
- **Content invariants**: **27 defended** at surface+source AND publicly surfaced
- **Pipeline architecture**: brand_name_helper.py as single source of truth for display names; honored by surface generators + jsonld-injector + page-identity

The factory's rename pipeline is now consistent from brand brief through to the HTML head, body, and structured data. Zero split-brain.
