From 6befaa7be74c5656768eb63e811b4bcc033eba0f Mon Sep 17 00:00:00 2001 From: Simon Axelsson Date: Mon, 7 Sep 2026 19:50:02 +0200 Subject: [PATCH] =?UTF-8?q?test(er):=20resolv-determinism=20=E2=80=94=20ma?= =?UTF-8?q?tch-pairs=20beh=C3=B6ver=20hard-rule=20decided=5Fby?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _apply_matches ignorerar medvetet decided_by=score (defence in depth: score/fuzzy får aldrig skapa canonical identity-länkar) — testernas stub-bridge returnerade score-pairs och förväntade ändå merge → CI-fail var implementationen som hade rätt. Pairs är nu decided_by=stable-identifiers.v3. Verifierat: pytest services/api/tests 6+14 pass, full unit 945/945, typecheck EXIT 0, real-Postgres 5/5. --- services/api/tests/test_resolve_determinism.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/services/api/tests/test_resolve_determinism.py b/services/api/tests/test_resolve_determinism.py index 0a522f9..fa2bc7a 100644 --- a/services/api/tests/test_resolve_determinism.py +++ b/services/api/tests/test_resolve_determinism.py @@ -70,7 +70,12 @@ async def test_canonical_match_merges_and_stamps_provenance(monkeypatch): assert body["tenant_id"] == "tenant-a" assert body["blocking_fields"] == ["market", "block_initial"] a, b = body["records"][0]["record_id"], body["records"][1]["record_id"] - return httpx.Response(200, json={"pairs": [_pair(a, b)], "review_queue": []}) + # Endast hard-rule-beslut (decided_by != score/None) far skapa en + # canonical identity-lank - consumenten ignorerar medvetet score/"match". + return httpx.Response( + 200, + json={"pairs": [_pair(a, b, "match", "0pt.company.stable-identifiers.v3", 0.99)], "review_queue": []}, + ) route.side_effect = responder result = await resolve(records, tenant_id="tenant-a", project_id="project-a") @@ -123,8 +128,8 @@ async def test_hard_non_match_blocks_transitive_cluster_merge(monkeypatch): 200, json={ "pairs": [ - _pair(a, b, "match", "score", 0.98), - _pair(b, c, "match", "score", 0.97), + _pair(a, b, "match", "0pt.company.stable-identifiers.v3", 0.98), + _pair(b, c, "match", "0pt.company.stable-identifiers.v3", 0.97), _pair(a, c, "non_match", "0pt.company.stable-identifiers.v2", 0.0), ], "review_queue": [],