To test whether an AI agent guardrail is still working, run your labelled corpus twice: once as built, once with the gate replaced by a pass-through. ablation_probe.py sorts each bad input into LOAD_BEARING , SHADOWED or MISSED , and exits 1 when no verdict moved. A rejection shows that something said no. It does not show that the gate did. Here is the shape of the problem. You have a policy gate. You wrote a fixture that it is supposed to reject. CI runs the fixture, the pipeline says ...