The IR's canonical tree came from one viewport, so DOM that exists only
at other widths (mobile-only pagination bullets, per-viewport product
sets) either vanished or left empty display:none shells.
- Unmatched children at non-canonical viewports graft into the IR at
deterministic anchored positions with per-viewport data scoped to their
source widths; emission gives them a base hide plus a reveal band
(hidden max-[...]:block), capped per parent, invisible subtrees skipped
- Whole-set identity drift (a container serving disjoint same-family
child sets per viewport) is detected by mutual mismatch; canonical
content stands in at the drift viewport instead of an empty shell, and
manifest.json records the divergence
- Per-item divergence resolves naturally via grafting: each viewport
shows exactly its captured content, mutually exclusive by banding
468 tests pass (8 new), typecheck clean, double-build byte-identical.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>