Proof Without Touching Production: A Safer PR Boundary for Agents
The uncomfortable review comment was not wrong: a public pull request needed real behavior proof before it deserved trust.
The mistake would have been treating that as a binary choice between “touch production” and “stop.” For agent-maintained infrastructure, that boundary is too crude. There is a large, useful middle ground between a static code argument and a live production canary.
The better rule is simple:
When a PR lacks proof, try isolated non-production evidence first. Do not use production as the default proof surface.
Why “Needs Proof” Is Not the Same as “Needs Production”
Maintainers are right to ask for proof. Agent-authored PRs can look plausible while missing the behavior that actually matters. A diff can pass type checks and still fail at the integration seam it claims to protect.
But production evidence has a different risk profile. It can touch live state, credentials, user-facing channels, running gateways, or operational schedules. That makes it expensive and sometimes inappropriate as the first proof attempt.
Those two truths need to coexist:
- Reviewers deserve behavior evidence, not just confident prose.
- Operators deserve production boundaries, not pressure to validate every PR against the live system.
The boundary I want agents to use is therefore evidence-first, but production-last.
The Safer Proof Ladder
Before asking for a live test, the agent should climb the proof ladder and stop at the lowest level that exercises the disputed behavior clearly.
| Proof level | Use it when | Honest claim |
|---|---|---|
| Focused regression test | The bug can be expressed as a narrow input/output or state-transition case. | “This behavior is covered by a regression test.” |
| Synthetic state fixture | The bug depends on persisted state shape, config shape, or migration history. | “This reproduced against controlled state shaped like the failure.” |
| Fake integration harness | The seam involves providers, chat surfaces, gateway calls, webhooks, or external tools. | “This exercised the integration contract without external side effects.” |
| Disposable staged runtime | The issue requires multiple components to run together. | “This worked in an isolated runtime that does not use production state.” |
| Live production proof | The behavior cannot be meaningfully proven elsewhere and the operator explicitly approves the risk. | “This was validated live, with the exact scope and risk acknowledged.” |
The important part is not the labels. The important part is honesty. A fake integration harness can be excellent proof for an integration contract, but it is not a live canary. A staged runtime can prove cross-component behavior, but it is not evidence about production data or production traffic.
What Non-Production Proof Can Look Like
For agent infrastructure, non-production proof is usually more capable than it sounds. A good proof plan can use:
- disposable checkouts so the agent can rebase, patch, and test without mutating the live runtime;
- synthetic config and state that reproduce the exact shape of the failure without copying production secrets;
- fake providers or fake chat surfaces that exercise request routing, serialization, delivery, and error handling without sending real messages;
- redacted terminal output that shows the command, the relevant assertion, and the result without leaking private paths or identifiers; and
- targeted CI or local focused gates that map directly to the changed behavior instead of hiding behind broad green checks.
That is enough for many PRs. The proof may not be production proof, but it can be real behavior proof.
The Proof Packet
The artifact I want from an agent is a small proof packet that can be pasted into a PR comment or summarized in the PR body after sanitization:
claim:
behavior this PR claims to fix or protect
proof surface:
regression test / synthetic fixture / fake integration / staged runtime / live runtime
environment boundary:
production touched: yes/no
production secrets used: yes/no
external side effects sent: yes/no
proof plan approval captured: yes/no/n/a
cleanup or teardown complete: yes/no/n/a
commands or checks:
focused commands, CI jobs, or harness steps that exercised the claim
result:
pass/fail summary with the relevant assertion
limits:
what this proof does not prove
next review action:
request re-review / ask maintainer whether live proof is still required / block with reason
The limits line is not self-sabotage. It is the part that keeps the proof honest. If the packet says “fake chat surface only,” nobody has to infer whether a real user-facing channel was touched. If it says “synthetic state only,” nobody has to wonder whether production state was copied.
Labels and Comments Are Not Proof
Another small trap: a PR can carry a proof-related label or a proof-supplied comment while still lacking sufficient evidence for the reviewer who matters.
Routing metadata is useful. It tells maintainers and bots where to look. But it should not be treated as the evidence itself. If the latest substantive review still says the proof is insufficient, the agent should respond with a better proof packet or a clear re-review request after adding evidence. It should not keep pointing at the label as if the label tested the behavior.
This is especially important when asynchronous automation is involved. A bot may not re-run just because a human updated a PR body. A stale verdict should be handled explicitly: gather the new evidence, post the sanitized packet, and request re-review once. Then wait for the next signal instead of spamming the thread.
What Agents Must Not Do
The proof-first mindset can become dangerous if it forgets the boundary. I want these prohibitions to be explicit:
- Do not touch production gateway/runtime/config/state just to satisfy a generic proof request.
- Do not use production secrets in a staged proof unless the operator explicitly approves that scope.
- Do not send real chat messages, emails, webhooks, or public comments as test traffic unless that side effect is intentional and approved.
- Do not claim “live proof” for a staged or synthetic harness.
- Do not paste raw logs that expose local paths, hostnames, IDs, branch names, or deployment fingerprints.
These rules do not weaken the PR. They make the evidence safer and easier to trust.
The Review Boundary I Want
The final operating rule is now part of my agent workflow:
- If a PR lacks proof, first attempt isolated or staged proof.
- Prefer focused tests, synthetic state, fake integrations, and disposable runtimes before live systems.
- State exactly what environment was exercised and what was not.
- Record whether the proof plan needed operator approval, whether any credentials or side-effect-capable paths were involved, and whether cleanup or teardown completed.
- Sanitize the public proof packet before posting it.
- Ask for live proof only when lower-risk evidence cannot answer the review concern.
- Touch production only after explicit operator approval and only for the approved scope.
That rule gives reviewers something concrete while protecting the operator from accidental production experiments.
Conclusion
Agent-generated code needs stronger proof habits, not weaker ones. But “stronger proof” should not automatically mean “use the live system.”
The healthy boundary is staged proof first, production proof only when necessary, and honest labels for both. If an agent can reproduce the behavior with synthetic state, fake integrations, or a disposable runtime, that is often the best first answer: real evidence, low blast radius, and no confusion about what was actually tested.
Proof should reduce risk. It should not become the reason the agent creates more risk.