Skip to main content

Sequential Topological Execution

When a pipeline is compiled, its nodes are sorted into topological order (Kahn’s algorithm) — every node comes after the nodes it depends on. For each job, the engine then executes the nodes one at a time in that order. Nodes are not executed in parallel within a single job; parallelism happens across jobs instead (see below). In this example the execution order is: Input → Liquid → AI → JSON Merge → Output (or Input → AI → Liquid → …, depending on the sort — either way, Merge always runs after both of its inputs are ready).

Compile Once, Run Per Job

At the start of every feed push the pipeline is compiled once: the graph is validated, the execution order is computed, and Liquid templates and AI output schemas are parsed a single time. Every job in the sync then reuses the compiled pipeline — per-job overhead for Liquid, Filter, Field Mapper, and JSON Merge nodes is sub-millisecond.

Per-Job Execution & Concurrency

Each job runs through the entire pipeline independently:
  • Jobs within a feed batch are transformed concurrently (up to 8 at a time when the pipeline contains AI nodes; higher for pure-transform pipelines).
  • A failure on one job doesn’t affect the others — the job is skipped and counted.
  • Results are written to the destination in the original feed order, regardless of which transform finished first.

Run Outcomes

Every job’s pipeline run ends in one of three states: Both counters (filtered_rows and transform_failed_rows) are recorded per push alongside the processed-row count.
A job that was synced earlier and later becomes filtered (e.g. you tightened a Filter node) is not retroactively removed from the destination — it stays until the job itself expires. Deletions track job expiry, not filter changes.

Node-Level Results

In the editor’s test panel, each node reports: skipped marks nodes downstream of a drop or failure — they never ran. During live syncs these traces are not collected (they exist for the editor only), keeping per-job overhead minimal.

Error Handling

Failed jobs are not automatically retried on the next sync cycle. Syncs are incremental: a job is reprocessed only when its content changes or when you trigger a Full resync on the destination. If a whole batch failed because of a bad prompt or template, fix the pipeline and run a full resync.

Idempotent Execution

Running the same job through the same pipeline produces the same output for all deterministic nodes (Filter, Field Mapper, Liquid, JSON Merge). AI nodes are as deterministic as the model you choose — use structured output schemas to keep results stable across runs.

Performance Characteristics

AI nodes are the primary source of latency and cost — put a Filter node before the AI node so you only pay for jobs you actually want.