a73x

delta: change detection pays for change encoding (hash of rendered bytes)

open   by a73x

The delta tracker hashes the RENDERED bytes of each row, not the cells:

    const bytes = try eng.dumpVtRow(alloc, @intCast(y));
    const hash = Wyhash.hash(0, bytes);

That is deliberate and load-bearing — the hash cannot disagree with the
payload it would send, so a hash miss can never produce a wrong delta.
The cost is that change DETECTION pays for change ENCODING even when
nothing changed. On a full-width repaint that is the single largest line
in the profile (57.5%, 2026-08-21).

Hashing cells directly would cut it, but it trades away the
hash-matches-payload guarantee, and the guarantee is why the current shape
was chosen. Only worth opening if the other two are not enough — the
cheap fixes should be measured first.