Why a ticket is not being dispatched right now. One pure decision used by
the dispatcher’s gates and reported verbatim by the list verb, so the
operator sees exactly what the scheduler saw.
Flow definitions and the pure walk over them. Parsing turns a committed
YAML file into a validated Flow; next_step then turns a flow and the
evidence gathered so far into the next stage to run or a terminal
reading. Neither half touches a clock, a process, or the store, so
policy can be tested without a daemon.
Outcome derivation. Evidence in, verdict out: this module is the only
place a run’s terminal outcome is decided, and it is pure so policy can
be tested without a daemon, a process, or a repository.
Human rendering of response envelopes. JSON envelopes remain the internal
and --json representation; this module is a one-way translation applied
at the final write, so the socket API and agent-facing output are
unaffected by presentation changes here.
Per-run NDJSON output capture. Agent and aftercare stdout/stderr are
untrusted evidence: they are stored as ordered chunks, never parsed as
lines and never routed through the dispatcher.
Authored ticket and flow definitions live in sources. Sloop borrows them
into its derived index: post validates a Markdown push against its author,
while pull keeps invalid tickets visible and held when they are upserted.