fix(kg): reject partial ISO dates to avoid silent empty result sets

Per qodo-ai review on PR #1167: sanitize_iso_date() previously accepted
YYYY and YYYY-MM, but KnowledgeGraph.query_entity() compares valid_from/
valid_to TEXT columns lexicographically against as_of. Lexicographic
comparison treats '2026-01-01' as greater than '2026' (because '-' >
end-of-string), so partial as_of values silently excluded valid facts —
re-introducing the silent-empty-results problem this PR was meant to
fix.

Tighten _ISO_DATE_RE to require YYYY-MM-DD only. Update docstring and
error message accordingly. Invert the two test cases that asserted
partials were accepted.
This commit is contained in:
Arnold Wender
2026-04-26 12:50:43 +02:00
parent 4d98b05240
commit abe85763d4
3 changed files with 30 additions and 15 deletions
+8 -4
View File
@@ -223,12 +223,16 @@ def test_kg_value_rejects_over_length():
# --- sanitize_iso_date ---
def test_iso_date_accepts_year_only():
assert sanitize_iso_date("2026") == "2026"
def test_iso_date_rejects_year_only():
# Partial dates re-introduce silent empty result sets via lexicographic
# TEXT comparison in KG queries (e.g. "2026-01-01" <= "2026" is False).
with pytest.raises(ValueError):
sanitize_iso_date("2026")
def test_iso_date_accepts_year_month():
assert sanitize_iso_date("2026-03") == "2026-03"
def test_iso_date_rejects_year_month():
with pytest.raises(ValueError):
sanitize_iso_date("2026-03")
def test_iso_date_accepts_full_date():