Skip to content

Add Walk & Test: repeated probes to ten destinations, tagged by spot - #6

Merged
TechLuddite merged 1 commit into
mainfrom
claude/walk-test-section-22hq2i
Aug 23, 2026
Merged

Add Walk & Test: repeated probes to ten destinations, tagged by spot#6
TechLuddite merged 1 commit into
mainfrom
claude/walk-test-section-22hq2i

Conversation

@TechLuddite

Copy link
Copy Markdown
Owner

A survey tool rather than a snapshot one, sitting directly after the Dashboard and before "Me or the Internet?".

Ten destinations people actually depend on are probed once per round while you walk the building, and each round is tagged with the spot you named when you got there. Five consumer (Google, YouTube, Netflix, Facebook, Amazon) and five business (Microsoft 365, Teams, Zoom, Salesforce, Slack). The deliverable is the per-spot comparison, not one number for "the network".

Shape borrowed from Richard Astbury's Azure Speed Test, which probes a fixed list until the table settles. This one expects you to move.

What the numbers are

Every figure is a full HTTPS request round trip to the destination's nearest edge, measured no-cors. Not a ping, and the response is opaque by construction, so reachability and timing are the whole claim. The permanent on-screen panel says this, along with the fact that these are front doors rather than the streaming and media backends a browser cannot address at all.

Measurement decisions worth reviewing

  1. Spots are compared pairwise. Each spot's headline figure is the median of each destination's own median, computed over only the destinations that produced a median at every spot. Pooling raw samples would make the figure lurch whenever a destination dropped out, reporting a change in which destinations answered as though it were a change in latency.
  2. The first probe per destination is counted but excluded from the timings, since it carries DNS, TCP and TLS. Same treatment the DNS benchmark gives its warm-up query.
  3. A destination unreachable everywhere loses probes at the same rate at every spot, so the conclusions blame the destination instead of singling out whichever spot happened to sort first. LOSS_RATE_DIFFERENCE carries the threshold and the reasoning.
  4. Nothing is reported that was not measured. Unanswered is null, medians need enough samples, an empty walk produces no conclusions at all, and storage truncation is stated rather than silent.

A bug the browser run caught

redirect: 'manual' was in the probe to avoid measuring two hops as one. Chrome rejects that outright in no-cors mode, so every probe failed instantly and the table would have read as unreachable forever. Both static review and npm run check passed it.

Fixed by removing the option and verifying with curl that each URL answers terminally, which also caught outlook.office365.com/robots.txt bouncing to /owa/robots.txt. The probe now asks for that directly, and a test guards against either bouncing URL coming back.

Verification

  • npm run check green. 299 tests, 28 new in src/utils/walkTest.test.ts.
  • Offline in Chromium: 0 cells containing a number, 61 em-dashes, banner shown, counts read 0 / 5.
  • Simulated two-spot walk with an injected 240 ms penalty at the second spot and one destination aborted throughout. The paired comparison found the delta and the failing destination was reported as unreachable rather than as zero.
  • Mobile at 390px: no horizontal overflow. The explainer panel was moved below the live table as a result, since roughly 700px of caveats stood between the user and the numbers they are walking around to read. It is still permanent and still uncollapsed.

Also in this commit

Third parties disclosed in THIRD_PARTY_DISCLOSURES and the README privacy table, per the standing rule that a new probe endpoint gets disclosed in the same commit. CSV export (one row per spot per destination, with its own tests), history record, export bundle, dashboard card and nav entry all wired up.


Generated by Claude Code

A survey tool rather than a snapshot one. Ten destinations people
actually depend on — Google, YouTube, Netflix, Facebook, Amazon,
Microsoft 365, Teams, Zoom, Salesforce, Slack — are probed once per
round while you walk the building, and each round is tagged with the
spot you named when you got there. The deliverable is the per-spot
comparison, not one number for "the network".

Shape borrowed from Richard Astbury's Azure Speed Test, which probes a
fixed list until the table settles; this one expects you to move.

What the numbers are, and the traps avoided:

- Every figure is a full HTTPS request round trip to the destination's
  edge, measured no-cors. Not a ping, and the response is opaque by
  construction, so reachability and timing are the whole claim.
- `redirect: 'manual'` is invalid in no-cors mode — Chrome rejects the
  call before it reaches the network. A browser run caught it failing
  every probe; targets are now URLs verified to answer terminally, and
  outlook.office365.com/robots.txt was swapped for its /owa/ target,
  which 401s directly instead of bouncing.
- Each destination's first probe carries DNS, TCP and TLS. It is counted
  but kept out of the timing statistics, as the DNS benchmark does with
  its warm-up query.
- Spots are compared by the median of each destination's own median,
  paired over only the destinations that produced a median at every
  spot. Pooling raw samples would report a change in which destinations
  answered as though it were a change in latency.
- A destination unreachable everywhere loses probes at the same rate at
  every spot, so the conclusions blame the destination instead of
  singling out whichever spot sorted first.
- Nothing is reported that was not measured: unanswered is null, medians
  need enough samples, an empty walk produces no conclusions at all, and
  storage truncation is stated rather than silent.

Offline in DevTools every cell reads "—" with a reason, verified in
Chromium along with a simulated two-spot walk and the mobile layout.

Third parties disclosed in PrivacySafetyModal and the README table in
the same commit; CSV export, history and the export bundle all wired up.
@TechLuddite
TechLuddite merged commit 77305e2 into main Aug 23, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant