From e7aa7e28c14afe47c12bbeef6fa9c30af1e8cb19 Mon Sep 17 00:00:00 2001 From: ghzhost Date: Mon, 24 Aug 2026 00:59:37 +0000 Subject: [PATCH] fix(filters): use word-boundary matching for current_employers (#15) --- src/openjobradar/policy/filters.py | 16 ++++++---------- tests/test_hard_filters.py | 17 ++++++++++++++++- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/openjobradar/policy/filters.py b/src/openjobradar/policy/filters.py index 37902c7..0f93d2d 100644 --- a/src/openjobradar/policy/filters.py +++ b/src/openjobradar/policy/filters.py @@ -181,16 +181,12 @@ def evaluate_hard_filters(posting: Mapping[str, Any], profile: Mapping[str, Any] employers = hard_filters.get("current_employers") or [] normalized_org = _normalize(organization) for employer in employers: - if isinstance(employer, str) and normalized_org: - employer_norm = _normalize(employer) - if employer_norm and ( - employer_norm in normalized_org or normalized_org in employer_norm - ): - findings.append(( - "current_employer", "deny", - f"{employer.strip()!r} is your current employer.", - )) - break + if isinstance(employer, str) and normalized_org and _multi_phrase_hit(normalized_org, employer): + findings.append(( + "current_employer", "deny", + f"{employer.strip()!r} is your current employer.", + )) + break findings.extend(_list_finding( normalized_title, diff --git a/tests/test_hard_filters.py b/tests/test_hard_filters.py index 1145c1d..c101929 100644 --- a/tests/test_hard_filters.py +++ b/tests/test_hard_filters.py @@ -20,7 +20,22 @@ def test_no_sections_is_permissive() -> None: def test_current_employer_suppressed() -> None: profile = _profile(current_employers=["Example Health Co"]) verdict = evaluate_hard_filters( - {"title": "Director", "organization": "Example Health Corporation"}, profile + {"title": "Director", "organization": "Example Health Co, LLC"}, profile + ) + assert not verdict.allowed + assert verdict.rules == ("current_employer",) + + +def test_employer_word_boundary_no_false_positive() -> None: + profile = _profile(current_employers=["Meta"]) + assert evaluate_hard_filters( + {"title": "Senior Engineer", "organization": "Metabase, Inc."}, profile + ).allowed + assert evaluate_hard_filters( + {"title": "Senior Engineer", "organization": "MetaMind AI"}, profile + ).allowed + verdict = evaluate_hard_filters( + {"title": "Senior Engineer", "organization": "Meta, Inc."}, profile ) assert not verdict.allowed assert verdict.rules == ("current_employer",)