# Conditional Steps

Skip compatible transformations with understandable production logic.

A persisted Step may include:

```json
{"condition":{"input":"shot","path":["dialogue"],"operator":"present"}}
```

Conditions are bounded data predicates: `present`, `equals`, `not-equals`; equality
operators compare a scalar `value`. Paths contain up to eight safe field names.
Predicate controls use their declared defaults, just as a normal SDK run does.
An explicitly invalid primary value is rejected even when the condition skips.
No JavaScript expressions are executed. The conditional block must have a primary
input compatible with its single output, so a false condition passes through that
input without inventing data. Conditional host workspaces are not supported yet.

Settings are stored in the Step's `config`. `enabled:false` disables a Step and
reconnects a compatible primary chain. Block packages and versions remain pinned;
removing or reordering a Step never edits the reusable package. When upstream data
changes, dependent SDK results are marked stale, retained as previews and excluded
from connected inputs until rerun.
