ccaa4872d8
The transcript's activity row went silent for most of an agentic turn. Two gates were too narrow. It mounted only while the tail bubble's own status was `running`, so a turn that seals a bubble mid-flight (message.interim) or finishes one while the agent keeps going left a settled message at the tail and unmounted the row entirely. And its activity signature was part count plus text length, which a landing tool result does not change — a result mutates the part that was already there — so the pause after a call ended was read as more of the same silence and dated from whenever the call started. Between them, the app spent whole stretches with the composer's arc border lit and Stop armed while the thread showed nothing and counted nothing. The row now follows the same busy signal the composer does, is mounted by the tail unconditionally, and decides for itself whether the turn owes the user a line. A named wait (compaction, provider wait, a tool being drafted) says so immediately; an unnamed gap earns two seconds of quiet first, so a run of quick calls doesn't strobe. It still defers to the two waits already accounted for elsewhere: a prompt the user is answering, and a tool call in flight carrying its own row and timer — anywhere in the message now, not just the last part, and excluding the silent tools that render nothing to defer to. Renamed to TurnActivityIndicator / `aui_turn-activity`: it hasn't measured a stall since it started measuring the whole turn.