Rebuildable workflow-agent projection over one run-thread journal.
Dispatch completion is not treated as workflow progress here. A runnable is
applied only after the run thread records :runnable_applied, preserving the
durable ordering between dispatch results and workflow state transitions.
Summary
Types
@type anomaly() :: %{ :reason => atom(), :entry_type => atom(), optional(:child_run_id) => String.t(), optional(:component) => :jido_outbox, optional(:mutation_id) => String.t(), optional(:node_id) => String.t(), optional(:runnable_key) => String.t(), optional(:run_id) => String.t(), optional(:step) => String.t() }
@type manual_state() :: %{ :step => String.t(), :kind => String.t(), :paused_at => DateTime.t(), :metadata => map(), optional(:deadline) => map() }
@type t() :: %Jizoku.Runtime.WorkflowAgent.Projection{ anomalies: [anomaly()], applied_at: %{optional(String.t()) => DateTime.t()}, applied_execution_opts: %{optional(String.t()) => keyword()}, applied_results: %{optional(String.t()) => map() | nil}, applied_runnable_keys: string_set(), child_runs: [map()], command_history: [map()], context: map(), continuation_origin: map() | nil, continuation_request: map() | nil, continued_from_key: String.t() | nil, continued_from_run_id: String.t() | nil, continued_to_key: String.t() | nil, continued_to_run_id: String.t() | nil, definition_fingerprint: String.t() | nil, definition_version: String.t() | nil, dynamic_work: [map()], graph: Jizoku.Runtime.WorkflowAgent.Projection.GraphState.t(), input: map() | nil, manual_state: manual_state() | nil, planned_runnables: %{optional(String.t()) => map()}, replayed_from_run_id: String.t() | nil, run_id: String.t() | nil, started_at: DateTime.t() | nil, status: atom(), terminal_at: DateTime.t() | nil, terminal_error: map() | nil, terminal_status: atom() | nil, trace: Jizoku.Runtime.Trace.t() | nil, trigger: String.t() | nil, workflow: String.t() | nil }