Praxsuite

Runs and Debugging

Vincent Depassier · August 30, 2026

When an automation misbehaves, the automation is rarely where the answer is. The run is. A run records what actually happened, step by step, with the values that were really there rather than the ones you expected.

What a run records

Each execution stores its trigger source, its status, and one entry per step. A step entry carries:

Field

Answers

Step and node type

Which node this was

Status

What happened to it

Attempt number

Whether it had already been retried

Input

What the node actually received, after templates resolved

Output

What it produced for later nodes to read

Error

Why it failed

Started and finished

How long it took

The input field is the one that solves most problems. Templates are resolved by the time a node runs, so the input shows the value that arrived — not the template you wrote. A flow that looks correct and behaves wrongly is nearly always a template that resolved to something other than what you assumed, and this is where you see it.

Statuses

A run, and each of its steps, can be in one of:

Status

Meaning

Queued

Accepted, waiting to start

Running

In progress

Succeeded

Finished normally

Failed

Stopped on an error

Cancelled

Stopped deliberately

Skipped

Not executed — the path did not reach it

Blocked

Could not proceed

Skipped is not failure. A branch that did not run leaves its nodes skipped, and that is usually correct — it is only a problem when you expected that branch to be the one taken. Reading a false-path full of skipped nodes as "broken" sends people debugging the wrong half of the flow.

Trigger source

Every run says how it started: manual, event, webhook, schedule, or another automation calling it.

That answers a specific and common confusion — why did this run at 3am when nobody touched anything? — and it distinguishes a flow you started while testing from one the system started on its own.

Where things actually go wrong

Ranked by how often they turn up:

A template pointed at nothing. Check the step's input. If it shows a literal {{context.steps...}} string, an earlier node did not run, or its key is different from the one you typed.

A skipped branch fed a later node. A template from a bypassed node arrives as text, which is truthy, so || fallbacks do not save you. Fix the branch, not the value.

A comparison against a display name. Status columns come back as option ids. A condition testing for "Approved" never matches.

Nothing was configured to send. Email that never arrives is often a workspace with no mailing provider set up, not a broken node.

Someone else's API failed. Look at the step's error before assuming the flow is at fault. This is what Try/Catch is for.

Habits that make runs readable

Name your steps for what they do. A step called queryCustomers is greppable in the run list and readable in a template. Default names are not.

Leave notes on the canvas. The Note node costs nothing and explains a decision that will not be obvious later.

Wrap external calls in Try/Catch, and write the error somewhere. A caught error that vanishes is only marginally better than a crash — put it in a row or a message so a failure is discoverable without opening the run history.

Test with a manual trigger. Build the flow with a manual trigger, run it until it is right, then switch to the real one. Debugging a schedule by waiting for 3am is a bad way to spend a week.

Secrets stay out of runs

A value read with the Vault node never appears in a step's input, output or logs. That is deliberate, and it means a run is safe to share with a colleague.

The corollary: anything you paste into a plain configuration field does appear. That is the strongest practical reason to use the Vault rather than a config field — not that someone might steal it, but that it will be sitting in run history, in exports, and in the screenshot you send to whoever is helping you.

Next

  • Server-side logic — Try/Catch and error handling in depth

  • Logic nodes — branching, and why the False path matters

  • Automations overview — context and templates, from the start