Today the active state in state.json is an arbitrary string and transitions are prose. Kernel must own legal transitions ("agents propose; the kernel disposes" — ADR 0001).
Scope:
- Canonical intermediate-state enum + legal-transition table in the kernel.
- Validation in contract.py (doctor) + enforcement in emit writers.
- ISO-8601 UTC timestamps stamped by state/terminal writers (roadmap: normalize IDs and timestamps).
- Deterministic reducer lands with the EventStore issue; this issue covers the FSM definition + validator.
Today the active state in state.json is an arbitrary string and transitions are prose. Kernel must own legal transitions ("agents propose; the kernel disposes" — ADR 0001).
Scope: