Portal Community

Why Nodes Get Skipped

The workflow engine does not simply execute every node in the graph. It routes execution based on edge conditions and branching logic. Nodes that are not on the active path are skipped rather than executed. The engine still fires OnSkippedAsync for them, allowing subscribers to maintain a complete audit record of every node's outcome.

SkipReasonWhen It Occurs
ConditionalBranchNotTakenAn edge has a condition expression that evaluated to false — this node's branch was not chosen
ParallelPathNotActiveNode is on a parallel branch that was excluded by a gateway or fork condition
LoopIterationSkippedA loop's condition evaluated to skip this iteration — loop body nodes fire Skipped
ManuallyDisabledThe node was explicitly disabled in the designer (toggle off)

Completeness Audit Pattern

For compliance workflows it is important to record not just what ran, but what was skipped and why. This pattern ensures every node in every execution has an audit row:

public async Task OnSkippedAsync(NodeExecutionEventArgs args, CancellationToken ct)
{
    await _auditRepo.InsertAsync(new NodeExecutionAudit
    {
        ExecutionId = args.ExecutionId,
        NodeId      = args.NodeId,
        NodeType    = args.NodeType,
        TenantId    = args.TenantId,
        Status      = AuditStatus.Skipped,
        SkipReason  = args.SkipReason.ToString(),
        Timestamp   = DateTimeOffset.UtcNow
    }, ct);
}

Metrics for Skip Rates

public Task OnSkippedAsync(NodeExecutionEventArgs args, CancellationToken ct)
{
    _metrics.IncrementCounter("node.skipped",
        ("node_type",   args.NodeType),
        ("skip_reason", args.SkipReason.ToString()),
        ("process_id",  args.ProcessId));
    return Task.CompletedTask;
}

Available Data in OnSkipped

PropertyAvailable?Notes
args.SkipReasonYesAlways set, never None
args.NodeIdYesThe node that was skipped
args.NodeTypeYesTypeCode of the skipped node
args.ContextYes (snapshot)Memory at point of skip decision
args.DurationMsnullNode never ran
args.ResultnullNo result from a skipped node
args.ExceptionnullNo error from a skipped node
Skipped vs. Errored: A skipped node is not an error — it is a normal routing outcome. Do not conflate the two in your metrics dashboards. Track skip rates separately from error rates.