hyf

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

commit 33c49c17a57ea7bdc05b87861a84060967099f0c
parent ba5cbccf7c9c3e36e1d3eda54f358f9354617c91
Author: triesap <tyson@radroots.org>
Date:   Mon, 21 Sep 2026 14:03:53 +0000

core: add the farm review-confirmation journey

Diffstat:
Mpixi.toml | 2++
Asrc/hyf_application/authority_sim.mojo | 39+++++++++++++++++++++++++++++++++++++++
Atests/test_journeys.mojo | 39+++++++++++++++++++++++++++++++++++++++
3 files changed, 80 insertions(+), 0 deletions(-)

diff --git a/pixi.toml b/pixi.toml @@ -29,6 +29,7 @@ test-assist = "mojo -I src -I tests tests/test_assist.mojo" test-jev = "mojo -I src -I tests tests/test_jev.mojo" test-application = "mojo -I src -I tests tests/test_application.mojo" test-stdio-session = "mojo -I src -I tests tests/test_persistent_stdio.mojo" +test-journeys = "mojo -I src -I tests tests/test_journeys.mojo" test-spec = "mojo -I src -I tests tests/test_traceability.mojo" check-build = "mkdir -p .pixi/build && mojo build -I src src/main.mojo -o .pixi/build/hyfd" check-format = "sh tools/check_format.sh" @@ -46,6 +47,7 @@ test = { depends-on = [ "test-jev", "test-application", "test-stdio-session", + "test-journeys", "test-provider-adapter", "test-spec", "test-architecture", diff --git a/src/hyf_application/authority_sim.mojo b/src/hyf_application/authority_sim.mojo @@ -0,0 +1,39 @@ +from std.collections import List + + +@fieldwise_init +struct AuthoritySimulation(Copyable, Movable): + var accepted_changes: Int + var requires_confirmation: Bool + var applied_revisions: List[String] + var duplicate_rejections: Int + var stale_rejections: Int + var hyf_business_writes: Int + + +def new_authority_simulation() -> AuthoritySimulation: + return AuthoritySimulation( + accepted_changes=0, + requires_confirmation=True, + applied_revisions=List[String](), + duplicate_rejections=0, + stale_rejections=0, + hyf_business_writes=0, + ) + + +def apply_expected_version( + mut simulation: AuthoritySimulation, + source_revision: String, + expected_revision: String, + current_revision: String, +) raises: + if expected_revision != current_revision: + simulation.stale_rejections += 1 + raise Error("stale_acceptance") + for applied in simulation.applied_revisions: + if applied == source_revision: + simulation.duplicate_rejections += 1 + raise Error("duplicate_acceptance") + simulation.applied_revisions.append(String(source_revision)) + simulation.accepted_changes += 1 diff --git a/tests/test_journeys.mojo b/tests/test_journeys.mojo @@ -0,0 +1,39 @@ +from std.testing import TestSuite, assert_equal, assert_true, assert_raises +from std.collections import List + +from hyf_application.authority_sim import ( + apply_expected_version, + new_authority_simulation, +) +from hyf_application.farm_clarification import apply_farm_clarification +from hyf_application.farm_operation import execute_farm_update_interpret +from json import loads as _loads + + +def test_farm_review_confirmation_journey_keeps_mutation_outside_hyf() raises: + var input = _loads( + '{"source":{"source_id":"s1","revision":"r1","text":"About 80 lb tomatoes. Basil sold out.",' + '"source_time":"2026-09-21T09:00:00-07:00","timezone":"America/Vancouver",' + '"actor_id":"farm-1","farm_id":"farm-1"}}' + ) + var interpretation = execute_farm_update_interpret(input) + assert_true(interpretation["review"]["required"].bool_value()) + assert_true(interpretation["original_source_preserved"].bool_value()) + assert_equal(interpretation["execution"]["status"].string_value(), "complete") + + var refined = apply_farm_clarification( + "80", "quantity.unreserved", "s1", "r2", "60 lb unreserved", "60" + ) + assert_equal(refined.value.value(), "60") + + var simulation = new_authority_simulation() + assert_true(simulation.requires_confirmation) + apply_expected_version(simulation, "s1", "r1", "r1") + assert_equal(simulation.accepted_changes, 1) + with assert_raises(): + apply_expected_version(simulation, "s1", "r1", "r1") + assert_equal(simulation.duplicate_rejections, 1) + + +def main() raises: + TestSuite.discover_tests[__functions_in_module()]().run()