From fe663deef507dd7c9c7c3418092e3b3cbb540633 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Wed, 1 Jul 2026 09:38:03 +0000 Subject: [PATCH] =?UTF-8?q?Leave=20a=20genuine=20(non-party-ceiling)=20roo?= =?UTF-8?q?f=20description=20to=20the=20LLM=20classifier=20=F0=9F=9F=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- .../epc/test_roof_party_ceiling_guard.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/domain/epc/test_roof_party_ceiling_guard.py b/tests/domain/epc/test_roof_party_ceiling_guard.py index 9152b655e..8ac91add4 100644 --- a/tests/domain/epc/test_roof_party_ceiling_guard.py +++ b/tests/domain/epc/test_roof_party_ceiling_guard.py @@ -40,3 +40,23 @@ def test_every_party_ceiling_marker_variant_resolves_to_its_member( # Assert assert result is expected + + +@pytest.mark.parametrize( + "description", + [ + "pitched, normal loft access: 100mm", + "flat: 150mm", + "pitched with sloping ceiling: unknown", + "roof room(s), insulated", + ], +) +def test_a_genuine_roof_description_is_left_to_the_llm(description: str) -> None: + # A non-party-ceiling roof must return None so the LLM classifier still + # resolves it — the guard only claims the markers it is certain about. + + # Act + result = roof_party_ceiling_guard(description) + + # Assert + assert result is None