- Resume no longer infinite-loops when a crash occurs between
append_step_result() and update_run() for a BranchStep: the recorded
branch target is now read from the persisted result instead of
recomputed as None.
- Resume no longer silently discards a recorded step failure that
happened right before the crash; the run correctly ends failed.
- A failed step's own next_step_id (e.g. routing to a BranchStep that
evaluates step_result_success) is now honored instead of
unconditionally forcing the run to failed, per spec.
openspec: workflow-orchestration capability, archived change workflow-orchestration-runtime
WorldModel routed all state through a single mutable _current_task_id,
so concurrent tasks sharing one instance could corrupt each other's
state. start_task() now returns a TaskWorldView handle scoped to that
task; TaskRunner.run() threads it through as a local variable instead
of reading self.world_model implicitly. Also extracts _start_world_view/
_record_step_result as reusable TaskRunner methods for composed runners.
openspec: world-model capability, archived change world-model-runtime