Negative controls
A fail-closed assertion observed only passing can be vacuous: the test may always pass, never execute the guard, or inspect the wrong boundary. UAR pairs a fail-closed result with a deliberate control that is observed to fail.
The five-part record
- Name the failure the requirement must reject.
- Make one bounded inversion that should expose that failure.
- Run the same assertion and retain its non-zero result and relevant output.
- Perform exact restoration and prove the source/fixture returned to its original state.
- Rerun the affected positive assertion and retain the passing result.
Examples include disabling registered-claim validation, collapsing tenant keys, removing a provider feature, allowing a stale lockfile, or weakening a documentation privacy rule. The mutation must target the actual boundary. A different test that happens to fail is not the negative control.
When it is required
Use a paired control for a fail-closed security rule, denial boundary, guard, validator, reconciliation safety rule, or claim whose credibility depends on detecting absence. Do not manufacture a negative control for every ordinary positive test; the control should name a plausible defect, not add ceremony.
Safety
Prefer isolated fixtures or a scratch worktree. If source inversion is necessary, capture the pre-inversion diff, modify the minimum span, run only the affected assertion, restore exactly, compare the diff, and rerun the positive path. Never leave the inverted guard in a commit.
Reporting limit
The control proves sensitivity to the named mutation. It does not prove the absence of every bypass, another profile, or production deployment. Retain that limit in the verification row.