9 checklists (41 items) covering mobile, desktop, accessibility, dashboard visuals, the operator workflow, indexing launch, deployment verification, and source-packet promotion. Most items are guarded by an automated check — npm run operator:check or npm run verify:prod — and the rest are quick manual eyeballs. This page holds no data and no values; it removes ambiguity about what 'done' means before a deploy or a promotion.
- Mobile + desktop smoke, accessibility, and dashboard-visual checks.
- Operator-workflow, indexing-launch, deployment, and promotion checks.
- Most items map to operator:check / verify:prod; the rest are quick eyeballs.
- Machine-readable at /operator/qa/data.json.
Route QA matrix
41 important routes reviewed across mobile, desktop, accessibility, visual consistency, content hierarchy, source/caveat visibility, internal linking, and indexing. No open blockers.
Discovery 7
| Route | Audience | Mobile | Desktop | A11y | Visual | Source/caveat | Next improvement |
|---|---|---|---|---|---|---|---|
| / | reader | pass | pass | pass | pass | pass | — |
| /how-to-use | reader | pass | pass | pass | pass | pass | — |
| /explore | reader | pass | pass | pass | pass | pass | — |
| /questions | reader | pass | pass | pass | pass | pass | — |
| /topics | reader | pass | pass | pass | pass | — | — |
| /updates | reader | pass | pass | pass | pass | pass | — |
| /glossary | reader | pass | pass | pass | pass | — | — |
Trust 4
| Route | Audience | Mobile | Desktop | A11y | Visual | Source/caveat | Next improvement |
|---|---|---|---|---|---|---|---|
| /citations | researcher / journalist | pass | pass | pass | pass | pass | — |
| /sources | researcher / journalist | pass | pass | pass | pass | pass | — |
| /source-health | maintainer | pass | pass | pass | pass | pass | — |
| /source-quality | researcher / journalist | pass | pass | pass | pass | pass | — |
Conflict 2
| Route | Audience | Mobile | Desktop | A11y | Visual | Source/caveat | Next improvement |
|---|---|---|---|---|---|---|---|
| /conflicts/russia-ukraine/economic-impact | reader | pass | pass | pass | pass | pass | — |
| /conflicts/dashboard | reader | pass | pass | pass | pass | pass | — |
Chokepoint 3
| Route | Audience | Mobile | Desktop | A11y | Visual | Source/caveat | Next improvement |
|---|---|---|---|---|---|---|---|
| /chokepoints/dashboard | reader | pass | pass | pass | pass | pass | — |
| /chokepoints/strait-of-hormuz/economic-impact | reader | pass | pass | pass | pass | pass | — |
| /chokepoints/red-sea-shipping/economic-impact | reader | pass | pass | pass | pass | pass | — |
Sanctions 4
| Route | Audience | Mobile | Desktop | A11y | Visual | Source/caveat | Next improvement |
|---|---|---|---|---|---|---|---|
| /sanctions/russia-energy-trade/economic-impact | reader | pass | pass | pass | pass | pass | — |
| /sanctions/shadow-fleet-shipping-insurance/economic-impact | reader | pass | pass | pass | pass | pass | — |
| /sanctions/frozen-russian-assets-ukraine-financing/economic-impact | reader | pass | pass | pass | pass | pass | — |
| /sanctions/dashboard | reader | pass | pass | pass | pass | pass | — |
Defense 2
| Route | Audience | Mobile | Desktop | A11y | Visual | Source/caveat | Next improvement |
|---|---|---|---|---|---|---|---|
| /defense | reader | pass | pass | pass | pass | pass | — |
| /defense/comparison | researcher / journalist | pass | pass | pass | pass | pass | — |
Commodity 3
| Route | Audience | Mobile | Desktop | A11y | Visual | Source/caveat | Next improvement |
|---|---|---|---|---|---|---|---|
| /commodities/food-prices/economic-impact | reader | pass | pass | pass | pass | pass | — |
| /commodities/oil-benchmarks/economic-impact | reader | pass | pass | pass | pass | pass | — |
| /commodities/dashboard | reader | pass | pass | pass | pass | pass | — |
Data 2
| Route | Audience | Mobile | Desktop | A11y | Visual | Source/caveat | Next improvement |
|---|---|---|---|---|---|---|---|
| /datasets/conflict-economic-impact | researcher / journalist | pass | pass | pass | pass | pass | — |
| /data-needs | maintainer | pass | pass | pass | pass | pass | — |
Methodology 4
| Route | Audience | Mobile | Desktop | A11y | Visual | Source/caveat | Next improvement |
|---|---|---|---|---|---|---|---|
| /methodology | researcher / journalist | pass | pass | pass | pass | pass | — |
| /methodology/indexing | maintainer | pass | pass | pass | pass | pass | — |
| /methodology/live-data | reader | pass | pass | pass | pass | pass | — |
| /methodology/maritime-data | reader | pass | pass | pass | pass | pass | — |
Operator 10
| Route | Audience | Mobile | Desktop | A11y | Visual | Source/caveat | Next improvement |
|---|---|---|---|---|---|---|---|
| /operator | maintainer | pass | pass | pass | pass | — | — |
| /operator/report | maintainer | pass | pass | pass | pass | — | — |
| /operator/qa | maintainer | pass | pass | pass | pass | — | — |
| /operator/source-watch | maintainer | pass | pass | pass | pass | — | — |
| /operator/staleness | maintainer | pass | pass | pass | pass | — | — |
| /operator/backlog | maintainer | pass | pass | pass | pass | — | — |
| /operator/automation | maintainer | pass | pass | pass | pass | — | — |
| /operator/source-packets | maintainer | pass | pass | pass | pass | — | — |
| /operator/production-health | maintainer | pass | pass | pass | pass | — | — |
| /operator/launch | maintainer | pass | pass | pass | pass | — | — |
Mobile smoke
How: Narrow viewport (≈360px) or npm run verify:prod for the CSS marker.
- No document-level horizontal scroll on any page (html overflow-x: clip).
- Top nav scrolls inside its own container; the page does not shift.
- Card grids collapse to a single readable column on small screens.
- Tables sit inside a .table-wrap scroll container, not overflowing the page.
- Code/paste blocks wrap (.code-block) and long URLs break instead of overflowing.
- SVG diagrams/schematics fit the viewport width.
Desktop smoke
How: Manual eyeball at a normal width.
- Hero and first screen read clearly; primary actions are obvious.
- Dashboard cards align; spacing/borders are consistent.
- Long pages have logical section order and headings.
- Footer groups render and links resolve.
Accessibility
How: Keyboard + screen-reader spot check; metadata-audit/operator:check guard structure.
- Skip-to-content link works (Tab from the top of any page).
- Visible focus ring on links/buttons (:focus-visible).
- SVG visuals have role="img" + an accessible name, or a text equivalent nearby.
- Charts/schematics have a text summary; timelines are semantic lists.
- Status/caveat badges convey meaning by text, not color alone.
- Heading order is logical; link text is descriptive.
Visual / screenshot QA
How: npm run qa:visual (no browser: status + landmarks + CSS markers + overflow heuristic); pixel screenshots are manual.
- Run npm run qa:visual against production (or a local next start via WARCONOMY_BASE).
- For routes flagged screenshotRequired in the QA matrix, capture manual screenshots at ~390px, ~768px, and ~1280px.
- Confirm no horizontal scroll, readable card stacking, and contained tables/SVGs at 390px.
- Pixel screenshots need a browser engine (e.g. Playwright) — intentionally not a dependency; capture by hand or with an installed tool.
Dashboard visual
How: Manual eyeball of dashboards + topic pages.
- Every visible figure shows source / asOf / reviewed / caveat where available.
- No visual implies live/real-time data unless it is explicitly caveated.
- Chokepoint dashboard reads as a dashboard but states 'not a live tracker'.
- Sample rows are labeled sample, never presented as measured.
Operator workflow
How: npm run operator:morning then operator:check.
- Morning report loads and names the best next data pull + autonomous task.
- Each source-watch item links to its source-packet template.
- Staleness triage lists the oldest-reviewed values first.
- No operator surface implies auto-promotion of values.
Indexing launch (manual)
How: /methodology/indexing + /operator/indexing-readiness/data.json (ready:true).
- Create a Google Search Console domain property for warconomy.com.
- Verify via DNS TXT; submit https://warconomy.com/sitemap.xml.
- Inspect the homepage, then request indexing for the priority pages.
- Add Bing Webmaster Tools (import from GSC). Indexing is never guaranteed.
Deployment verification
How: npm run verify:prod after a push.
- Auto-rollout: push to main, then a new route serves within ~10 min (no manual rollout).
- If production stays stale, fall back to apphosting:rollouts:create --git-branch main --force.
- verify:prod is ALL GOOD; /monitors/ukraine is 308; mobile CSS marker present.
- Old /changes/{old-version} is a clean 404; /wp-admin probes stay 404.
- Analytics: the GA4 tag is in the served homepage HTML; after visiting the site, the Google Analytics Realtime report shows the visit (non-Realtime reports can lag ~24-48h for a new property).
Source-packet promotion
How: validateTypedPacket + promotionPlan dry-run before any data edit.
- Packet has official URL, value, unit, period/asOf, where-found, caveat, confidence.
- PDF packet has page+table; XLSX packet has sheet+cell; chart value has an exact label.
- No hard-fails and no unresolved needs-confirmation before promoting.
- Run promotionPlan() to preview changes; promotion is a separate explicit step.
Related
Morning report · Production health · Operator workbench · Indexing checklist · Automated QA report · /operator/qa/data.json