From 6b3dcf7498e64e8411eaad37b13afec639d655b2 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN Date: Thu, 1 Oct 2026 09:08:47 -0400 Subject: [PATCH] TASK-conversation-console-workflow await stable initial layout before route completion --- docs/TEST_INTEGRITY.md | 2 +- site/console.js | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/TEST_INTEGRITY.md b/docs/TEST_INTEGRITY.md index b13368a..949f143 100644 --- a/docs/TEST_INTEGRITY.md +++ b/docs/TEST_INTEGRITY.md @@ -2619,7 +2619,7 @@ test_integrity_note: - "No browser requests to live project APIs and no changes to tracked screenshot expectations" determinism_controls: - "The existing isolated sample Console, fixed Playwright clock, and fixed desktop/mobile viewports" - - "Manager-wakes routing uses the existing isolated sample Console, a deterministic first-generation completion marker, and browser fragment history without changing project state" + - "Manager-wakes routing uses the existing isolated sample Console, a deterministic two-frame first-generation layout-completion marker, and browser fragment history without changing project state" - "Newer evidence is introduced through the sample's supported preview/confirm API before an explicit refresh" - "The browser test advances only the isolated sample API; it never submits the priority form or mutates a live project" - "No network, live project mutation, retry, sleep, timeout, golden update, or direct fixture-source change" diff --git a/site/console.js b/site/console.js index 117bbc5..fcebdbc 100644 --- a/site/console.js +++ b/site/console.js @@ -1159,14 +1159,14 @@ const refreshScheduler = globalThis.TorchLiveRefresh.createScheduler({ const status = $('#live-refresh-status'); const renderGeneration = ++appliedRefreshes; status.textContent = `${liveUpdatesPaused ? 'Automatic updates paused.' : 'Updates every 15 seconds while visible.'}${heldPanels ? ' Edited forms and active previews retained; their panels may show older state.' : ''}`; - globalThis.requestAnimationFrame(() => { - if (renderGeneration !== appliedRefreshes) return; - if (viewportBeforeRender && consoleViewRouter.userIntentVersion() === userIntentAtRender) { - globalThis.scrollTo?.({ ...viewportBeforeRender, behavior: 'instant' }); - } - if (renderGeneration === 1) consoleViewRouter.afterInitialLayout(); - status.dataset.generation = String(renderGeneration); - }); + globalThis.requestAnimationFrame(() => globalThis.requestAnimationFrame(() => { + if (renderGeneration !== appliedRefreshes) return; + if (viewportBeforeRender && consoleViewRouter.userIntentVersion() === userIntentAtRender) { + globalThis.scrollTo?.({ ...viewportBeforeRender, behavior: 'instant' }); + } + if (renderGeneration === 1) consoleViewRouter.afterInitialLayout(); + status.dataset.generation = String(renderGeneration); + })); }, onError: (caught) => { const error = $('#console-error');