historyContentGeneration
Generation of retained-history identity and layout in activeBuffer.
Replacement, clearing and resize/reflow advance this generation. Ordinary live-row edits, history admission and oldest-row eviction preserve it; use row identities/generations and discardedCount for those changes. A non-clearing buffer switch preserves each buffer's own generation. Compare for equality, and include source identity and buffer kind in keys.
Readers without separate history tracking conservatively invalidate on every contentGeneration change.