Ready and blocked are derived, never stored.
The snapshot keeps one lifecycle value per node. ready and blocked are recomputed from the graph on every read, so a reported status cannot drift away from the work behind it.
| blocker kind | satisfied when |
|---|---|
| task | done or archived |
| gate | resolved, or superseded by a resolved gate |
| knowledge | never |
| missing node or cycle | never |
submitted waits for validation. It never satisfies a blocker, no matter how long the review takes.