commit b10c6d6cafbb8c7ff809061fca0e4d1e402fcd79
parent c8f9ac70c10489931a8f8aab584498ba776523b3
Author: triesap <tyson@radroots.org>
Date: Mon, 21 Sep 2026 13:56:29 +0000
core: gate semantic suitability on sufficient evidence
Diffstat:
2 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/src/hyf_application/match_semantic.mojo b/src/hyf_application/match_semantic.mojo
@@ -0,0 +1,21 @@
+from hyf_core.domain.eligibility import ConstraintAssessment, constraint_assessment
+
+
+def evidence_sufficient(evidence_count: Int, required: Int) -> Bool:
+ return evidence_count >= required
+
+
+def gated_semantic_suitability(
+ score: Int, evidence_count: Int, required_evidence: Int
+) raises -> ConstraintAssessment:
+ if not evidence_sufficient(evidence_count, required_evidence):
+ return constraint_assessment(
+ "suitability", "unknown", True, "evidence_insufficient"
+ )
+ return constraint_assessment(
+ "suitability", "pass", True, "evidence_sufficient"
+ )
+
+
+def unknown_evidence_is_midpoint_score() -> Bool:
+ return False
diff --git a/tests/test_application.mojo b/tests/test_application.mojo
@@ -611,3 +611,18 @@ def test_alternative_plans_and_planner_limitations() raises:
assert_true(not offer.alternatives_are_simultaneous)
assert_equal(len(offer.unsupported), 1)
assert_true(not unsupported_mode_means_no_supply())
+
+
+from hyf_application.match_semantic import (
+ evidence_sufficient,
+ gated_semantic_suitability,
+ unknown_evidence_is_midpoint_score,
+)
+
+
+def test_semantic_suitability_gated_on_evidence() raises:
+ assert_true(evidence_sufficient(2, 1))
+ assert_equal(gated_semantic_suitability(3, 2, 1).result, "pass")
+ assert_equal(gated_semantic_suitability(3, 0, 1).result, "unknown")
+ assert_equal(gated_semantic_suitability(3, 0, 1).reason, "evidence_insufficient")
+ assert_true(not unknown_evidence_is_midpoint_score())