hyf

Context-aware query service for Radroots
git clone https://radroots.dev/git/hyf.git
Log | Files | Refs | README | LICENSE

commit 91a45f720d9c6f33a64faefa61e5fcd125450fc2
parent 9b47d5de2801761e0ea1547ca34d8a7c0a580a37
Author: triesap <tyson@radroots.org>
Date:   Mon, 21 Sep 2026 13:51:37 +0000

core: detect contradictory buyer requirements

Diffstat:
Asrc/hyf_application/buyer_contradictions.mojo | 34++++++++++++++++++++++++++++++++++
Mtests/test_application.mojo | 21+++++++++++++++++++++
2 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/src/hyf_application/buyer_contradictions.mojo b/src/hyf_application/buyer_contradictions.mojo @@ -0,0 +1,34 @@ +from std.collections import List + +from hyf_core.domain.demand import Condition + + +def detect_contradictions(conditions: List[Condition]) -> List[String]: + var contradictions = List[String]() + for required in conditions: + if required.strength != "mandatory": + continue + for excluded in conditions: + if excluded.strength != "excluded": + continue + if required.kind != excluded.kind: + continue + var required_value = "" + if required.value: + required_value = required.value.value() + var excluded_value = "" + if excluded.value: + excluded_value = excluded.value.value() + if required_value == excluded_value and required_value != "": + var token = "contradiction:" + required.kind + var seen = False + for existing in contradictions: + if existing == token: + seen = True + if not seen: + contradictions.append(String(token)) + return contradictions^ + + +def contradictions_are_visible() -> Bool: + return True diff --git a/tests/test_application.mojo b/tests/test_application.mojo @@ -262,3 +262,24 @@ def test_buyer_quantity_and_price_normalization() raises: assert_true(not price_is_known(price)) assert_true(not unknown_price_is_free()) assert_true(not unsupported_conversion_is_zero()) + + +from hyf_application.buyer_contradictions import ( + contradictions_are_visible, + detect_contradictions, +) +from hyf_core.domain.demand import Condition, condition + + +def test_buyer_contradiction_detection() raises: + var conditions = List[Condition]() + conditions.append(condition("fulfillment", "mandatory", Optional[String]("delivery"))) + conditions.append(condition("fulfillment", "excluded", Optional[String]("delivery"))) + var contradictions = detect_contradictions(conditions) + assert_equal(len(contradictions), 1) + assert_true(contradictions_are_visible()) + + var clean = List[Condition]() + clean.append(condition("fulfillment", "mandatory", Optional[String]("delivery"))) + clean.append(condition("fulfillment", "excluded", Optional[String]("pickup"))) + assert_equal(len(detect_contradictions(clean)), 0)