From 37574ac44cf4df51e8ff2992a3f1121e868bb71a Mon Sep 17 00:00:00 2001 From: digital-garbage <133010426+digital-garbage@users.noreply.github.com> Date: Tue, 15 Sep 2026 22:51:28 +0300 Subject: [PATCH] fix: tour -- block runComboSweep, the real gap round 5's sweep found Round 5's exhaustive sweep of store.js's Store export found the serious one: runComboSweep ("Run sweep" in the Settings window's "H3 Combo Sweep" panel) reaches a real ComfyUI job queue completely outside every mock and guard built so far. It calls window.GenerateBridge -> app/shell/session.js's real queue-and-poll pipeline directly -- a separate module tree from window.MovieEditorAPI that patchApi() never touches, and with zero __FUNPACK_TOUR__ awareness anywhere in that chain. The "models-modal" tour step spotlights the entire .settings-win element (sidebar included), so the Combo Sweep panel is genuinely openable and runnable mid-tour -- not theoretical. This is a fourth caller of the same generation funnel generate/ generateMontage/generateSelected already block, just reached through Settings instead of the timeline -- the kind of sibling path this whole review chain keeps finding one at a time. Also closed renameMedia, a second dormant landmine of the exact shape saveClipToMediaBin was (currently inert -- API.renameMedia is a stub -- but already reachable from the media bin's rename control). Verified live: both return the block toast directly (confirmed the exact Generate toast fires for runComboSweep, not a queued job), zero prompt-queue network requests, full tour sequence still completes with zero thrown errors. Co-Authored-By: Claude Sonnet 5 --- app/legacy/tour.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/legacy/tour.js b/app/legacy/tour.js index 946eab9d..1e918518 100644 --- a/app/legacy/tour.js +++ b/app/legacy/tour.js @@ -352,6 +352,22 @@ // through commit(), so the store.js guard doesn't cover them. "saveShortcut", "deleteShortcut", "addCategory", "importShortcuts", "clearShortcuts", "saveTransition", "deleteTransition", "importTransitions", "clearTransitions", + // A fourth caller of the generation funnel, alongside generate/ + // generateMontage/generateSelected above -- but reached through the + // Settings window's "H3 Combo Sweep" panel (Learning group), not the + // timeline. Its "models-modal" tour step spotlights the WHOLE + // .settings-win element (sidebar included), so this panel is openable + // and runnable mid-tour. Unlike generate/renderFinal/etc., it doesn't + // go through window.MovieEditorAPI at all -- it calls + // window.GenerateBridge -> app/shell/session.js's real queue-and-poll + // pipeline directly, which patchApi() never touches (that only + // patches MovieEditorAPI) and which has no tour-mode awareness of its + // own -- so this needed its own block, not just a mock on API.generate. + "runComboSweep", + // Currently harmless (API.renameMedia is itself a stub -- "media has + // no name field in v5"), but the button already renders in the tour's + // media bin. Same "block it now" reasoning as saveClipToMediaBin. + "renameMedia", ]; const labels = { generate: "Generate", @@ -399,6 +415,8 @@ deleteTransition: "Delete transition", importTransitions: "Import transitions", clearTransitions: "Clear transitions", + runComboSweep: "Generate", + renameMedia: "Rename media", }; blocked.forEach((name) => { if (typeof Store[name] !== "function") return;