Date: 2026-05-15 (push mode, 60 min cadence, FAIL-to-OK cleanup iter)
Drove placeholder-CTA card from FAIL to WARN (overall 95.4% reduction since iter 134). Drove published-date card from WARN to OK. Net /quality-report state: 0 FAIL cards.
Three iterations of the placeholder-cta-injector. Each round surveyed residue, extended the safe-match table, and re-ran.
Round 3 (this iter): 146 CTAs fixed across 88 pages. Added matches for:
Round 4 (this iter): 123 CTAs fixed across 117 pages. Added brand-logo class match (covers <a class="logo"> with nested HTML like <span class="dot">.</span> which the simple text-content regex missed). All class="logo", class="nav-logo", class="footer-logo", class="nav-brand", class="footer-brand" anchors now repoint to /factory/builds/<slug>/.
Round 5 (this iter): 26 CTAs fixed across 25 pages. Extended action-verb list (Model, Calculate, Find, Analyze, Dial, Draft, Build, Predict, Fire, Schedule + invoice, Track, Launch, Explore, Get Early Access, Start Hiring, Start Modeling). Plus "demo" substring catches (Book a Free Demo, Schedule Demo).
Cumulative iter 134-136: 778 -> 36 empty-hash links (95.4% reduction). 52 -> 221/247 clean.
| Iter | CTAs fixed | Total empty | Clean pages |
|---|---|---|---|
| 134 (discovery) | 0 | 778 | 52/247 (FAIL) |
| 135 round 1 | 402 | 376 | 81/247 (FAIL) |
| 135 round 2 | 45 | 331 | 90/247 (FAIL) |
| 136 round 3 | 146 | 185 | 111/247 (FAIL) |
| 136 round 4 | 123 | 62 | 196/247 (FAIL) |
| 136 round 5 | 26 | 36 | 221/247 (WARN) |
Card moved FAIL -> WARN. Remaining 36 are mostly single-occurrence editorial decisions (Twitter / GitHub footer links, "Federal Tax Filing", one-off product-specific button copy). Wes-task.
Added <meta property="article:published_time" content="2026-05-14"> to the 7 older playbook essays (5k-budget, agency-productization, counsel-anatomy, distribution-channels-2026, five-patterns, operator-partnership-math, vertical-ai-2026). Date sourced from file mtime.
Published date card: WARN 139/146 -> OK 147/147.
Before iter 136:
After iter 136:
Live-check card count remains 37. Total content invariants: 43 (unchanged).
Unchanged from iter 135. This iter ran 2 existing audits + injectors; no new audit classes.
2 substantive ships at 60-min cadence. First iter since 124 with zero FAIL-state cards on /quality-report/. The audit-survey-inject pattern proved durable across 5 rounds, each tightening the safe-match table. The decreasing yield per round (402 -> 45 -> 146 -> 123 -> 26) shows we're approaching the editorial-judgment floor.
<button> or <a>? Inconsistency catches buyer confusionThe audit-fix loop completed its largest multi-iter campaign: 778 broken CTAs discovered iter 134, fixed iteratively across 135-136 via expanding safe-match table. Quality-report is now 0-FAIL for the first time in 12 iters.