The problem
A team's analytics dashboard renders its charts and KPIs, so everyone trusts the numbers on screen. Underneath, the metrics API returned a 500 and the UI quietly fell back to cached values, so the exec is reading last week's revenue presented as today's. The page looks complete and current. The data is stale and wrong, and a visual test is structurally blind to it: the pixels are fine, the network is not.
The idea
A screenshot photographs the paint. This reads the wiring behind the wall, the requests the page actually made and what the server actually said.
What you will catch
- A 200 on the endpoint that matters, the metrics, the search, the save
- Zero 5xx anywhere in the page traffic, including calls the UI swallowed
- A clean pass or fail you can block a merge on
How it works
Kane CLI records every request the page makes in the background, in an isolated sandbox, without ever opening the DevTools panel. Your sentences assert against that recording. Network capture resets each step, so the assertion sits in the same step as the action that triggers the traffic.
Run it now
kane-cli --tui
# then paste this objective:
Go to https://developer.mozilla.org and let the page load.
Assert: no network request returned a 5xx status.
Assert: the main page request returned 200.Or one line, for CI or sharing
kane-cli run "Go to https://developer.mozilla.org and let the page load.
Assert: no network request returned a 5xx status.
Assert: the main page request returned 200." --agentWhat prints
Example run. Your numbers will vary by site, build and run. The PASS / FAIL and the zeros are the stable result, the raw timings and counts are illustrative.
▶ navigate + settle ok ▶ assert no 5xx 0 of 80 requests ✓ PASS ▶ assert main request 200 seen 200 ✓ PASS RESULT PASS exit 0 ~1m ~10 to 20 credits
Adapt it to your app
Go to <your dashboard> and load the data.
Assert: the request to "<your metrics endpoint>" returned 200.
Assert: no network request returned a 5xx status.Why it works
The assertion runs against captured traffic, not the DOM, so it sees failures the render hides. The 5xx check scans every request in the step, including background calls.
What it unlocks
Put it beside your visual test. The visual test guards the pixels, this guards the plumbing. Together they catch what either one misses alone.