4e86caa1e2
The fast path trusted that marks matching the query case-insensitively implied the set still covered every match. A stale mark from an earlier query (raced re-wrap, external DOM writes) can pass that per-mark comparison while live occurrences stay unwrapped — stepping then walks old highlights and the new matches never light up. Gate the fast path on a read-only coverage check (same skip rules as the walker) so any unmarked occurrence forces a re-wrap. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>