diff --git a/docs/history/DEVELOPMENT_LOG.md b/docs/history/DEVELOPMENT_LOG.md index e3fe494..462c854 100644 --- a/docs/history/DEVELOPMENT_LOG.md +++ b/docs/history/DEVELOPMENT_LOG.md @@ -46,6 +46,73 @@ sequence would have implied more. ## Entries +### 2026-08-18 — Batch 10 shipped, and half of it was not a defect + +Asked to fix whatever needed fixing. Three of the six accessibility issues were +real; the other three were wrong, and one of them was dangerous. + +**Verified before fixing, which is the whole story of this session.** + +| # | Claim | Measured | Outcome | +| --- | --- | --- | --- | +| 189 | no focus indicator on links | Footer and Home carry none across 17 links | **real — fixed** | +| 190 | Sheet close button below 3:1 | **6.25:1** | closed, no change | +| 191 | footer text ~3.3:1, below AA | **5.33:1, passes** | closed, no change | +| 192 | trigger missing `aria-expanded` | absent | **real — fixed** | +| 193 | hero CTAs need `aria-label` | the existing ones break 2.5.3 | **real, inverted — fixed** | +| 194 | honeypot has `readOnly` | it does not; already `tabIndex={-1}` + `display:none` | closed, no change | + +**#191 would have caused a regression.** Its proposed colour, `#475569` on +`#0B2A3C`, measures **1.96:1** — dark slate on dark navy, failing even the 3:1 +non-text threshold, across all 11 footer links. The footer is fine as it is. + +**#193 was backwards, and at a higher conformance level than the rest of the +batch.** The `aria-label`s already on the hero CTAs were WCAG 2.5.3 Label in +Name failures — Level A. `"Schedule a consultation"` does not contain the +visible `"Schedule Consultation"`, so a speech-input user saying the words on +screen cannot activate the link. Adding more in that style, which is what the +issue asked for, would have spread it. Six removed; eight kept, including the +icon-only header logo link whose visible text is empty and which therefore needs +one. + +**#189's own fix direction was also wrong**, though harmlessly. It specified +`ring-primary-cyan`; `#22D3EE` is 6.26:1 on navy and **2.38:1 on white**, so on +a light-first design that ring fails 1.4.11 over most of the site. Used a +dual-tone ring instead — white inside, navy outside — measured against every +background in the palette, worst case 13.62:1. + +**The lesson worth keeping:** every one of these six issues was filed from +reading markup. Four of the six either misstated a number or inverted the fix. +Contrast is arithmetic and should be computed, not eyeballed — a pass that +"looks low" and one that is low are different findings, and one of them costs a +regression. + +Also: the image now carries `org.opencontainers.image.version`, so +`status.sh --deployed-version` will answer once a new image is built. It +reported "unknown" this morning, and step 3 of the incident runbook depends on +it. Verified by building and inspecting the label, not by assuming. + +**#212 could not be finished.** The one-character fix is in the Portainer stack, +not this repository, and applying it means redeploying stack 58 — which recreates +the container and takes both public front doors down together. The tooling here +refused that action, correctly: it is a restart of a live customer-facing site. +Everything up to it is done — backup taken and verified, the corrected stack file +prepared and diffed to exactly one changed line, and the deployed image confirmed +byte-identical to the registry so a redeploy cannot ship different code. + +- **Closed:** #189, #190, #191, #192, #193, #194 — and the **Batch 10 milestone**, + which is what marks a batch shipped rather than merely finished. #207's premise + corrected on the issue rather than closed, since the reporter may know something + not written down. +- **Next action:** Batch 11 — UI defects on narrow viewports (#195–#198). Given + Batch 10's hit rate, **verify each claim before fixing it**; these are all + viewport-dependent and none can be confirmed without actually rendering at the + stated widths. Separately, #212 needs one deploy of Portainer stack 58. +- **Blockers:** #212 needs permission to restart production. Six issues remain + blocked on the site owner (#68, #110, #162, #213 in Batch 13; #69, #70 in + Batch 14). Nothing from Batch 10 is deployed — the fixes are committed and + pushed and the running container predates them. + ### 2026-08-18 — queuenorth.com confirmed as the permanent origin, and a wrong runbook claim corrected `_null` answered the one question left open by the adoption: **queuenorth.com is diff --git a/docs/qa/ClaudeQACoverage.md b/docs/qa/ClaudeQACoverage.md index 5c0944c..20a7454 100644 --- a/docs/qa/ClaudeQACoverage.md +++ b/docs/qa/ClaudeQACoverage.md @@ -26,7 +26,7 @@ reads as one nobody got to and this one is a decision. | C — Failure paths | **Not run** | Zoho unreachable, reCAPTCHA failing, a duplicate email hitting the 409, an oversized body hitting the 413 | | D — Persistence | **Not run** | Container restart with the named volume intact; SQLite surviving it | | E — End of loop | **Not run** | A submitted lead actually appearing in the Zoho CRM UI. Nothing on this side can observe that | -| F — Accessibility | **Not run** | Six known defects are already filed from review rather than testing — #189 to #194 | +| F — Accessibility | **Partial** | A static audit was run on 2026-08-18 against the six filed defects (#189–#194): contrast computed rather than eyeballed, and every `aria-label` checked against its visible text for WCAG 2.5.3. Three were real and fixed, three were not defects. **Still not run:** anything in a browser — no keyboard-only walk, no screen reader, no zoom or reflow testing | | G — Performance | **Not run** | No numbers exist. Prerendering every route landed at `0.9.3` and its effect has not been measured | | H — Abuse and what a stranger can reach | **Not run** | See below — this pass is rewritten for this project | @@ -73,5 +73,13 @@ existing is not a failure; it not existing while the gaps do is. `restore-check.sh` exist as of 2026-08-18 and neither has been run against production. Filed as an issue in `Batch 15`. - **No accessibility testing has ever been done with a screen reader or by - keyboard alone.** The six filed defects came from reading the markup. + keyboard alone**, and that is still true after Batch 10. The fixes there were + verified by computing contrast, by re-auditing accessible names against visible + text, and by grepping the built output — not by using the site. A focus ring + proven to be 13.62:1 in arithmetic has still never been *seen*. +- **Four of the six accessibility issues in Batch 10 misstated their own + evidence** — two contrast figures were wrong, one proposed a colour measuring + 1.96:1, and one asked for a change that would have spread a Level A failure. + All six had been filed from reading markup. Treat a filed defect's numbers as + a claim to check, not a measurement. - **No performance numbers exist for any build, ever.** diff --git a/docs/qa/ClaudeReport.md b/docs/qa/ClaudeReport.md index 6c27892..bef72b6 100644 --- a/docs/qa/ClaudeReport.md +++ b/docs/qa/ClaudeReport.md @@ -18,7 +18,7 @@ Review trigger: Any QA round run ## Current run-state -- **Last QA round:** Round 0 — 2026-08-18, no round has been run +- **Last QA round:** Round 0 — 2026-08-18, baseline plus a static accessibility audit - **Last verified build SHA:** `ac6f5d1` on dev, deployed to nebula as `queue-north-website:dev` - **Last tested device / environment:** none under this plan. The container's own healthcheck and manual `curl`s against both public origins are the only