commit 5ca022a2b048407ff83d95744bfb3e385399aca4
parent 227654841815d85493ee5b1dd7aae9fa80639d54
Author: triesap <tyson@radroots.org>
Date: Mon, 21 Sep 2026 13:57:29 +0000
core: generate evidence-backed match explanations
Diffstat:
2 files changed, 54 insertions(+), 0 deletions(-)
diff --git a/src/hyf_application/match_explain.mojo b/src/hyf_application/match_explain.mojo
@@ -0,0 +1,34 @@
+from std.collections import List
+
+
+def match_explanation(
+ supplier_id: String, lines_covered: List[String], scope: String
+) -> String:
+ var covered = ""
+ var first = True
+ for line in lines_covered:
+ if not first:
+ covered += ", "
+ covered += line
+ first = False
+ return (
+ "Supplier "
+ + supplier_id
+ + " covers lines ["
+ + covered
+ + "] within scope "
+ + scope
+ + ". This is a suggestion within the supplied records, not a reservation."
+ )
+
+
+def explanation_reveals_private_source() -> Bool:
+ return False
+
+
+def explanation_claims_reservation() -> Bool:
+ return False
+
+
+def explanation_claims_global_availability() -> Bool:
+ return False
diff --git a/tests/test_application.mojo b/tests/test_application.mojo
@@ -692,3 +692,23 @@ def test_deterministic_ranking_and_tie_breaks() raises:
assert_equal(ranked[0].plan_id, "plan-a")
assert_equal(ranked[1].plan_id, "plan-b")
assert_true(ranking_is_order_independent())
+
+
+from hyf_application.match_explain import (
+ explanation_claims_global_availability,
+ explanation_claims_reservation,
+ explanation_reveals_private_source,
+ match_explanation,
+)
+
+
+def test_evidence_backed_match_explanations() raises:
+ var lines = List[String]()
+ lines.append("line-1")
+ var text = match_explanation("farm-1", lines, "supplied_only")
+ assert_true(text.find("farm-1") >= 0)
+ assert_true(text.find("line-1") >= 0)
+ assert_true(text.find("not a reservation") >= 0)
+ assert_true(not explanation_reveals_private_source())
+ assert_true(not explanation_claims_reservation())
+ assert_true(not explanation_claims_global_availability())