v0.50.0
Long agent jobs stop dying silently.
Honest turn errors (#845, PR #847). turn failed was a literal fallback — the
brain had already diagnosed max_turns_reached (max=…, turns=…), but the workflow
drain read only result_text (empty on exactly that path) and threw the diagnosis
away. One shared composition now backs the drain, Session.last_error() and
_run_agent_supervised, and the session log's stop record carries every terminal
fact the brain reported.
A configurable, resumable turn budget (#845, PR #847). max_turns resolves
step override → roles.<role>.max_turns → brain.max_turns → DEFAULT_MAX_TURNS
(1000, up from a hardcoded 200), at every site that carried the literal. A step
override now actually wins on steps after the first — it previously no-opped
silently while documented as working. Hitting the cap restarts the step on the
saved session id with a fresh budget instead of discarding the run mid-edit.
The checklist-execution worker protocol (#852, PR #865). skills/checklist-execution.md
— how an agent works a long job from a committed markdown checklist: read once,
one item at a time, verify, commit per item. Persist-per-item is the durability
primitive; there is no engine and no framework module behind it, pinned by
tests/test_no_checklist_engine.py. A verify: is a proposed proof, never
something the framework executes.
--fresh on dispatch (#852, PR #865). spawn_adhoc names sessions from
sha256(task)[:8], so re-dispatching an identical task string reused the previous
session — the checklist shape exactly. The name stays stable (it is the git branch)
and the resume became optional.
A plan-artifact CI check (#852, PR #865) in its own workflow, asserting the
review-surface freeze, an append-only appendix, [f] state tags, and gate-line
classification — and never executing a verify:.
Full detail in CHANGELOG.md.