Ship log · iter #137

Iteration 137 ship log

2026-05-15 · push mode, 60 min cadence, semantic-html audits iter

On this pageWhat shipped (2 substantive ships) Ship 1: audit-h1-uniqueness.py - 36th audit class Ship 2: audit-button-anchor-consistency.py - 37th audit class /quality-report/ wired - 2 new cards + invariants #44-45 The 37 audit suites at iter 137 Health hygiene Status snapshot Iter 137 throughput note Running queue (top 5 for iter 138) Cumulative iter 1-137

Date: 2026-05-15 (push mode, 60 min cadence, semantic-html audits iter)

What shipped (2 substantive ships)

Built 2 audits checking semantic HTML correctness on build pages. One surfaced a major systemic finding (178 pages with multiple H1s). Audit count: 35 -> 37.

Ship 1: audit-h1-uniqueness.py - 36th audit class

Built audit-h1-uniqueness.py (~75 lines). For each /builds/<slug>/index.html, verifies exactly 1 <h1> element. Multiple H1s break:

Result: 69/247 clean. 178 pages with multiple H1s (most have 2, 4 have 3).

The pattern: most build pages have a DUAL-HERO layout. First H1 is styled inline (font-size 4.6vw clamp, brand fonts) for visual prominence. Second H1 is bare <h1> that inherits from h1 { font-size: 48px } CSS rule. Both pretend to be "the main heading".

Why not fixed in this iter: a programmatic h1->h2 conversion would shrink the second hero visually (CSS rule h1 { font-size: 48px } doesn't apply to h2). Risk: 178 pages with broken visual hierarchy. Safer as a deliberate refactor pass (Wes-task) where the second hero either: (a) gets converted to h2 with explicit class to preserve visual size, OR (b) the layout is intentionally restructured to one-hero.

Cron: every hour at :57

Ship 2: audit-button-anchor-consistency.py - 37th audit class

Built audit-button-anchor-consistency.py (~75 lines). For each build page, flags <div>/<span>/<p> elements with class="btn|button|cta-button|primary-btn|secondary-btn" - non-semantic fake buttons posing as CTAs. Accessibility-broken: keyboard users can't activate them, screen readers don't announce them as actionable.

Result: 246/247 clean. 1 page with a fake-button element.

A single warn-state hit. The catalog overwhelmingly uses <a> and <button> for CTAs correctly (the placeholder-CTA cleanup work iters 134-136 also helped here - those were all <a href="#"> not div-as-button).

Cron: every hour at :59

/quality-report/ wired - 2 new cards + invariants #44-45

Patched regen-quality-report.py:

Live-check card count: 37 -> 39. Total content invariants: 43 -> 45.

New FAIL card: H1 uniqueness 69/247 - the first FAIL state since iter 136 closed the placeholder-CTA card. This is genuine structural drift that the audit caught and flagged for editorial review.

The 37 audit suites at iter 137

Class breakdown:

Health hygiene

Status snapshot

Iter 137 throughput note

2 substantive ships at 60-min cadence. H1 audit caught the dual-hero pattern that's been present since the catalog was built but never audited. 178 pages affected = largest single-audit finding since iter 134's 778 placeholder CTAs. Unlike that case, this one needs visual-aware refactoring (not just URL replacement), so it stays Wes-task.

Running queue (top 5 for iter 138)

  1. Wes-task: 178 dual-hero pages - refactor approach decision (convert second h1 to h2 with preserve-styling, OR restructure to one-hero)
  2. audit-aria-hidden-icons - icons should have aria-hidden="true" or descriptive label
  3. audit-skip-to-content-link - keyboard-nav users need this
  4. Wes-task: other warn items
  5. Pause new audits - audit perimeter is now structurally complete past 37 systems

Cumulative iter 1-137

The audit-cross-cutting count is now equal to per-surface count (17 vs 18). The buyer's structural experience is verified across 18 distinct dimensions (naming, structured data, SEO meta, social meta, navigation, images, voice, layout, accessibility, freshness, semantic HTML). Each new cross-cutting audit either confirms or surfaces drift; no audit class has been redundant.

← PreviousIter #136 Next →Iter #138