From da04063a777d53d4dcaab9654f7867e06f648697 Mon Sep 17 00:00:00 2001 From: digital-garbage <133010426+digital-garbage@users.noreply.github.com> Date: Tue, 15 Sep 2026 22:34:34 +0300 Subject: [PATCH] fix: tour -- also block Save video, a dormant landmine round 2 flagged Round 2's review of the syncFromPreview fix came back clean but flagged an adjacent, currently-dormant gap while tracing the same pattern: the "Save video" button (Store.saveClipToMediaBin -> API.importClipToMediaBin) is neither in patchStore()'s block list nor patchApi()'s mock list, and it already renders during the tour (tour-s2 satisfies clipSaveableToMediaBin()). It's harmless today only because importClipToMediaBin is itself a stub ("no render/stitch stage yet") -- the moment that stage lands, this becomes a real, unblocked PUT during the tour with nothing prompting anyone to notice. Closing it now with the same established pattern rather than leaving it for a future regression. Verified live: Store.saveClipToMediaBin now returns the block toast directly, and a full tour run completes with zero thrown errors. Co-Authored-By: Claude Sonnet 5 --- app/legacy/tour.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/legacy/tour.js b/app/legacy/tour.js index cac30f85..6d0cf7e4 100644 --- a/app/legacy/tour.js +++ b/app/legacy/tour.js @@ -344,7 +344,7 @@ "generate", "generateMontage", "generateSelected", "renderFinal", "exportSelected", "saveSelectedToMediaBin", "commit", "newProject", "loadProject", "deleteProject", "importProject", "downloadProject", "uploadMedia", "deleteMedia", "deleteMediaMany", - "interrupt", "resetStudioSession", "syncFromPreview", + "interrupt", "resetStudioSession", "syncFromPreview", "saveClipToMediaBin", ]; const labels = { generate: "Generate", @@ -369,6 +369,12 @@ // call) without going through anything else already on this list, so // it needs its own block rather than relying on "commit" to cover it. syncFromPreview: "Sync scenes from preview", + // Not reachable via a real network call today -- API.importClipToMediaBin + // is itself a stub ("no render/stitch stage yet") -- but the button + // already renders during the tour (tour-s2 satisfies + // clipSaveableToMediaBin()), so this needs blocking now rather than + // whenever that stage lands and the stub silently becomes a real PUT. + saveClipToMediaBin: "Save video", }; blocked.forEach((name) => { if (typeof Store[name] !== "function") return;