Core concepts
ControlManager — one control cycle
input schema → candidates → router proposal → validate → execute → guards / transitions → commit → AuditRecord.What it guarantees
Proposal is not permission — validators and the transition table decide. Exactly one current state; at most one atomic commit per plan step. Fail-closed before commit. Fallback is isolated. Every cycle emits an AuditRecord.
- With backend credentials, the backend owns candidate selection, routing, plan validation, and commits.
- The client defines the graph, runs local handlers, and submits results.
- A rejection is normal: result.rejected is set; nothing committed for that step.
Python SDKpython
manager = ControlManager(graph, tools=registry)
result = manager.run(RunRequest(input={"text": "refund my order"}, state={...}))
# or: result = fsm.run(EntryModel(...), state={...}, client=client)
print(result.final_state)
print(result.audit.committed_transitions)Grounded in neosyntropy-framework/docs/concepts-explained.md §11.