Most agent failures that matter are not boolean. A coding agent can open a pull request that compiles, passes tests and still misses half the ticket, because an agent can pass a suite by editing the tests or by writing assertions that check nothing: a weakened assertion like toBeDefined() in place of toHaveLength(2) is exactly the failure mode review checklists are built to catch in the SpecStory review checklist. Research on AI-generated tests points the same way: a suite can reach roughly 85% coverage while killing only 57.3% of injected mutants, so most single-fault bugs went undetected in the Nimble Approach mutation experiment.
The security literature gives you the scale of the problem. One evaluation of code from five models found that almost half of the generated snippets contained bugs that were often impactful in the CSET report, and a widely cited analysis puts 45% of AI code with security flaws and 62% with design flaws or vulnerabilities per Security Journey. None of these are expressible as a single assert. "The endpoint validates input at the boundary and does not leak internal error details" is a judgment, not a string comparison.
So the decision rule is: if you can write an assert, write the assert. Reserve rubrics for output where several correct answers exist, where the quality dimension is tonal, structural or strategic, or where the harm comes from omission (a missing access check, a skipped validation step) rather than from a wrong value. Google's reviewer guidance is a useful frame here: the reviewer asks whether a change improves overall code health, not whether it is perfect in Google's review standard. That is inherently a graded judgment, which is why a rubric maps onto it better than a boolean.



