A message sent while a structured turn runs appears in the transcript at
once, so "the newest user message" is not the running turn's owner. The
live "Working for" bar moved to the mid-turn message and counted from the
earlier prompt's start, and a send queued behind the running turn counted
its wait twice: once in the previous turn and again from its own send.
Derive both from the host's turn records in one ordered pass:
- The running turn's bar belongs to the user message its lifecycle row
names (resolved exactly as settled timing resolves it). A message sent
mid-turn gets no bar until its own turn opens; a send folded into the
running turn never gets one. Surfaces fall back to the latest user
message only when the host names no opener.
- A turn counts from its send, but never before the previous turn in the
journal ended (its recorded end, else its row's last host revision),
capped at the turn's own start. The same origin feeds the live counter
and the settled duration.
Desktop and mobile share the derivation; no wire, host, or storage change.