mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-09-11 14:00:29 +00:00
c3cd811b98
Follow-up to the message-level reconcile fix. One level down, the per-message stream-event/tool-row list in MessageItem rendered groupStreamEventsForDisplay() through a reference-keyed <For>. That memo remaps blocks to fresh objects every tick, so the streaming answer block (and completed tool rows) re-mounted — and re-parsed markdown — on every content delta. StreamDisplayEvent has no id, but the grouped list is strictly append-ordered (the grouper only pushes new blocks or mutates the open content/thinking block in place; never inserts mid-list or reorders), so positional keying is correct. Switch the inner list to <Index>: each row keeps its DOM node across event-object rebuilds at a stable position and updates in place. Verified: <Index> reuses DOM nodes per position (probe); regression test proven to fail on the original <For> (row re-created) and pass with <Index>; 286 MessageItem+AIChat tests green; tsc clean (it flagged every evt -> evt() spot).