Two readiness fixes surfaced by the first successful headless bake of a
heavy scene (which exported with 33 items missing):
- The 180-FRAME give-up cap silently assumed display-rate frames. The
bake page's timer-driven loop (?disable=draw) runs those frames in
~3.6s — shorter than a cold item-model download — so the cap fired
and the export raced ahead of real content. New `sceneReadyMaxWaitMs`
Viewer prop replaces the frame cap with a wall-clock one on hosts
whose frame cadence is decoupled from time; default frame behavior
unchanged for interactive surfaces.
- hasPendingSceneBuildWork now skips UNREACHABLE dirty nodes: orphans
whose parent doesn't list them in `children` (or parentless non-roots)
never render — every renderer enumerates the parent's children array —
so no system ever builds them or clears their mark. Observed in prod
scene data (two dangling windows parented to a level that doesn't list
them): they held every bake of that scene to the full readiness cap.
Validated: the 200+-item office scene with ?disable=draw settles
organically in ~2s and exports the complete artifact; a one-shot 504'd
item is now WAITED for through its retry instead of racing the cap.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>