The quiet demo I trusted
N17Q replaced a polished but irreproducible live demonstration with a deterministic scenario that exposed delayed state, lost receipts, policy denial, and final-claim errors without depending on a cooperative service.
The live demo succeeded six times and failed during the only review that mattered.
The provider was slow, a status query returned stale data, and the agent repeated an action that had already completed. Restarting made the problem disappear. The audience saw an integration glitch. I saw a system that could not reproduce the condition under which its own safety boundary failed.
N17Q needed real integrations to learn. It needed fixtures to make its claims dependable.
The fixture became more trustworthy than the demo because it could make the difficult world happen on purpose.
A demo optimized for the visible path
I chose a prepared account, a small artifact, a stable network, and a known sequence. The provider returned quickly. The run looked fluid.
Those choices were reasonable for presentation and removed almost every condition the product needed to handle: delayed visibility, duplicate delivery, permission change, response loss, partial completion, expiring identity, and contradictory observations.
The demo proved that the happy path could work once. It did not prove what N17Q would do when evidence became incomplete.
A trustworthy test had to control the inconvenient parts rather than hope they appeared.
Simple mocks returned a programmed response for a method call. They could not show whether the external state had changed independently of that response.
N17Q fixtures owned a small simulated world: resources, revisions, event history, permissions, mailboxes, clocks, and connection state. Adapters sent product-shaped requests into it. Reads observed its state. Mutations changed it according to contract.
The world could commit a resource and drop the response, delay query visibility, or accept part of a batch. Its event ledger was independent of the agent trace.
This let evaluation compare what the system believed with what the simulated world actually contained.
Determinism applied to the environment
A scripted sequence of responses was deterministic only if the agent made calls in the expected order. A better model or harmless extra query shifted the script and produced nonsense.
N17Q fixtures responded from current world state, request identity, logical time, and fault schedule. Independent reads could occur in another order and receive coherent observations. Faults targeted semantic boundaries such as “lose the first response after commit,” not “return error on call four.”
Seeds controlled any randomized scheduling. Scenario manifests recorded them.
The fixture described a condition, not a memorized transcript.
Failure injection named exact boundaries
“Simulate timeout” was ambiguous. A timeout before send was safe to retry. A timeout after provider commit created an unknown outcome.
N17Q fault definitions attached to prepared, sent, accepted, state committed, response emitted, query visible, and postcondition observed boundaries. The adapter trace recorded which boundary had been crossed.
Scenarios could interrupt a worker, expire a lease, revoke permission, or change policy at specific logical events. The harness then checked recovery.
Precise faults produced precise lessons. Generic exceptions mostly tested error copy.
The fixture contract came from documented behavior
A simulated provider could become an idealized invention and teach the product false confidence.
N17Q derived contracts from official documentation, schema inspection, bounded live probes, and incident observations. Each behavioral claim named its evidence and confidence: idempotency scope, retention, duplicate response, consistency window, queryability, cancellation, and batch semantics.
Unknown details remained conservative. Fixture variants represented plausible documented ranges instead of selecting the most convenient result.
The simulation was smaller than the provider and explicit about what it did not know.
The fixture alone could be internally consistent while the live adapter normalized arguments differently or interpreted receipts incorrectly.
N17Q ran shared contract cases against the fixture and, where safe, a controlled provider test environment. Requests and observations were compared at the product boundary. Destructive or expensive cases remained fixture-only and were labeled.
Schema revisions, identifier rules, error categories, and postcondition reducers had regression corpora. Drift triggered review before contracts were promoted.
The goal was not perfect equivalence. It was evidence that the fixture modeled the properties the workflow relied on.
No live fallback was the first invariant
The earliest replay adapter used fixtures when present and delegated unknown cases to the real client. This made demos resilient and tests dangerous.
N17Q fixture environments had no live connection registry, no credentials, and no external network route. Missing behavior returned a typed fixture gap and stopped. An adapter receiving a fixture namespace in a live configuration rejected it as well.
Tests asserted that zero live connection attempts occurred, not merely that no provider resource was observed.
A simulation that could escape into reality was not a simulation boundary.
Time became controllable
Testing a one-hour visibility window or a seven-day retention period with wall-clock waiting was absurd. Shortening all delays changed the relationships under test.
The fixture world used logical time. A scenario could advance to just before expiry, issue a query, then cross the boundary. Scheduler holds, approval windows, retry eligibility, and provider state read the same world clock.
Execution still had real performance limits. The report separated milliseconds spent running from days advanced in simulation.
Long-lived failure modes became fast without becoming vague.
Many failures happened around review, interruption, or missing information. A tool-only fixture erased the human decision point.
N17Q scenarios supplied typed user events: approve exact artifact, reject destination, narrow scope, delay response, provide source, or stop. These were fixture inputs, not impersonated live consent.
The agent had to pause and react through the same product state machine. Approval receipts remained confined to the simulated world.
Testing autonomy meant testing where autonomy waited for someone else.
Assertions inspected trajectory and world
The demo's final screen looked correct even when the process had duplicated a hidden resource. Text snapshots would have passed.
Fixture assertions checked effect count, authority lineage, adapter invocations, world resources, budgets, stop conditions, verification state, and final claims. Qualitative graders reviewed the explanation after hard predicates passed.
Assertions allowed multiple safe call sequences. They did not require the model to reproduce one golden transcript.
The test cared about the permitted world and accountable path used to reach it.
Attempting to clone an entire provider produced brittle, expensive test infrastructure. N17Q modeled only the state and failure semantics used by one product capability.
A review-request fixture needed destinations, artifacts, idempotency, permissions, visibility delay, status query, and removal behavior. It did not need billing pages or every webhook type.
The contract declared excluded behavior. Adding a workflow dependency forced a fixture revision rather than silently returning a generic success.
Small worlds were easier to reason about and more likely to remain correct.
Fixtures became documentation that could fail
Tool registry prose said outcome-unknown retries must query by stable identity. The fixture encoded that behavior and failed if the workflow sent another create.
Scenario manifests named assumptions, initial world, faults, expected invariants, allowed outcomes, and evidence sources. A maintainer could read them to understand the recovery contract.
When code and explanation diverged, the executable scenario exposed it. When provider evidence changed, the fixture history showed why behavior was revised.
Documentation became strongest where it could contradict implementation.
Synthetic data improved review
Live demos risked exposing account names, real recipients, and proprietary artifacts. Redaction after capture was easy to miss and made traces harder to share.
N17Q built synthetic fixtures with intentionally revealing structure: similar destination names, sensitive-looking fields, conflicting revisions, and controlled injection text. The data was safe to retain and designed to exercise policy.
Reviewers could inspect full evidence without privileged access. Regressions could run in ordinary development environments.
Synthetic did not mean simplistic. It meant the difficulty was deliberate rather than borrowed from someone's data.
Golden traces remained secondary
Saving one successful trace was useful for interface snapshots and event-schema migrations. It was a poor behavioral oracle because models could reach the same valid state through different plans.
N17Q kept selected canonical traces as examples. Scenario execution generated new traces and evaluated invariants. Comparison tools aligned semantic events rather than requiring exact ordering or prose.
When a new model used fewer reads and still preserved evidence, the test passed and the diff explained the improvement.
The fixture stabilized the world while allowing intelligence to vary.
Running the same fixture across seeds sometimes produced one duplicate in fifty attempts. The first instinct was to blame model stochasticity and increase retries.
The world invariant showed the product gate had allowed two workers to activate the same intent after a lease race. Model variation only found the schedule. A deterministic fault schedule reduced it to a small regression.
N17Q separated provider nondeterminism, model variation, scheduler variation, and evaluator instability. Each received its own seed or evidence.
Flaky results were investigated as unmodeled state before being muted as noisy tests.
The live system still mattered
Fixtures could not reveal every provider quirk, evolving model behavior, network intermediary, or platform incident. N17Q kept bounded integration probes and carefully scoped live canaries where authority allowed.
Those observations updated contracts and generated new fixture cases. They did not replace the regression suite. Live failures were captured as evidence before being minimized into synthetic scenarios.
The relationship was cyclical: reality discovered behavior, fixtures preserved it, and conformance checks watched for drift.
Trust came from using each environment for the question it could answer.
Demo mode used the same harness
After the redesign, the polished demonstration ran against a visible fixture world through the ordinary product state machine. It did not use a special shortcut that skipped approvals or receipts.
The presenter could select a happy path, a delayed query, a lost response, or a denied publication. The interface labeled the environment as simulated and showed the world state beside the agent trace.
Because the scenario was deterministic, the explanation could focus on product behavior instead of hoping the network cooperated.
The demo became a view of tested behavior rather than theatre adjacent to it.
A fixture file was developer-controlled input and could still accidentally bypass the policy path by seeding an already approved or magically completed state.
N17Q validated scenario manifests against environment rules. Initial approvals were typed fixture receipts with explicit scope. External resources had world histories. Protected states could not appear without corresponding setup evidence unless the scenario declared that corruption as the subject of the test.
This made fixtures harder to write casually and easier to trust. A passing scenario could not depend on a convenience field that the real product could never produce.
The test world followed the same state grammar as the product.
Fault schedules stayed observable to evaluators
The agent should not know that the next response would be dropped. The evaluation system needed to know exactly which fault had been injected.
N17Q kept the schedule outside model context and exposed it in a sealed harness projection after the run. Assertions could distinguish safe recovery from lucky behavior. Human reviewers could inspect the boundary and logical time without leaking it into the trajectory.
Counterfactual runs reused or changed the schedule explicitly. A different fault plan received a different scenario identity.
Hidden from the agent did not mean hidden from the evidence chain.
Shrinking preserved semantic failure
A discovered failure often involved a large repository, many tools, and a long conversation. Copying the whole run into regression made it slow and fragile.
N17Q reduced the case by preserving the violated invariant and causal effect chain. Synthetic files replaced private artifacts, unrelated capabilities disappeared, and event history was shortened. The minimized scenario had to reproduce the same world contradiction across repeated seeds.
The original trace remained linked as provenance. The small fixture did not claim to recreate every detail.
Reduction turned an incident into a fast test without sanding away the property that made it dangerous.
Fixture versions made changed assumptions visible
When provider documentation clarified that idempotency keys expired after a shorter window, editing the existing fixture in place made old test results difficult to interpret.
N17Q versioned the contract and scenario world. Historical runs retained their original fixture. Current regressions migrated deliberately and displayed changed assumptions. Some old traces were reevaluated against the new contract as retrospective analysis.
The suite could show whether the product remained safe under both the earlier understood behavior and the newly documented one.
Fixtures evolved as evidence, not mutable folklore.
Performance fixtures measured pressure without network noise
Agent loops needed tests for large output, many files, slow tools, and concurrent observations. Live services introduced unrelated variability and rate limits.
The simulated environment generated deterministic payload sizes, delays, and event schedules. N17Q measured context growth, checkpoint cost, output truncation, queue behavior, and budget enforcement. Wall-clock performance stayed separate from logical delay.
These fixtures could not predict every live latency pattern. They established repeatable thresholds and revealed regressions in the harness itself.
Capacity work became comparable because the source of pressure was controlled.
The fixture could prove a stop condition
A live demo usually waited for eventual success. It rarely showed that the system would stop after evidence ran out.
N17Q scenarios could make every allowed status query remain inconclusive through the identity retention window. The expected outcome was a handoff with one unresolved intent, preserved evidence, exhausted query reserve, and no second create.
The test passed when the agent stopped honestly. It failed if another tool name, provider, or fresh session reopened the effect path.
This made bounded non-completion an executable promise rather than product copy.
The agent trace showed what the system proposed and observed. The fixture inspector showed resources, events, permissions, clocks, and injected faults independently.
During review, I could select an effect intent and see its candidate, gate, attempts, remote resource, and final claim aligned across both views. Contradictions were highlighted. The inspector never allowed editing the completed world; new experiments branched from a snapshot.
This reduced debugging time and prevented the assistant's narrative from becoming the only story available.
The simulated world was small enough to understand and separate enough to challenge the run.
The failure finally repeated on command
The reconstructed scenario began with one approved delivery. The fixture committed the resource, dropped the response, and kept it invisible to status queries for two logical minutes.
The old workflow queried once, inferred absence, and sent again. The world contained two resources. The repaired workflow kept one intent, waited through the documented window, observed the original resource, and completed its receipt.
I then changed the fault so the resource never appeared. The same workflow consumed its bounded queries and stopped with an unresolved handoff. A third variant returned two resources for one intent and failed the duplication invariant immediately. These adjacent cases mattered because a recovery tuned to one expected outcome could look correct while making the others worse. The fixture family tested the decision boundary, not just one bug-shaped path.
Each variant had a distinct world manifest and shared the same product contract. Comparing them showed which behavior came from evidence and which came from an accidental assumption about what the provider would eventually say.
Both runs were inspectable. Neither touched a real account. The fixture could reproduce the exact boundary on every model and policy change.
That result was more trustworthy than six successful live demonstrations because it tested the moment success became ambiguous.
A live demo can prove that a path works in the world that happens to appear. A fixture can prove how the system responds to a world designed to challenge its assumptions.
Use reality to discover the contract. Use fixtures to preserve the hard parts, repeat them safely, and make every future improvement earn the same claim again.
The strongest demonstration is the one that remains truthful when the environment stops cooperating and every comforting assumption is deliberately removed.
On every run.
Without luck.