The synthetic agent sends a tenant-scoped credential to the tool boundary.
INSPECT · COMPARE · VERIFY
Agent integration testing: execute four component contracts
Execute isolated in-memory probes and compare expected objects with observed tenant, timeout, storage and callback results.
A synthetic latency exactly equal to the deadline must return timeout, not ok.
A fresh Map must contain value seven after the storage adapter writes it.
A repeated callback must not apply the stored effect twice.
Decision trace
Four isolated probes
Each selected probe executes with fresh state. The cards reveal exact assertions over fifteen-second inspection intervals. They are independent component contracts, not stages that continue processing a rejected request. No network, database or ADK runtime is called.
Inspect observations instead of trusting a green label
This experiment executes four isolated JavaScript component probes using fresh in-memory state. They are ordered for inspection, but they are not successive operations on one failed request. Each selected probe compares an observed object with an explicit expected object. Decision trace prints both objects after its inspection boundary. No injected defect with all four checks produces PASS FIXTURE. That means these supplied contracts agree with their expectations; it does not certify an agent, a network service or a production release.
Authenticate and classify the deadline
The first probe sends tenant-A to a boundary serving tenant-A. The matching request returns status 200 and tenant-A. Wrong tenant credential instead sends tenant-B; the boundary returns 403 and a null tenant, so the success-path integration expectation fails. The authorization guard itself correctly rejects the wrong tenant. This is a wiring failure, not a demonstration that rejection is insecure. The second probe uses a synthetic latency and deadline of exactly one hundred units. Its contract treats equality as expired and expects status timeout with a null value. Tool timeout is swallowed returns status ok with a null value instead, failing that expectation. No timer, socket or remote tool is involved.
Check storage and repeated effects
The third probe writes value seven under tenant-A/result in a fresh Map and reads it back. Missing storage write omits the assignment: the trace shows present false and value null instead of present true and value seven. The fourth probe invokes a callback twice with request-1. With deduplication, its first result is applied, its second is replayed, and the state contains one effect and one receipt. Duplicate callback effect bypasses the receipt check: both invocations report applied and the effect count becomes two, even though the Set still has only one unique receipt. Counting receipt keys alone would miss this duplicate side effect.
Expose a coverage gap deliberately
Injected defect chooses one changed request or implementation behavior; it does not itself set an assertion result. Checks included executes only the first one, two, three or four probes. Choose Missing storage write and two checks, then seek Timeline to sixty: the injected defect escapes because storage was not observed. Add the third check to block it. Choose Duplicate callback effect with three checks: that fault escapes until the fourth probe executes. Skipped probes report no observation, not a synthetic pass. ESCAPED DEFECT uses knowledge of the deliberately injected fault; a real suite would not know that an unobserved bug exists.
Control the inspection timeline
Play test run reveals a result every fifteen inspection seconds over a sixty-second timeline. Pause settles and freezes elapsed time; Resume continues. Restart resets only the inspection while retaining defect, coverage and speed. Timeline scrubs to a boundary and pauses, including exactly fifteen, thirty, forty-five and sixty seconds. Speed offers half, normal and double rates; changing it accounts for elapsed time at the old rate first. Editing a defect or coverage runs fresh probes and resets without autoplay. Hiding the tab pauses. Results are calculated immediately when inputs change: playback is time to read them, not measured dependency latency.
Save a comparison and state the limits
Capture baseline stores the visible result, Replace baseline updates it and Clear baseline removes it. Notebook observations persist locally; Export notes downloads them. Expand experiment and Exit full screen change the view. These bounded functions do not implement identity verification, OAuth, a database transaction, network cancellation or concurrent idempotency. Map and Set state disappears when the probe returns. There are no race interleavings, crash recovery, durable receipts, compensation or ADK calls. A real integration test needs realistic component adapters, isolated setup and teardown, secure credentials, explicit timeouts and assertions on durable side effects. The related readings discuss those larger integration and evaluation practices; this fixture isolates four observable contracts.