commit 23555ddef0959a68a6588c96753c2b68fb0aba5f
parent 5ca022a2b048407ff83d95744bfb3e385399aca4
Author: triesap <tyson@radroots.org>
Date: Mon, 21 Sep 2026 13:57:52 +0000
core: handle semantic-ranking failure without changing feasibility
Diffstat:
2 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/src/hyf_application/match_outage.mojo b/src/hyf_application/match_outage.mojo
@@ -0,0 +1,19 @@
+
+
+@fieldwise_init
+struct RankingOutcome(Copyable, Movable):
+ var feasibility: String
+ var advisory: String
+ var reason: String
+
+
+def ranking_outage(feasibility: String, reason: String) raises -> RankingOutcome:
+ if String(reason).strip().byte_length() == 0:
+ raise Error("ranking outage requires a reason")
+ return RankingOutcome(
+ feasibility=String(feasibility), advisory="degraded", reason=String(reason)
+ )
+
+
+def outage_changes_feasibility() -> Bool:
+ return False
diff --git a/tests/test_application.mojo b/tests/test_application.mojo
@@ -712,3 +712,21 @@ def test_evidence_backed_match_explanations() raises:
assert_true(not explanation_reveals_private_source())
assert_true(not explanation_claims_reservation())
assert_true(not explanation_claims_global_availability())
+
+
+from hyf_application.match_outage import (
+ RankingOutcome,
+ outage_changes_feasibility,
+ ranking_outage,
+)
+
+
+def test_semantic_ranking_failure_preserves_feasibility() raises:
+ var outcome = ranking_outage("eligible", "provider_degraded")
+ assert_equal(outcome.feasibility, "eligible")
+ assert_equal(outcome.advisory, "degraded")
+ var conditional = ranking_outage("conditional", "provider_unavailable")
+ assert_equal(conditional.feasibility, "conditional")
+ assert_true(not outage_changes_feasibility())
+ with assert_raises():
+ _ = ranking_outage("eligible", "")