59fdd41f5a
A successful turn returning exactly NO_REPLY (or another exact silence marker) leaked the literal control token when a second message was queued before the first turn finished. The queued-follow-up recovery branch sends the first final_response directly through adapter.send() and predates the silence filter added to the normal completed-turn path. Use the finalized task result for that recovery delivery rather than the raw result_holder copy, then apply the existing is_intentional_silence_agent_result() predicate before sending. This keeps the established contract: only successful exact-marker turns suppress; substantive prose and failed results still send; stream-confirmed responses still skip the resend; and persisted history is untouched. Using finalized output also preserves normal empty/failure normalization on this direct path. Integration regressions run the real Slack _run_agent queued-follow-up flow: one proves NO_REPLY never reaches the adapter while the second turn still runs; another proves an empty failed first turn sends its normalized error before the queued follow-up. Existing filter tests cover every supported marker, prose mentions, and failed-result semantics.