commit 980f239afbc2cc2986b7d391042ce5c6233e209d
parent 1a39d81b44a5b41fcd18f70d549e05aef75457ce
Author: triesap <tyson@radroots.org>
Date: Mon, 21 Sep 2026 13:48:27 +0000
core: validate interpretation source context
Diffstat:
2 files changed, 76 insertions(+), 1 deletion(-)
diff --git a/src/hyf_application/context.mojo b/src/hyf_application/context.mojo
@@ -0,0 +1,54 @@
+
+
+@fieldwise_init
+struct InterpretationSource(Copyable, Movable):
+ var source_id: String
+ var revision: String
+ var text: String
+ var source_time: String
+ var timezone: String
+ var actor_id: String
+ var farm_id: String
+
+
+def _is_blank(value: String) -> Bool:
+ return String(value).strip().byte_length() == 0
+
+
+def interpretation_source(
+ source_id: String,
+ revision: String,
+ text: String,
+ source_time: String,
+ timezone: String,
+ actor_id: String,
+ farm_id: String,
+) raises -> InterpretationSource:
+ for pair in [
+ ("source_id", source_id),
+ ("revision", revision),
+ ("text", text),
+ ("source_time", source_time),
+ ("timezone", timezone),
+ ("actor_id", actor_id),
+ ("farm_id", farm_id),
+ ]:
+ if _is_blank(pair[1]):
+ raise Error("interpretation source requires " + pair[0])
+ return InterpretationSource(
+ source_id=String(source_id),
+ revision=String(revision),
+ text=String(text),
+ source_time=String(source_time),
+ timezone=String(timezone),
+ actor_id=String(actor_id),
+ farm_id=String(farm_id),
+ )
+
+
+def context_is_trusted_host_supplied() -> Bool:
+ return True
+
+
+def source_text_is_data_not_instruction() -> Bool:
+ return True
diff --git a/tests/test_application.mojo b/tests/test_application.mojo
@@ -1,4 +1,4 @@
-from std.testing import TestSuite, assert_true, assert_equal
+from std.testing import TestSuite, assert_true, assert_equal, assert_raises
from hyf_application.orchestration import (
application_layer_owns_business_state,
@@ -19,3 +19,24 @@ def test_application_layer_is_transport_independent() raises:
def main() raises:
TestSuite.discover_tests[__functions_in_module()]().run()
+
+
+from hyf_application.context import (
+ context_is_trusted_host_supplied,
+ interpretation_source,
+ source_text_is_data_not_instruction,
+)
+
+
+def test_interpretation_source_context_validation() raises:
+ var source = interpretation_source(
+ "farm-source-1", "r1", "Got about 80 lb of Roma tomatoes.",
+ "2026-09-21T09:00:00-07:00", "America/Vancouver", "farm-1", "farm-1",
+ )
+ assert_equal(source.revision, "r1")
+ assert_true(context_is_trusted_host_supplied())
+ assert_true(source_text_is_data_not_instruction())
+ with assert_raises():
+ _ = interpretation_source("", "r1", "x", "t", "z", "a", "f")
+ with assert_raises():
+ _ = interpretation_source("s", "r1", "x", "t", "", "a", "f")