fix(engine): log composition-id attribution on script-failure bail too

Address max-effort code-review finding on PR #2045 (confirmed, not
addressed by the earlier review-gap commit): the script_failure bail
path skipped the composition-id enumeration entirely, so a render with
multiple sub-compositions sharing a failed script only logged the raw
failed URL(s), never which composition(s) were still waiting on it —
a real observability regression versus the pre-#2045 behavior, which
always logged the missing-id list on any non-ready outcome.

Now enumerate unregistered composition ids unconditionally and log them
alongside whichever reason (script_failure or natural timeout) fired.
This commit is contained in:
Vance Ingalls
2026-07-08 16:09:48 -07:00
parent 8ba3c33915
commit 8fee20a525
+7 -1
View File
@@ -1214,7 +1214,10 @@ export async function pollSubCompositionTimelines(
})()`); })()`);
return "ready"; return "ready";
} }
if (!scriptFailureBail) { // Enumerate the still-unregistered composition ids regardless of bail
// reason — a script-failure bail used to skip this entirely, so a render
// with multiple sub-compositions only named the failed script URL(s), not
// which composition(s) it was still waiting on (review).
const missing = await page.evaluate(`(function() { const missing = await page.evaluate(`(function() {
var hosts = document.querySelectorAll("[data-composition-id]"); var hosts = document.querySelectorAll("[data-composition-id]");
var timelines = window.__timelines || {}; var timelines = window.__timelines || {};
@@ -1226,6 +1229,9 @@ export async function pollSubCompositionTimelines(
} }
return m.join(", "); return m.join(", ");
})()`); })()`);
if (scriptFailureBail) {
console.warn(`[FrameCapture] Composition(s) still waiting on the failed script: ${missing}.`);
} else {
console.warn( console.warn(
`[FrameCapture] Sub-composition timelines not registered after ${timeoutMs}ms: ${missing}. ` + `[FrameCapture] Sub-composition timelines not registered after ${timeoutMs}ms: ${missing}. ` +
`Compositions that load data asynchronously (e.g. fetch) must register window.__timelines[id] after setup completes. ` + `Compositions that load data asynchronously (e.g. fetch) must register window.__timelines[id] after setup completes. ` +