From d5133f0f7dcca5b6e76c237cc5814d26fa7c748f Mon Sep 17 00:00:00 2001 From: shrimbly Date: Sat, 28 Mar 2026 22:08:08 +1300 Subject: [PATCH] refactor: remove dual-tracked skippedNodeIds local variable Replace the local Set variable in executeWorkflow() with direct reads/writes to the Zustand store field. The dual tracking was redundant since get() is synchronous and Set.has() is O(1). Extract a resetSkippedNodes() helper to DRY up the two cleanup blocks. Co-Authored-By: Claude Opus 4.6 --- src/store/workflowStore.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/store/workflowStore.ts b/src/store/workflowStore.ts index 67bdd75d..b32d836d 100644 --- a/src/store/workflowStore.ts +++ b/src/store/workflowStore.ts @@ -1004,9 +1004,8 @@ const workflowStoreImpl: StateCreator = (set, get) => ({ // Create AbortController for this execution run const abortController = new AbortController(); const isResuming = startFromNodeId === get().pausedAtNodeId; - const skippedNodeIds = new Set(); const resetSkippedNodes = () => { - for (const skippedId of skippedNodeIds) { + for (const skippedId of get().skippedNodeIds) { const skippedNode = get().nodes.find((n) => n.id === skippedId); if (skippedNode && (skippedNode.data as Record).status !== undefined) { get().updateNodeData(skippedId, { status: "idle" } as Partial); @@ -1094,8 +1093,7 @@ const workflowStoreImpl: StateCreator = (set, get) => ({ (node.type === "audioInput" && !nodeData.audioFile) || (node.type === "prompt" && !(nodeData.prompt as string)?.trim()); if (isEmpty) { - skippedNodeIds.add(node.id); - set({ skippedNodeIds: new Set(skippedNodeIds) }); + set({ skippedNodeIds: new Set([...get().skippedNodeIds, node.id]) }); logger.info('node.execution', 'Node skipped (optional input empty)', { nodeId: node.id, nodeType: node.type, @@ -1106,10 +1104,9 @@ const workflowStoreImpl: StateCreator = (set, get) => ({ // Check 2: Any source node is skipped → propagate skip const incomingEdgesForSkip = edges.filter((e) => e.target === node.id); - const hasSkippedSource = incomingEdgesForSkip.some((e) => skippedNodeIds.has(e.source)); + const hasSkippedSource = incomingEdgesForSkip.some((e) => get().skippedNodeIds.has(e.source)); if (hasSkippedSource) { - skippedNodeIds.add(node.id); - set({ skippedNodeIds: new Set(skippedNodeIds) }); + set({ skippedNodeIds: new Set([...get().skippedNodeIds, node.id]) }); if (nodeData.status !== undefined) { get().updateNodeData(node.id, { status: "skipped" } as Partial); } @@ -1263,6 +1260,7 @@ const workflowStoreImpl: StateCreator = (set, get) => ({ logger.info('workflow.end', 'Workflow execution completed successfully'); } + // Reset skipped nodes' status back to idle resetSkippedNodes(); set({ isRunning: false, currentNodeIds: [], skippedNodeIds: new Set(), _abortController: null }); @@ -1281,6 +1279,7 @@ const workflowStoreImpl: StateCreator = (set, get) => ({ "error" ); } + // Reset skipped nodes' status back to idle resetSkippedNodes(); set({ isRunning: false, currentNodeIds: [], skippedNodeIds: new Set(), _abortController: null });