The failure's kind — ProcessError.code, e.g.
'UnknownColumnError'. Absent when the throw did not come from this
package, which is itself the useful signal: op code failed, not the
plan layer.
reason is prose for a human and its wording is not a contract.
Under onError: 'skip' | 'collect' nothing is thrown, so without
this a consumer branching on the kind — a dropped feed column is a
dimmed, removable chip; a bad persisted param is a broken one — was
left matching on that prose (Tidal,
docs/notes/tidal-process-adoption-friction-2026-08.md).
The spec that failed, echoed back — including inputs, because a
plan may hold two specs of the same op and a caller retrying needs
to know which one it was.
The failure's kind — ProcessError.code, e.g.
'UnknownColumnError'. Absent when the throw did not come from this package, which is itself the useful signal: op code failed, not the plan layer.reasonis prose for a human and its wording is not a contract. UnderonError: 'skip' | 'collect'nothing is thrown, so without this a consumer branching on the kind — a dropped feed column is a dimmed, removable chip; a bad persisted param is a broken one — was left matching on that prose (Tidal,docs/notes/tidal-process-adoption-friction-2026-08.md).