From b64d851bd314730ebc8746042111787d9ed13b11 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 16 Feb 2026 16:58:27 +0000 Subject: [PATCH 1/2] Allow outbound connections from locked blocks to be modified - Modified isEdgeProtected to only check target block protection - Outbound connections (from locked blocks) can now be added/removed - Inbound connections (to locked blocks) remain protected - Updated notification messages and comments to reflect the change Co-authored-by: Emir Karabeg --- .../w/[workflowId]/utils/block-protection-utils.ts | 7 ++++--- .../[workspaceId]/w/[workflowId]/workflow.tsx | 12 ++++++------ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/utils/block-protection-utils.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/utils/block-protection-utils.ts index eb76077fcf6..d86f1b3dce0 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/utils/block-protection-utils.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/utils/block-protection-utils.ts @@ -36,17 +36,18 @@ export function isBlockProtected(blockId: string, blocks: Record ): boolean { - return isBlockProtected(edge.source, blocks) || isBlockProtected(edge.target, blocks) + return isBlockProtected(edge.target, blocks) } /** diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx index 66fa0ee1640..5f29334ac7a 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx @@ -2523,7 +2523,7 @@ const WorkflowContent = React.memo(() => { .filter((change: any) => change.type === 'remove') .map((change: any) => change.id) .filter((edgeId: string) => { - // Prevent removing edges connected to protected blocks + // Prevent removing edges targeting protected blocks const edge = edges.find((e) => e.id === edgeId) if (!edge) return true return !isEdgeProtected(edge, blocks) @@ -2595,11 +2595,11 @@ const WorkflowContent = React.memo(() => { if (!sourceNode || !targetNode) return - // Prevent connections to/from protected blocks + // Prevent connections to protected blocks (outbound from locked blocks is allowed) if (isEdgeProtected(connection, blocks)) { addNotification({ level: 'info', - message: 'Cannot connect to locked blocks or blocks inside locked containers', + message: 'Cannot connect to locked blocks', workflowId: activeWorkflowId || undefined, }) return @@ -3357,12 +3357,12 @@ const WorkflowContent = React.memo(() => { /** Stable delete handler to avoid creating new function references per edge. */ const handleEdgeDelete = useCallback( (edgeId: string) => { - // Prevent removing edges connected to protected blocks + // Prevent removing edges targeting protected blocks const edge = edges.find((e) => e.id === edgeId) if (edge && isEdgeProtected(edge, blocks)) { addNotification({ level: 'info', - message: 'Cannot remove connections from locked blocks', + message: 'Cannot remove connections to locked blocks', workflowId: activeWorkflowId || undefined, }) return @@ -3420,7 +3420,7 @@ const WorkflowContent = React.memo(() => { // Handle edge deletion first (edges take priority if selected) if (selectedEdges.size > 0) { - // Get all selected edge IDs and filter out edges connected to protected blocks + // Get all selected edge IDs and filter out edges targeting protected blocks const edgeIds = Array.from(selectedEdges.values()).filter((edgeId) => { const edge = edges.find((e) => e.id === edgeId) if (!edge) return true From d1f362a27e2a21a6b5f27ca484315e29a81ad2a1 Mon Sep 17 00:00:00 2001 From: waleed Date: Tue, 17 Feb 2026 18:15:26 -0800 Subject: [PATCH 2/2] update notif msg --- .../sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx index 5f29334ac7a..5b8b66f2b04 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx @@ -2599,7 +2599,7 @@ const WorkflowContent = React.memo(() => { if (isEdgeProtected(connection, blocks)) { addNotification({ level: 'info', - message: 'Cannot connect to locked blocks', + message: 'Cannot connect to locked blocks or blocks inside locked containers', workflowId: activeWorkflowId || undefined, }) return