Fix audit finding F03: Comparability validation in DeterministicComparator and BatchMultiQueryComparator.
Recorded from user prompt in conversation 78d87a8b-d52c-4b44-b8f5-077656700b95.
src/data2dsl_comparator.py_is_compatible(query, obs) method validating:
obs.subject == query.subject (actor, repository)obs.metric == query.metric (id, value_kind)obs.window == query.window (start, end)obs.query_id == query.query_id (if present)compare(), if either observation fails compatibility, outcome is strictly set to UNEVALUABLE and delta is None.src/data2dsl_batch.py(repository, actor, metric_id) in addition to query_id.state: "MISSING" observation objects; passes None directly to comparator so MISSING_LEFT / MISSING_RIGHT are computed accurately._format_val, _format_delta) to handle sets, strings, missing values without AttributeError.tests/test_comparator_comparability.pypytest tests/test_comparator_comparability.py: 8/8 passed.