Skip to content

Record once debug forever

S edited this page Aug 20, 2026 · 2 revisions

Record once, debug forever

The defining difficulty of outdoor AR development is not the mathematics. It is that the bug happened in a park, twenty minutes ago, while someone was walking, and you cannot make it happen again.

You cannot attach a debugger to a walk. You cannot ask GPS to produce the same multipath error twice. You cannot re-run yesterday's satellite geometry. Every observation is a one-off, which makes the normal debugging loop — reproduce, inspect, fix, verify — unavailable exactly where it is needed most.

The way out is to stop treating the session as an event and start treating it as data.

What gets captured

The recorder app captures, in one session:

  • WebXR AR poses — the device's tracked pose over time.
  • GPS positions — every reading with its accuracy and timestamp.
  • Camera frames, optionally.
  • Depth samples, optionally.

All time-synchronised, and exported as a single self-contained ZIP. That last property is the one that matters organisationally: a session is now a file. It can be emailed, attached to an issue, committed to a repository, handed to a colleague who was not there, and — crucially — replayed years later against code that did not exist when it was recorded.

Why a ZIP and not a service

Deliberately boring, and each part is a decision:

  • No upload. Recording works with no connectivity, which matters because the interesting environments are the ones without it.
  • No account. The user who captured a problem does not need one.
  • Portable. No infrastructure to keep running for the file to remain readable in five years.
  • Reviewable. It is a ZIP. You can look inside.
  • Extensible. Apps add their own sections through a contributor interface, so a consumer's domain data travels alongside the sensor data in the same file.

What it changes about development

Bugs get an address. "Alignment drifts near the bridge" becomes a ZIP attached to an issue. Anyone can load it and see the same thing, on a desktop, indoors, at any hour — replaying it in 3D. The recorder is deployed, and the repository ships real example sessions so you can try replay before going outside.

Regressions become detectable. A recorded session is a fixture: change something, replay the whole corpus, and compare across every session at once. Without that, an alignment change is judged by whether it felt better on a walk someone took once — a measurement with an enormous error bar and a strong bias toward whoever made the change.

Rare conditions get preserved. The pathological GPS you saw once between two glass buildings is a permanent test case rather than an anecdote.

Reviewers can check things. A claim about outdoor behaviour is normally unfalsifiable by anyone not standing there. With recordings, it is falsifiable by anyone.

Replay is where the value is realised

A recording you cannot replay meaningfully is just storage. The desktop replay reconstructs the full 3D scene from the session — poses, the walked path, the GPS track, the depth-derived geometry — with camera controls, so you can inspect the moment the alignment went wrong from an angle the user never had.

That is the part that feels like cheating the first time: examining an outdoor tracking failure from a bird's-eye view, indoors, with a scrubber.

What it does not solve

Worth stating plainly, because a recording corpus invites overconfidence:

  • It cannot capture what the sensors did not. A tracking failure caused by something outside the recorded channels is invisible in replay.
  • Replay is not the device. Timing, thermal state and real-time scheduling differ. A bug that only appears on a hot phone at 20 fps will not show up.
  • The corpus is what you walked. It over-represents the routes near wherever developers live, which is a sampling bias that quietly shapes what the system is good at.

So recordings replace most of the outdoor loop, not all of it. The residue still needs a real walk — which is the honest reason the plan for this project insists on periodically going outside with a phone rather than trusting the fixtures.

Clone this wiki locally