A valid document still loads. A real script failure keeps its own message.
Use the existing root declaration or timed clip ends. Do not invent a timeline length.
readStaticCompositionMeta(doc: Document):
{ width: number | null; height: number | null;
fps: number; durationSeconds: number } | nullProducer: packages/core/src/runtime/compositionLength.ts:141, declaration read at152; package-subpaths.json:323 exposes runtime/composition-length. Current probe consumer composition-probe.ts:118 requires adapter.getDuration() >0. Proposed reuse is not exercised.The preview server captures browser errors before author scripts execute. Read that same buffer before reporting readiness or a timeout.
var seen=window.__hfPreviewErrors=[];
addEventListener("error",function(e){seen.push(e.message||String(e))});Producer: packages/studio-server/src/routes/preview.ts:326, inserted at338 before scripts. Constant: packages/core/src/studioPreviewMark.ts:4. Existing reader: packages/studio/src/hooks/useConsoleErrorCapture.ts:68. New probe read not exercised. Resource events may yield generic Event text; unhandled rejection is not captured by this producer.A probe error discards the hidden edit preview while the live preview stays visible.
onReady: (result: ProbeResult) => void;
onError: (message: string) => void;
new CustomEvent("error", { detail: { message } })Producer: composition-probe.ts:123/136; hyperframes-player.ts:208. Accepting lines: studio/player/components/Player.tsx:241, components/nle/NLEPreview.tsx:556, player/hooks/useShadowPreviewReload.ts:116, components/EditorShell.tsx:186. Ready accepts duration and adapter at hyperframes-player.ts:1305.| Cause | Current observable | Evidence |
|---|---|---|
| No GSAP or no positive adapter duration | Composition timeline not found after 8s | composition-probe.ts:118/134 |
| Real early script error | Same timeout if no adapter appears | Probe has no early-error reader; error buffer reader search bounded to all packages excluding generated/dist |
| Injected runtime never appears | Probe can wait indefinitely | Early return at115 bypasses timeout at134 |
The task already decides valid document duration and real script errors. The remaining wait policy is unknown: a probe failure at8s discards a shadow whose outer budget allows up to45s.
| Option | Consequence |
|---|---|
| Keep finite8s failure | Preserves the existing probe budget. Slow unresolved initialization still fails, with an accurate readiness cause. |
| Let the outer shadow budget own waiting | Studio can accept initialization after8s; embeddable player needs its own finite bound. Changes lifecycle scope. |
Recommendation: first prove the slow class with real browser fixtures. Preserve the existing finite probe budget unless that evidence calls for a separately owned wait policy.
Audited: producer bodies and accepting lines above at the pinned main ref.
Trusting: no runtime claims credited from mocks.
Not exercised: CSS-only, bare render(t), WAAPI, zero-duration timeline, script failure, and delayed initialization still need red tests and real reload captures. No implementation has been written.