refactor(web): the quiet thread no longer carries streamed text or timestamps

The quiet thread atom returned the full projection and held it while
assistant and reasoning text streamed, so its text and updatedAt fields went
stale for every reader. Only a comment kept readers off them.

quietThreadAtom now returns a ThreadStructure: the projection without
updatedAt, and assistant and reasoning items without text and updatedAt.
The structure is built only when sameThreadStructure sees a change, and
items are stripped once each, so between changes the atom keeps returning
the same object. sameThreadStructure compares items through the same strip
function, so the two cannot drift.

ChatView and the helpers it passes the thread to take the narrow type.
The shell-less fallback reads the live updatedAt, and ChatView's runtime
summary no longer has an updatedAt. ChatView's own timeline entries skip
the stripped rows; ThreadTimeline renders every row from the live items.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
b7c85b7d60Julius Marminge committed on 10/22/2026, 5:03:37 AMparent6b925e4

Checks

Some checks failed
21 files changedLine totals unavailable