Problem
The validation_failed agent event is emitted from the HallucinationGuard.validate() path, which the executor does not use. Across the frozen 30-task ablation benchmark (54 task runs, hundreds of LLM calls) the event fired 0 times, despite the guard running on every file write.
Impact
There is no telemetry answering "is the guard actually catching anything?" — which is precisely the question any effectiveness benchmark (or user) needs.
Fix
Emit validation_failed (with check type, path, and blocking reason) from the executor's validation path, so interceptions are countable. Relates to #386.
Problem
The
validation_failedagent event is emitted from theHallucinationGuard.validate()path, which the executor does not use. Across the frozen 30-task ablation benchmark (54 task runs, hundreds of LLM calls) the event fired 0 times, despite the guard running on every file write.Impact
There is no telemetry answering "is the guard actually catching anything?" — which is precisely the question any effectiveness benchmark (or user) needs.
Fix
Emit
validation_failed(with check type, path, and blocking reason) from the executor's validation path, so interceptions are countable. Relates to #386.