A self-contained, runtime-free render of the entry page, built directly
from the IR using the SAME decision code as the app: collectNodeRules/
assembleCss for per-node banded CSS, propsList/resolveTag for tags,
attributes, and asset mapping - so the preview cannot drift from what the
built app resolves to. No build toolchain involved (~2s, pure string
building, byte-stable). Lottie/video render as captured poster stills;
zero script tags; asset paths relative to the app dir so the file serves
from the artifact file map as-is. Multi-page runs emit the entry page
only. The manifest records preview_html so consumers can key on the
generated event, show the preview immediately, and swap to the deployed
app when the build finishes.
Consistency vs the built app's own 1280px renders: 0.8-1.8% pixel diff on
reference runs (5.3% on an animation-heavy page - the frozen-animation
class, as expected).
520 tests pass (5 new), typecheck clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>