diff --git a/docs/history/DEVELOPMENT_LOG.md b/docs/history/DEVELOPMENT_LOG.md index 8c6a799..474cb12 100644 --- a/docs/history/DEVELOPMENT_LOG.md +++ b/docs/history/DEVELOPMENT_LOG.md @@ -46,6 +46,66 @@ sequence would have implied more. ## Entries +### 2026-08-18 — Batch 11 closed without a line of code, and a browser found what twenty issues had not + +Batch 11's four issues were all viewport claims. **All four were false**, and +this time they were disproved by rendering the site rather than by reading it. + +| # | claim | measured | +| --- | --- | --- | +| 195 | dropdowns clip on constrained viewports | **no clipping ancestor exists** — walked every ancestor, all `overflow: visible`. At 768px the Industries dropdown ends 95px clear of the edge | +| 196 | logo overlaps nav at 320px | text ends x=252, burger starts x=264 — a **12px gap**. No truncation, no horizontal scroll | +| 197 | no image fallbacks, users see broken placeholders | every image 200, **zero broken** after a full scroll, CLS 0.008 against a 0.1 threshold, LCP 220ms | +| 198 | click handler misses nested children | `e.target.closest('a')` **already is** delegation; the listener is on `document` | + +#196 also conflated two unrelated elements — `w-[85vw] max-w-[300px]` is the +mobile Sheet panel, not the header. + +**Running total across Batches 10 and 11: three of ten were real.** Seven +misstated their own evidence, and two of those would have made the site worse +if actioned. + +**So I built the thing that should have existed first.** `scripts/qa-browser.mjs` +drives real Chromium at real viewports and measures horizontal scroll, broken +images, elements past the right edge, CLS and LCP. + +**On its first production run it found two defects none of the twenty had +noticed**, and both were real: + +- **#214 (P1)** — at exactly 768px, iPad portrait, the header's *Request + Consultation* CTA measured x 676-778 against a 768px viewport. Ten pixels + sliced off, invisible because `overflow-x: hidden` suppresses the scrollbar, + and unreachable because the burger menu is already hidden at that width. The + primary conversion action, cut off on one of the most common tablet viewports + there is. +- **#215 (P2)** — Google's reCAPTCHA iframe is a fixed 304px. At 320px it ran + 25px past the edge, clipping the branding and the privacy links. + +Both fixed, released as **v0.9.5**, deployed, and verified live: the CTA now +636-752 at 768px, the widget 41-299 at 320px, and `qa-browser.mjs` reports +nothing across five pages at five viewports. + +**The tool lied to me twice before I trusted it**, which is the part worth +keeping. It reported a healthy lazy-loaded badge as broken at three viewports — +a coarse scroll outrunning the intersection observer — and its own argument +parser swallowed `320` as a path when `--paths` preceded `--viewports`. Both +found and fixed by checking its output against reality before believing it. A +checker that cries wolf is how the next real finding gets ignored, and this one +nearly started its life doing exactly that. + +- **Closed:** #195, #196, #197, #198 (no change required, each with the + measurement), **Batch 11 milestone**; then #214, #215 and the new **Batch 16** + milestone, both fixed and shipped. Two releases and two deploys today, no + rollbacks. +- **Next action:** Batch 12 — the eleven content and SEO issues (#199–#209). + These are copy judgements measured against `docs/design/REDESIGN_REVIEW.md`, + not measurable claims, so the browser tool does not help. Expect the same hit + rate and read each against the positioning document before rewriting anything. +- **Blockers:** none on the work. Six issues wait on the site owner (#68, #110, + #162, #213 in Batch 13; #69, #70 in Batch 14). **#211 is still the real + exposure**: the lead database has one backup copy, on one workstation, with no + schedule — four dumps taken today, all in the same place. + ### 2026-08-18 — v0.9.4 released and deployed. Production is on a number The first release and the first deploy this project has ever made through a