Flow Studio
Handling Rejection
When consensus is "Rejected," execution resumes on the rejected output port. The aggregate decision and individual rejection comments are available in the node's output for downstream notification or remediation logic.
Rejection Semantics by Strategy
| Strategy | When is Rejection Final? |
|---|---|
| Any | Only when ALL actors have rejected — one rejection alone is not final |
| All | Immediately when ANY actor rejects |
| Quorum | When remaining approvals are mathematically insufficient to meet quorum |
Routing on Rejection
Connect an edge from the rejected output port to a notification node, a remediation workflow, or an end node:
// Example: rejection routing pattern in a workflow
[Approval Node]
├─ approved → [Continue Process Node]
├─ rejected → [Send Rejection Email Node] → [End Node]
└─ timeout → [Escalate Node]
Rejection Output Data
// Rejection output available in downstream nodes via $output.approvalNode1
{
"aggregateDecision": "Rejected",
"decisions": [
{
"actorId" : "user-finance-head",
"decision" : "Rejected",
"comment" : "Budget limit exceeded — reduce to $50k.",
"decidedAt" : "2026-05-25T10:30:00Z"
},
{
"actorId" : "user-legal-team",
"decision" : "Approved",
"comment" : "Terms acceptable.",
"decidedAt" : "2026-05-25T11:00:00Z"
}
],
"strategy" : "All",
"completedAt" : "2026-05-25T10:30:00Z"
}
Sending Rejection Notification
// Using $output in a downstream Email node's body expression
$output.approvalNode1.decisions
.filter(d => d.decision === 'Rejected')
.map(d => d.actorId + ': ' + d.comment)
.join('\n')
No automatic rejection email: The engine does not send notifications on rejection. You must explicitly route the rejected port to a notification node. This is by design — notification content and channels are workflow concerns, not engine concerns.