RUNTIME
Projection and traversal at runtime
RuntimeBinding links SemanticMap to the current state; ThinkingMapTraversal checks local moves and emits an inspectable result.
Operational sequence
- 1.Load the domain structure.
- 2.Bind the current state, role, and evidence.
- 3.Project only local candidates.
- 4.Check gates, TTL, and loop bounds.
- 5.Return a typed result.
semantic_map + runtime_binding
↓
local decision slice
↓
deterministic guard check
↓
typed traversal outcomeThree doors, not one
“Run a step” does not mean a single call. There are three of them, with different degrees of freedom. step() is the broad, operational path — it can return all 9 live outcomes. attempt_transition(), which actually performs an already announced move, is narrower: ABSTAIN, COLLECT_EVIDENCE, CONTINUE, ESCALATE, or REVISE_PLAN. attempt_bridge() — the move between contexts — is the tightest of all: it first checks a fidelity contract (a replacement license against the risk level), and only if that is satisfied does the state change. Without the license, at high risk, the result is ESCALATE, not a silent error.
What the model actually reads
The model does not receive a story — it receives a slice(): the proposed move, the gate decision, available and missing evidence, roles, a can_fire boolean, the exact reasons the move cannot fire (“blockers”), and a response contract that the model must fill in itself — claim, domain, base, what it may say, what it may not, and to whom. The system computes the structural part. The model contributes only the language part.
One detail that matters if you actually read the JSON: gate.decision is not the Python enum name, it is its value — GateDecision.ABSTAIN reaches the model as the string "insufficient", DEGRADE as "partial". The model always reads the serialized string, never the internal name.