Two layers. One clear priority.
Goal Loop manages workflow reliability. OpenJev provides a typed semantic decision layer. Deterministic invariants always take priority over model judgments.
Check what code already knows.
- A required item is still TODO or IN_PROGRESS.
- A DONE claim has no supporting evidence.
- A BLOCKED claim has no blocker evidence.
- Required validation has not run.
These conditions prevent completion. A failed hard gate short-circuits the semantic call.
Ask narrow questions about uncertainty.
Noul— Is a requirement likely missing?Noul— Does the evidence support the claim?Choice— Which recovery branch is appropriate?Score— How risky would premature completion be?
These judgments help route the next action. They do not override Layer A.
Start with a deterministic gate.
from openjev import DeterministicGate
gate = DeterministicGate(
name="tests-must-pass",
predicate=lambda state, questions: state.get("tests") == "PASS",
failure_reason="required tests have not passed",
)Make decisions inspectable.
The integration accepts a plain OpenJev engine or the adaptive runtime. With adaptive routing, the audit result records routing reasons under semantic.routing.
Audit events can retain privacy-hashed payloads in tamper-evident JSONL. Hashing is not a substitute for deciding what data is safe to record.
Read the integration contract ↗