Skip to main content
A suite that only runs on your machine is a useful tool. A suite in your workspace is a monitored one: versioned, runnable by anyone with access, schedulable, and wired into assets, checks, issues and alerts. Two stages, in the app under Health → Reconciliations:

Save to Development

Prints the suite id. Requires SCOPE_RECON_EDIT.
Every save creates a new version. The change summary is what makes the version history readable six months later.
suite yaml is the round-trip that makes a stored suite editable again — including one someone else created in the wizard. Fetch it, edit the file, upload-config it back. This is also the recipe for copying a suite between workspaces.

Bind connections to integrations

A backend run does not see the credentials in your YAML. It uses integrations — the warehouse credentials your workspace already manages.
By default each connection name binds to the integration whose id matches it. Map them explicitly when the names differ:
In the app this is the Bind suite connections to integrations dialog.
N connection(s) could not be bound to an integration means a suite connection has no matching integration, or the integration is not enabled for reconciliation. Check the names with connections remote list --recon-deployable, or bind explicitly with --map.
Read connection vs integration once if that distinction is new — the same YAML key means two different things in the two stages, and it is the most common source of confusion.

Run it on the backend

The run is asynchronous. --wait blocks until it finishes and sets a meaningful exit code; without it, poll with synq-recon audit-logs get <invocation-id>.--invocation-id <id> makes submission idempotent — re-submitting with the same id will not start a duplicate run, which is what you want from a retrying pipeline.
Pass --drill=false explicitly if you do not want a drill. Omitting the flag does not mean “off”.Unlike promote, where an omitted flag preserves the stored setting, an ad-hoc run has no deployment to inherit from — so an omitted --drill falls through to each reconciliation’s own bisection.enabled in the YAML, which defaults to on. On a suite with genuinely many differences that is the difference between a two-minute run and a fifteen-minute one with nothing usable at the end.

Promote to production

Promoting creates a deployment: an immutable snapshot of the suite plus its schedule, bindings, run settings and annotations.
Once promoted, each reconciliation in the deployment becomes a platform asset that produces a check on every run — so it appears in search and lineage, participates in check categorisation, and opens issues that route through your existing alerts and ownership.

Schedules

Two forms, mutually exclusive:
Both take --timezone (for example UTC, Europe/Warsaw); --ical additionally accepts --dtstart as an anchor. Use iCal for the schedules cron cannot express — last Thursday of the month, the second Tuesday, business-day patterns.

Two different timeouts

--timeout and --execution-timeout are unrelated, and mixing them up is easy:
  • --timeout is a per-query budget for locally executed commands. Default 5m.
  • --execution-timeout is the whole-run wall-clock budget for a backend run, set on a deployment or per trigger. The server clamps it to its supported range.

Editing a deployment

Deployment edits preserve what you omit. deployment update always behaves this way, and so does a re-promote — so refreshing a suite snapshot never silently unschedules the deployment or turns off API triggers.
Removing a schedule is therefore always explicit.
A fresh promote applies defaults, and one of them may surprise you. With no existing deployment to preserve from, a promote defaults to: no schedule, not triggerable by API, the server-default execution timeout — and drill-down on.If you want a scheduled production run that never drills, pass --drill=false on the first promote. Do not rely on omission.
A deployment is a snapshot, not a pointer. Editing the suite in Development changes nothing in production until you re-promote. The app says so on the suite card — “Dev has unpromoted changes” versus “Up to date with prod” — and it is worth checking that line before concluding that a fix did not work.

Keep the deployment id stable

A deployment’s id is part of every reconciliation’s asset path. Rebuilding a deployment from scratch under a new id re-homes its checks and drops their history. Re-promoting the same suite reuses its id automatically, so this is only a concern if you are rebuilding deliberately — in which case pin it:

Pause, resume, unpromote

Pause is for a planned maintenance window: the deployment stays configured and stops running. Unpromote deactivates it entirely; its history is kept, and re-promoting brings it back under the same id.
deployment is not active; re-promote to modify means the deployment was unpromoted. Re-promote before changing or tearing it down.

Inspecting what ran

A run’s --trigger says how it started, which is often the first thing you want to know: deployment history is append-only and records every promote, unpromote, schedule change, binding change, annotation edit, pause and resume. When production behaviour changed and nobody remembers why, it is the first place to look.

Copy production back to Development

To iterate on what production is actually running, rather than on what Development happens to contain:

Permissions

The app hides controls whose call would be refused, so a missing scope shows up as a missing button rather than an error. CI/CD and automation maps these to roles and to the credentials an unattended caller uses.

Next

Investigating results

Reading a run, and following a finding to the rows.

CI/CD and automation

trigger --wait as a release gate, exit codes and credentials.