2cd436f6e9
Symptom: Suche nach 'cessna' sprang zur Oberhausen-Bubble (~15 Bubbles daneben), egal welcher Versuch. Zwei Ursachen: 1) searchMatchIds suchte in `messages` (alle Bubbles inkl. Memory/Skill/ Trigger-Spezial-Bubbles), aber gescrollt wird in `invertedMessages` die diese filtert. Wenn 'cessna' nur in einer Memory-Bubble vorkam, war die ID in searchMatchIds aber nicht in invertedMessages → findIndex=-1 → kein Scroll, Pre-Scroll-Offset von voriger Aktion blieb sichtbar. Fix: searchMatchIds aus chatVisibleMessages. 2) AVG_BUBBLE_HEIGHT=150 als Pauschalschaetzung war zu grob — Voice- Bubbles sind ~70 px, lange ARIA-Antworten 400+. Pre-Scroll-Offset landete bei langen Listen weit daneben. Fix: itemHeights-Ref-Map wird per onLayout in renderMessage gefuettert. Pre-Scroll summiert echte gemessene Hoehen (Fallback AVG fuer noch nicht gerenderte) — beim zweiten Such-Versuch lernt der Cache, beim ersten klappt's schon besser als mit dem Pauschalwert. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>