dc2fe99ecf
A delegated subagent that exhausts its per-child iteration budget (delegation.max_iterations) still returns a summary, so the result carries status='completed' even though the child's exit_reason is 'max_iterations' and its work was cut off mid-task. The parent then reads 'completed', trusts the partial summary, and only discovers the truncation by parsing the prose (where the child happens to mention 'hit the iteration limit'). That wastes parent turns and risks acting on incomplete work. exit_reason is already computed authoritatively and threaded to every parent-visible surface; it just wasn't reflected anywhere the parent reads at a glance. This surfaces it: - delegate_tool.py: add a parent-visible boolean 'truncated' (= exit_reason == 'max_iterations') to each task entry, alongside the existing exit_reason. - process_registry._format_async_delegation: for both the batch and single-task paths, when truncated -> use a warning icon, append 'TRUNCATED: hit max_iterations — work may be incomplete' to the header/Status line, and prefix the summary with an unmissable truncation notice. status semantics are left unchanged (stays 'completed') so existing icon/summary branch logic and ~10 tests asserting status=='completed' stay valid. Tests: single-task truncated -> banner; single-task clean -> no banner; batch marks only the truncated task, not its clean sibling. 23/23 in the async- delegation suite. Co-authored-by: Teknium <teknium1@users.noreply.github.com>