7ebef79c65
Team review (#81778) found the walker terminated sibling traversal when a text node was entirely consumed by a match: `current = textNode ? ... : null` — after replaceChild detaches the original node, its `.nextSibling` reads null, so `<div>needle<span>needle</span></div>` searching "needle" matched only the first occurrence. Any JSX bare-text + element sibling pattern (tool rows, attachment rows) could silently drop later matches. Capture the text node's own `nextSibling` BEFORE the first replaceChild and resume the outer walker from it on full consumption. The `after` split path is unaffected (the trailing text node is re-scanned). Regression test pins `<div>needle<span>needle</span></div><p>needle</p>` → 3 matches. 17/17 scope tests pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>