Ship log · iter #124
Iteration 124 ship log
2026-05-15 · push mode, 60 min cadence, cross-cutting audit iter
Date: 2026-05-15 (push mode, 60 min cadence, cross-cutting audit iter)
What shipped (2 substantive ships, 1 major discovery)
Built the 18th audit, surfaced a major operational discovery, and shipped a detail page for buyer-impacting drift.
Ship 1: audit-cross-surface-name.py - 18th audit class (CROSS-CUTTING)
Built audit-cross-surface-name.py (~145 lines). Unlike the prior 17 audits which each check a single surface, this one is cross-cutting: for each product with a brand brief specifying a non-trivial rename (e.g. contract-ai brand brief says "Inkwell"), the audit checks whether ALL 11 buyer-touching surfaces consistently use the brand name (or all use the slug-derived name).
Detection logic:
- For each of 246 products, load brand brief via H1 fallback (
# Inkwell ยท Brand Brief). - If brand brief name overlaps with slug-derived name (e.g. brand=Audit AI matches slug audit-ai), skip - no rename.
- Else, sweep 11 surfaces (build, pricing, faq, vs, how-it-works, sales-kit, skeptic-memos, case-studies, unlock, adopt, feedback) and record which name each surface's title uses.
- Flag products where SOME surfaces use brand and OTHERS use slug-name.
Result on first run: 246 scanned, 217 no-rename, 29 renamed products - ALL 29 split-brain.
Major Discovery: brand-rename pipeline is incomplete
The brand-rename pipeline only updates the build-page generator (and sometimes sales-kit). The 9-10 other surface generators (pricing, faq, vs, how-it-works, unlock, adopt, feedback, skeptic-memos, case-studies) still pull the canonical product name from adoptability.json.
Examples uncovered:
- contract-ai: brand brief says "Inkwell" โ only build, faq, sales-kit show "Inkwell". The other 8 surfaces still say "Contract AI".
- brief-ai: brand brief says "Foreword" โ only the build page renamed. 10 other surfaces show "Brief AI".
- audit-ai: brand brief says "Ledgerline" โ only build + sales-kit renamed. 9 others show "Audit AI".
- Same pattern for: cashflow-ai (Riverine), clinic-ai (Clearwater), coach-ai (Stride), dispatch-ai (Pylon), estimate-ai (Plumb), event-ai (Foyer), fleet-ai (Lockstep), grant-ai (Almsbury), handoff-ai (Relay), hire-ai (Northstar), intake-ai (Threshold), invoice-ai (Vellum), lawfirm-ai (Counsel), menu-ai (Saltline), nda-ai (Sealwax), open-house-ai (Doorstep), pitch-ai (Lectern), property-ai (Frontage), proposal-ai (Pencil), retainer-ai (Standing), review-ai (Goodword), scope-ai (Bracket), and 4 more.
Buyer impact: a buyer who lands on /factory/builds/contract-ai/ sees "Inkwell - Professional Contracts in Seconds". If they click Pricing, the title flips to "Pricing for Contract AI" with no Inkwell mention. They click FAQ, the title says "Inkwell" but the H1 says "Frequently asked". This is confused identity at the worst point in the buyer's decision flow.
Ship 2: /quality-report/split-brain-names/ - drill-down detail page
Built regen-split-brain-page.py + the detail page at /factory/quality-report/split-brain-names/. Lists all 29 split-brain products as a table:
| Slug | Brand name | Surfaces using brand | Slug-derived name | Surfaces using slug |
Each row links to the product's build page so Wes can quickly inspect. The page also includes a "why this happens" callout explaining the root cause (generators only read adoptability.json, not brand brief).
Cron: /factory/quality-report/split-brain-names/ regenerates every 30 min at :21, :51 (refreshes from snapshot).
/quality-report/ wired - new card + invariant #26 + detail-page link
Patched regen-quality-report.py:
- New helper
latest_cross_surface_name_quality() - New card "Cross-surface names 0/29 - 29 split-brain - see detail" (CLICKABLE to /factory/quality-report/split-brain-names/)
- New audit-table row with inline detail link
- New content invariant #26
This is the first FAIL-state card on /quality-report/. Every prior audit has been at warn at worst. The cross-surface audit caught a real, systemic operational gap.
Live-check card count: 19 -> 20. Total content invariants: 25 -> 26.
The 18 audit suites at iter 124
| Audit | Cadence | Cross-cutting? |
| audit-fakeproof.py | daily | no (catalog-wide) |
| audit-adoptability-drift.py | every 15 min | no |
| audit-page-identity.py | every 30 min | 10 surfaces |
| audit-hero-polish-drift.py | every 30 min | no |
| audit-og-coverage.py | every 30 min | no |
| audit-teaser-quality.py | every 30 min | per-product |
| audit-case-studies-quality.py | every 30 min | per-product |
| audit-faq-quality.py | every 30 min | per-product |
| audit-unlock-content.py | every 30 min | per-product |
| audit-adopt-content.py | every 30 min | per-product |
| audit-feedback-content.py | every 30 min | per-product |
| audit-pricing-content.py | every 30 min | per-product |
| audit-vs-content.py | every 30 min | per-product |
| audit-how-it-works-content.py | every 30 min | per-product |
| audit-sales-kit-content.py | every 30 min | per-product |
| audit-skeptic-memos-content.py | every 30 min | per-product |
| audit-cross-surface-name.py | every 30 min | YES - 11 surfaces per product |
| em-dash-sweep.py | every 15 min | catalog-wide |
Health hygiene (Op rule 5)
- All 17 prior audits unchanged
- audit-cross-surface-name: NEW. 0/29 clean (every renamed product split-brain). 217 products no-rename (vacuously consistent).
Status snapshot
- 246 scored products + 2 partial builds
- All 15 buyer-touching surfaces audited
- 0 fake-proof findings; 53 in warn/fail (8 case-studies + 16 pricing + 29 split-brain) - all Wes-tasks
- 247 brand briefs with valid archetype (213 have a name field, 33 don't)
- 12 essays + Read-next + JSON-LD
- 8 high-trust pages with JSON-LD durable
- /factory/catalog/ with CollectionPage + 246 cards link /own/
- 273 OG PNG images
- 5 transparency surfaces + 124 styled ship-log detail pages + 1 split-brain detail page
- /quality-report/ surfaces 20 live-check cards (1 FAIL, 1 warn, 18 ok)
- 26 content invariants defended
- 18 audit systems operational (first cross-cutting one)
- 77/77 health endpoints, 150+ cron jobs
- 60 min cadence active
Iter 124 throughput note
2 substantive ships at 60-min cadence. The cross-cutting audit pattern (1 audit checks N surfaces for consistency) opens up a new audit class that catches pipeline-level drift rather than per-surface drift. This is the highest-impact discovery of the past 100+ iters: the brand-rename pipeline is silently broken.
Running queue (top 5 for iter 125)
- Fix split-brain pipeline (HIGH-IMPACT): patch surface generators to read brand brief name as a fallback. The pricing/faq/vs/how-it-works/unlock/adopt/feedback generators each need a 5-10 line patch to call
brand_brief_name(slug) before falling back to adoptability.json. This would fix 29 products in one sweep. - OR run a one-shot rebrand sweep on the 29 split-brain products to align their titles with the brand brief.
- Wes-task: 16 pricing-page issues
- Wes-task: 8 case-studies fabrications
- Build cadence-validate report - confirm 60-min cadence throughput
Cumulative iter 1-124
- Catalog: 246 scored + 2 partial, 246 with index.html, all cards link /own/
- Content library: 12 essays + Read-next + 273 OG PNGs + 124 styled ship-log pages
- High-trust pages: 8 foundational + 5 transparency surfaces + 1 split-brain detail
- Audit infrastructure: 18 audit systems (17 per-surface + 1 cross-cutting) + 10-surface page-identity + brand-rename support on 6 per-surface audits + multi-pattern audits
- Source durability: 31+ generators + 6 regen scripts auto-call injectors + 17 JSON snapshots + 150+ cron jobs
- Content invariants: 26 defended at surface+source AND publicly surfaced
The cross-cutting audit class is the audit-suite's most valuable evolution since the per-surface audits closed the perimeter. It catches drift that per-surface audits structurally cannot see.