From 1f7c0325a4461fa4d767bb9cf59dcb3f3266a94e Mon Sep 17 00:00:00 2001 From: shrimbly Date: Fri, 30 Jan 2026 22:42:35 +1300 Subject: [PATCH] fix(33): preserve snapshot during AI workflow load loadWorkflow was unconditionally calling clearSnapshot(), wiping the snapshot that captureSnapshot() just saved. Add preserveSnapshot option to loadWorkflow and pass it from the AI build workflow path so the Revert AI Changes button actually appears. Co-Authored-By: Claude Opus 4.5 --- src/components/WorkflowCanvas.tsx | 2 +- src/store/workflowStore.ts | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/components/WorkflowCanvas.tsx b/src/components/WorkflowCanvas.tsx index 67bbc547..b0ceae08 100644 --- a/src/components/WorkflowCanvas.tsx +++ b/src/components/WorkflowCanvas.tsx @@ -580,7 +580,7 @@ export function WorkflowCanvas() { if (data.success && data.workflow) { captureSnapshot(); // Capture BEFORE loading new workflow - await loadWorkflow(data.workflow); + await loadWorkflow(data.workflow, undefined, { preserveSnapshot: true }); setIsChatOpen(false); showToast("Workflow generated successfully", "success"); } else { diff --git a/src/store/workflowStore.ts b/src/store/workflowStore.ts index ba460d5d..08e0c4b6 100644 --- a/src/store/workflowStore.ts +++ b/src/store/workflowStore.ts @@ -127,7 +127,7 @@ interface WorkflowStore { // Save/Load saveWorkflow: (name?: string) => void; - loadWorkflow: (workflow: WorkflowFile, workflowPath?: string) => Promise; + loadWorkflow: (workflow: WorkflowFile, workflowPath?: string, options?: { preserveSnapshot?: boolean }) => Promise; clearWorkflow: () => void; // Helpers @@ -2442,7 +2442,7 @@ export const useWorkflowStore = create((set, get) => ({ URL.revokeObjectURL(url); }, - loadWorkflow: async (workflow: WorkflowFile, workflowPath?: string) => { + loadWorkflow: async (workflow: WorkflowFile, workflowPath?: string, options?: { preserveSnapshot?: boolean }) => { // Update nodeIdCounter to avoid ID collisions const maxNodeId = workflow.nodes.reduce((max, node) => { const match = node.id.match(/-(\d+)$/); @@ -2539,8 +2539,10 @@ export const useWorkflowStore = create((set, get) => ({ viewedCommentNodeIds: new Set(), }); - // Clear any snapshot when user manually loads a workflow - get().clearSnapshot(); + // Clear snapshot unless explicitly preserving (e.g., AI workflow generation) + if (!options?.preserveSnapshot) { + get().clearSnapshot(); + } }, clearWorkflow: () => {