Flow Studio
Timeout Output Port
HIL nodes have a dedicated timeout output port. When an escalation itself times out (double-timeout), execution routes through this port — allowing the workflow to take a specific action rather than simply failing.
Port Definition
The timeout port is declared in the executor's port list with a special flag:
// BaseHILExecutor registers the timeout port
protected override IReadOnlyList<NodePortDefinition> DefineOutputPorts()
{
return new[]
{
new NodePortDefinition("approved", label: "Approved"),
new NodePortDefinition("rejected", label: "Rejected"),
new NodePortDefinition("timeout", label: "Timeout", isTimeoutPort: true)
};
}
// The isTimeoutPort flag tells the canvas to render it with the clock icon
// and tells the engine this is the port to use when double-timeout fires
When the Timeout Port Fires
| Scenario | Timeout Port Fires? |
|---|---|
| timeoutBehavior = Escalate, escalation also times out | Yes |
| timeoutBehavior = AutoApprove (single timeout) | No — routes via approved port |
| timeoutBehavior = AutoReject (single timeout) | No — routes via rejected port |
| timeoutBehavior = Fail (single timeout) | No — workflow fails entirely |
Routing Pattern
[Approval Node] (timeoutBehavior: Escalate, escalationActor: user-manager)
├─ approved → [Continue Process]
├─ rejected → [Send Rejection Email]
└─ timeout → [Send Critical Alert] → [Auto-Reject End Node]
↑
(fires when escalation also times out)
Timeout Port Output Data
When the timeout port fires, the node's output in ExecutionMemory is:
{
"timedOut" : true,
"suspendedAt" : "2026-05-25T09:00:00Z",
"expiredAt" : "2026-05-26T09:00:00Z",
"originalActor": "user-manager",
"escalationActor": "user-director"
}
Unconnected timeout port: If you configure a timeout but leave the timeout port unconnected, the engine will log a design warning. If the timeout port fires on an unconnected port, the workflow fails with an UnconnectedPortError. Always connect the timeout port when using Escalate behavior.