terminal_update that carries no terminal bytes for a
tool call: an empty update, one for a shell with no live process (or a
completed one) in the legacy tool-call model, or the legacy stream-start
preview. Still a Shell tab activity / timeline position
(mainLoopReducer.ts creates the tab and bumps it on every update).
shellId / processId are the same association keys
[crate::ShellIdMeta] / [crate::ProcessIdMeta] put on the shell tool
calls the bytes-carrying updates attach to.

