From 6fbc5b9735f6763b770c598e404edf46359fe034 Mon Sep 17 00:00:00 2001 From: "n.siegfried" Date: Sat, 15 Aug 2026 22:21:42 -0500 Subject: [PATCH] Wave 4 exit - record the new probes and move the baseline counts Wave 4's five exit criteria, and what shows each of them: counts come from the server, identical across users aggregates_check 16/16 work packages addressable by URL, incl. signed-out url_state_check 23/23 drafts autosave, unsaved work guarded, save honest autosave_check 34/34 toasts announce, helper text legible, focus visible a11y_check 22/22 X1 and X5 cleared see below X1 is cleared: a work package has an address, and WPUrl.absolute() is what CR-011 and CR-014 will paste into an email in wave 8. X5 is cleared: /api/wps/metrics returns by_location with its dimensions declared alongside the groups, so CR-004 and CR-018 can group by building/floor/sector in wave 6 by changing the dimensions and the keys, not the response shape. Four metrics moved off their wave 0 baselines and are recorded in the file map so wave 9 measures against the right numbers. The one that matters most is not in the plan's list: `outline: none` went from six to one, and the survivor has its replacement in the rule directly above it. The file map also now says to run the browser probes ONE AT A TIME. Chained, they exhaust the headless browser's ports and abort with "browser would not start", which reads as a code fault and is not one - it cost a confusing red run here. Co-Authored-By: Claude Opus 5 (1M context) --- docs/reference/file-map.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/docs/reference/file-map.md b/docs/reference/file-map.md index 7e5e857..a476db2 100644 --- a/docs/reference/file-map.md +++ b/docs/reference/file-map.md @@ -210,6 +210,39 @@ snapshots every custom property's resolved value and every element's computed co and type, on all 7 pages, and diffs two snapshots. Use it for any task that claims to change styling without changing appearance. +Wave 4 added three more, each written because its task's done-when could not be checked by +anything that already existed: + +```bash +python tests/aggregates_check.py # B4 — do the counts come from the server? 16 checks +python tests/url_state_check.py # S3 — does the app's state have an address? 23 checks +python tests/autosave_check.py # S2/B5 — does unsaved work survive? 34 checks +python tests/a11y_check.py # S10/S11/S12 — announce, legible, focus 22 checks +``` + +Each tests what was *broken* rather than what is easy to assert. `aggregates_check.py` poisons +localStorage and demands the dashboard still report the server's total; a test that only +checked the totals were correct would have passed before `B4` was built. `a11y_check.py` runs +with CDP focus emulation on, without which `:focus-visible` never matches in headless and every +element reports a clean pass. + +**Run them one at a time.** Chained back to back they exhaust the headless browser's ports and +all three abort with "browser would not start"; that failure looks like a code fault and is not +one. + +### Baseline counts, updated + +| # | Metric | Wave 0 | Now | Changed by | +|---|---|---|---|---| +| 5 | sheets declaring their own `#0f62fe` | 4 (really 5, see §4) | **1** | `T3.2` | +| 7 | `aria-live` / `role="alert"\|"status"` sites | 0 | **13** | `T4.4`, `T4.5` | +| 8 | `pushState` | 0 | **2** (6 call sites via `wp-url.js`) | `T4.2` | +| — | `outline: none` in stylesheets | 6 | **1**, with its replacement one rule above | `T3.4`, `T4.7` | +| — | helper-text contrast, worst case | 3.01:1 | **4.56:1** | `T4.6` | + +Metrics 1–4 and 6 (native dialogs, `
`, `.help-tip` badges) are wave 9's to move +and are unchanged. + `server/smoketest.py` is the one that is **not** self-contained: it drives a server you point it at and aborts unless `WP_SMOKE_USER` and `WP_SMOKE_PASSWORD` are set, because every route but `/api/health` needs a session. Use an admin account — it creates and deletes a project.