Try
Type
err.trybasic/errorAny
Input
Module
Try wraps a stretch of the graph. Do, On error, and Always are the same kind of branch as a Condition true/false path (not a Lambda body). The run comes back to Try after the branch ends so Always and Out can run.
Catchable errors from Do that have no local Error outlet go to On error when it is connected. If On error is unused, Always still runs, then the error continues outward (another Try, or the run fails). Fatal errors skip On error, still run Always when possible, then stop the session.
A Return inside Do or On error runs Always first, then ends the workflow.
Handles
| Handle | Role |
|---|---|
| In (target) | Incoming connection |
Do (try) | Protected body |
On error (catch) | Catchable errors from Do |
Always (finally) | After Do or On error (cleanup) |
| Out (source) | Continues the main path after Always |
On On error, context includes error (message, code, data, blockId, blockType). The incoming pipe is an error snapshot: bind pipe.error (not pipe.value). Connect Branch errors here to split by code.
Always and Out keep that error after a catch (and on uncaught errors that skip On error). Their pipe is the leftover from Do or On error — not Try In, and not Always’s last block. After a successful Do that emits a value, bind pipe.value. After a failure, bind pipe.error or error. Unset blocks (for example Say) clear the leftover pipe; use error in that case.