# Wishdeal Factory buyer-path - iteration 133 ship log

**Date:** 2026-05-15 (push mode, 60 min cadence, accessibility-systemic-fix iter)

## What shipped (4 substantive ships)

Built 2 new audits. Both initially flagged systemic gaps (744 forms missing labels, all products missing utility-bar marker on 11+ surfaces). Built 1 one-shot fix script + refined the utility-bar audit to recognize all 3 legitimate top-nav templates. Both audits now 100% clean.

## Ship 1: audit-form-labels.py - 31st audit class

Built audit-form-labels.py (~120 lines). For each /unlock/, /adopt/, /feedback/ page, verifies every `<input>` + `<textarea>` + `<select>` that expects user input has matching `<label for=id>` OR aria-label OR aria-labelledby. Skips type=hidden/submit/button/checkbox/radio. WCAG 3.3.2.

**Initial result: 0/744 clean.** Every form-bearing page across the 3 surface types had unlabeled inputs (most used `placeholder` text instead of accessibility labels).

## Ship 2: aria-label-injector.py - 744-page accessibility fix

Built aria-label-injector.py (~110 lines). For each unlabeled input, derives aria-label from:
- Placeholder content (e.g. "you@example.com" -> "Email address" via @ detection)
- Or fallback by input type (email -> "Email address", textarea -> "Message", etc)

Idempotent: skips inputs that already have aria-label or matching label.

**Result: 744 pages modified, 744/744 now clean.**

**Heuristic bug discovered + repaired**: initial run derived "Phone" for a textarea whose placeholder started with `(optional)` (open-paren pattern). Fixed the heuristic to use generic "Message" for textareas regardless of placeholder. Also repaired 496 files where a shell-escape bug had injected literal `\"Message\"` instead of `"Message"`. Final state: clean.

## Ship 3: audit-cross-surface-utility-bar.py - 32nd audit class

Built audit-cross-surface-utility-bar.py (~85 lines). For each product, verifies all 11 per-product buyer-touching surfaces have a top-navigation block. Cross-cutting audit (single audit, 11 surfaces per product).

**Initial result: 0/247 clean.** All products were flagged because the audit only looked for WD_TOP_UTIL_BAR_v1 marker. But unlock/adopt/feedback/most-faq pages use older `nav.top` or `wd-utility-bar` templates.

**Refinement**: changed audit to accept ANY of 3 marker patterns (WD_TOP_UTIL_BAR_v1 / wd-utility-bar / nav.top). This catches genuinely missing-nav while not flagging legitimate template variation.

**Final result: 247/247 clean.** All products have top nav on all 11 surfaces, just under 3 different markup conventions. (Template uniformity is a separate, deeper question - not the WCAG-relevant one.)

## Ship 4: /quality-report/ wired - 2 new cards + invariants #39-40

Patched regen-quality-report.py:
- New helpers `latest_form_labels()` + `latest_utility_bar()`
- New cards: "Form label coverage 744/744 (all 744 forms have labels)" + "Top nav consistency 247/247 (all products have top nav on all 11 surfaces)"
- 2 new audit-table rows + invariants #39-40

**Live-check card count: 32 -> 34.** Total content invariants: 38 -> 40.

## The 32 audit suites at iter 133

| Class | Count | Audits |
|---|---|---|
| Catalog-wide | 1 | fakeproof |
| Per-surface content | 17 | (unchanged from iter 132) |
| Cross-cutting | 13 | cross-surface-name, jsonld, meta-tags, internal-links, twitter-card, emoji-presence, cross-surface-tagline, page-load-size, html-validity-basic, html-lang-attr, favicon-coverage, **form-labels**, **cross-surface-utility-bar** |
| Lint | 1 | em-dash-sweep |

## Health hygiene

- audit-form-labels: NEW, 744/744 clean (after 744-page aria-label injection + heuristic fix)
- audit-cross-surface-utility-bar: NEW, 247/247 clean (after 3-pattern marker accept)
- Other audits unchanged

## Status snapshot

- 246 scored products + 2 partial builds
- 32 audit systems (17 per-surface + 13 cross-cutting + 1 catalog-wide + 1 lint)
- 0 fake-proof findings; 47 in warn (19 emoji + 4 thin descriptions + 16 pricing + 8 case-studies)
- 247 brand briefs with valid archetype
- brand_name_helper.py honored by 10 generators + 1 injector
- 40 content invariants defended
- /quality-report/ surfaces **34 live-check cards** (0 FAIL, 4 warn, 30 ok)
- 744 form inputs now WCAG 3.3.2 compliant with aria-labels
- 77/77 health endpoints, 164+ cron jobs
- 60 min cadence active

## Iter 133 throughput note

4 substantive ships at 60-min cadence. **Largest single-iter accessibility fix yet**: 744 pages went from missing labels to WCAG-compliant in one sweep. The pattern of "build audit -> discover systemic gap -> build one-shot injector -> reaudit clean" demonstrated again on a large surface.

## Running queue (top 5 for iter 134)

1. **audit-script-coverage** - verify expected `<script>` blocks (analytics, intent-handler, etc) are present on relevant surfaces
2. **audit-cross-surface-back-link** - every per-product surface has a "Back to <product>" link
3. **audit-anchor-no-jump-noise** - flag empty `href="#"` placeholder links (these are often unfinished CTAs)
4. **Wes-task: 19 emoji + 4 thin descriptions + 16 pricing + 8 case-studies**
5. **audit-published-date-coverage** - ship-log and essays declare published timestamps?

## Cumulative iter 1-133

- **Catalog**: 246 scored + 2 partial, 246 with index.html
- **Content library**: 12 essays + Read-next + 273 OG PNGs + 133 styled ship-log pages
- **High-trust pages**: 8 foundational + 5 transparency surfaces + 1 split-brain detail
- **Audit infrastructure**: **32 audit systems** organized into 4 classes
- **Source durability**: 32+ generators + 11 read brand brief via helper + 28 JSON snapshots + 164+ cron jobs
- **Content invariants**: **40 defended** at surface+source AND publicly surfaced

The audit-detect-then-fix loop completed its largest single-iter cycle: 744 pages fixed in one sweep, validated by re-audit. Accessibility coverage (label, alt, lang, aria) now spans all major buyer-touching surfaces.
