Portal Community

Status Values

StatusBadge ColorMeaning
pendingGreyNode has not yet started
runningBlue (animated)Node is currently executing
successGreenNode completed successfully
failedRedNode threw an error or returned a failure result
skippedYellowNode was bypassed (e.g., condition not met)
suspendedPurple (pulsing)Node is paused waiting for human input (HIL)

setNodeStatus Action

setNodeStatus: (nodeId: string, status: NodeExecutionStatus) => void

// Called by the SignalR handler when a NodeStatusChanged event arrives
// Also called in bulk when loading a historical run

useDesignerModeStore.getState().setNodeStatus('node-approval', {
    nodeId      : 'node-approval',
    status      : 'suspended',
    startedAt   : '2026-05-25T09:00:00Z',
    completedAt : null,
    durationMs  : null,
    errorMessage: null,
    retryCount  : 0
});

Live Run — SignalR Wiring

// useExecutionSignalR.ts
connection.on("NodeStatusChanged", (event: NodeStatusChangedEvent) => {
    useDesignerModeStore.getState().setNodeStatus(event.nodeId, {
        nodeId      : event.nodeId,
        status      : event.status,
        startedAt   : event.startedAt,
        completedAt : event.completedAt,
        durationMs  : event.durationMs,
        errorMessage: event.errorMessage,
        retryCount  : event.retryCount
    });

    // Also sync to executionStore so the Observer Panel sees the same data
    useExecutionStore.getState().setNodeStatus(event.nodeId, event);
});

Historical Run — Bulk Load

// When loading a past execution for review:
// GET /api/executions/{executionId}/node-statuses
// Returns: NodeExecutionStatus[]

const statuses = await executionApiClient.getNodeStatuses(executionId);

statuses.forEach(s =>
    useDesignerModeStore.getState().setNodeStatus(s.nodeId, s)
);
Dual-write on live runs: Every SignalR NodeStatusChanged event writes to BOTH designerModeStore.nodeStatuses (for canvas overlays) and executionStore.nodeStatuses (for the Observer Panel). They are always kept in sync by the useExecutionSignalR hook.