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:
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()