Testing tiers

Oda's source ships several test tiers, from benches that render one part of the interface in isolation to suites that run the real agent process end to end. This page maps them, says what each proves, and helps you choose one for the change you are making. Each tier has its own page, where its settings, messages and fixtures live. All of these are developer tooling; none of them is part of the app's user surface.

The tiers and what they prove

Choosing a tier

If the change touchesStart with
One feature's interface, its slots or its storesSlot bench
The interface's boot, its plugin set or wiring across pluginsWhole-client bench
How your code reacts to model failuresMock model server
Agent behaviour against exact recorded model trafficSession replay
The agent end to end, pinned to committed evidenceRecorded-session snapshots
An application's real startup path, or one full run of a fixtureLoader smoke
The agent loop itself, its inbox or its claim behaviourAgent-loop testkit

Limits to plan around

Questions, answered

Which tier should I use for my change?

Start with what the change touches. A single feature's interface goes to the slot bench; the interface's boot or cross-plugin wiring goes to the whole-client bench; model-failure handling goes to the mock model server; agent behaviour against exact recorded traffic goes to session replay, and its end-to-end equivalent goes to the recorded-session snapshots; an application's real startup path goes to loader smoke; and the agent loop itself goes to the agent-loop testkit. The table above maps each case, and every tier's own page carries its settings and limits.

Which tiers run without a model provider key?

All of them, as they ship, with one exception: recording a snapshot scenario's fixtures calls the live model. The client benches never reach a model request, the mock model server stands in for the provider, replay and the recorded-session suite rebuild model traffic from recordings, and the loader smoke test runs keyless by design. After a recording, replay and refresh need no key.

What is the difference between the mock model server and session replay?

The mock server is a live stand-in: real requests arrive, and each one gets a scripted answer or fault on the wire, so you can watch how your code reacts to resets, stalls and malformed data. Replay never shapes traffic at request time; it reconstructs each model stream from a recording, so the transcript is fixed and the run is deterministic. The recorded-session suite builds on replay, while the mock server is a tier of its own.

Do any tiers run the real application process?

Yes, two. The recorded-session suite starts the real agent as a subprocess and drives it through a scripted input, and the loader smoke test boots a fixture application from its real entry point and configuration in an isolated folder. The other tiers run in the test process or as the standalone mock server.

How faithful is the whole-client bench to the real interface?

It starts the same composed plugin set, through the same boot the app uses, with the plugin modules loaded in the test process and no bundles fetched. The shortcuts are host-side: everything the interface calls is the mock, and the bench's own proxies replace the generated remote clients, so those calls get no wire-level validation or name mapping. Assert on the code an answer carries, never on the error class.

Why do the benches fail loudly instead of skipping?

Because a silent pass would hide the gap you were testing for. A missing service stops a mount and names itself; a slot key rendered before it is declared fails; an unstubbed call names itself at the call site; a call with no mock rule is recorded and reported at teardown; and endpoints nobody booted stay absent, so a new call fails loudly. Each failure points at the fixture or the wiring that is missing.

Do the tiers stack with each other?

Yes. The recorded-session suite runs on model replay and the subprocess launcher; the whole-client bench runs on the client runtime over the remote mock; and smoke compositions mount the replay fixture in place of a live model, so a smoke test needs no provider key. Picking a top tier means using the tiers underneath it.