The hydrate-island function was doing:
(dom-set-text-content el "") ;; clears SSR content — visible flash
(dom-append el body-dom) ;; adds reactive DOM
Now uses:
(host-call el "replaceChildren" body-dom) ;; atomic swap, no empty state
Per DOM spec, replaceChildren is a single synchronous operation — the
browser never renders the intermediate empty state. The MutationObserver
test now checks for content going to zero (visible gap), not mutation
count (mutations are expected during any swap).
Test: "No clobber: clean" — island never goes empty during hydration.
All 8 home features pass: no-flash, no-clobber, boot, islands, stepper,
smoke, no-errors.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>