criteria: list[CriterionEval] = Field(
description='Per-criterion verdicts: exactly one entry for every criterion in the rubric,
in rubric order. A verdict that does not account for the whole rubric is not usable,
so never omit criteria or collapse several into one. Each entry carries `passed` True/False,
plus a `gap` string when failing.'
)