5a134383fe
A delegate_task child that died (provider 404/400, timeout, crash) previously vanished silently: the child's conversation loop returns failed=True with the error summary in final_response, which the classifier treated as usable output -> status 'completed'. And even correctly-failed children only reached the parent MODEL — platforms with tool_progress off (Telegram/Slack defaults) never showed the human anything. - delegate_tool: result.failed now forces status 'failed' (with the error carried on the entry); new shared format_subagent_failure_line() renders one clean human-readable line (traceback -> exception message, length-capped); CLI tree + batch ✗ lines now include the reason. - gateway TurnRunner.progress_callback: subagent.complete events with a terminal failure status deliver that line via _deliver_platform_notice BEFORE all progress-queue gates; tool_progress_callback is now always attached (body gates each event class itself). - tests: failed-flag classification regression + notice rendering suite. - docs: Failure Visibility section in delegation docs.