The three outcomes a clash run can report, distinguished by rule coverage
rather than by clash count — zero clashes is a legitimate result (clean)
and must be told apart from zero because the matrix never had anything to
test (no-match):
clean: every rule matched elements on both sides; zero clashes (if
any) is a real "checked and found nothing".
partial: at least one rule matched, but at least one other rule in
the set matched nothing on one of its sides.
no-match: every single rule matched nothing on at least one side — the
matrix ran zero real comparisons, and any "0 clashes" is
meaningless. Distinct from unknown (no coverage data) so a
caller can render "the matrix didn't apply to this model" as
a loud, first-class state.
unknown: no coverage data was supplied (e.g. an older result, or a
hand-built fixture) — callers should fall back to
presenting the summary count alone.
The three outcomes a clash run can report, distinguished by rule coverage rather than by clash count — zero clashes is a legitimate result (
clean) and must be told apart from zero because the matrix never had anything to test (no-match):clean: every rule matched elements on both sides; zero clashes (if any) is a real "checked and found nothing".partial: at least one rule matched, but at least one other rule in the set matched nothing on one of its sides.no-match: every single rule matched nothing on at least one side — the matrix ran zero real comparisons, and any "0 clashes" is meaningless. Distinct fromunknown(no coverage data) so a caller can render "the matrix didn't apply to this model" as a loud, first-class state.unknown: no coverage data was supplied (e.g. an older result, or a hand-built fixture) — callers should fall back to presenting the summary count alone.