Files
rune/tests/test_orchestration_reflex.py
T

37 lines
1.2 KiB
Python

"""Deterministic reflex layer over events."""
from rune.orchestration.reflex import CountReflex, ReflexEngine
def test_reflex_accumulates_deterministic_facts():
engine = ReflexEngine(CountReflex("turns"))
engine.process({"event_type": "user.message"})
engine.process({"event_type": "user.message"})
engine.process({"event_type": "tool.result"})
assert engine.facts() == {"turns": 2}
def test_reflex_does_not_reinterpret_intent():
engine = ReflexEngine(CountReflex("turns"))
engine.process({"event_type": "work.requested", "unit": "b1"})
assert engine.facts() == {"turns": 1} # counts events, never judges outcomes
def test_facts_returns_a_copy():
engine = ReflexEngine(CountReflex("turns"))
engine.process({"event_type": "x"})
facts = engine.facts()
facts["turns"] = 99
assert engine.facts() == {"turns": 1}
def test_custom_handler_can_emit_availability():
def handler(state: dict, event: dict) -> dict:
if event.get("event_type") == "health.report":
state[event["resource"]] = event["ok"]
return state
engine = ReflexEngine(handler)
engine.process({"event_type": "health.report", "resource": "ollama", "ok": True})
assert engine.facts() == {"ollama": True}