The three commands
run-check
Stage one only: counts and checksums. One query per side.
run-drill
Stage two only: locate the differences. Assumes you already know there are some.
run --auto-drill
Stage one, then stage two on whatever mismatched. The everyday command.
Reconciliation names are selected with
--include and --exclude, both repeatable — not positionally. run-drill suite.yaml orders is rejected with accepts 1 arg(s), received 2.Selecting and parameterising a run
--concurrency fans reconciliations onto their connections; each connection additionally caps its own parallel queries with parallelism: (default 8), so raising concurrency does not stampede a single warehouse.
Every flag on every command is in the CLI reference, which is generated from the binary — this page covers the ones with a decision attached.
Reading the output
Logs go to stderr, results to stdout
Logs go to stderr, results to stdout
Redirect with
2>/dev/null. Never 2>&1 — that merges log lines into the document you are trying to parse.run / run-check / run-drill render only two shapes
run / run-check / run-drill render only two shapes
-o json, and a text report for every other value. The output-shaping flags — --jq, --columns, --no-headers, --wide — do not apply to them; pipe their -o json through jq yourself.The workspace commands (suite, deployment, runs, audit-logs, connections, auth) do honour all six formats and all four flags.run --auto-drill is not a single JSON document
run --auto-drill is not a single JSON document
It emits the quick-check document, a plain-text banner, then one drill document per drilled reconciliation. To parse results, run the two stages separately — each is one valid document:
Exit codes
Locally,
1 does not distinguish “found a difference” from “could not run”. If you need that distinction — in CI, say — either read -o json or use a backend run with --wait, whose codes are data-driven. See CI/CD and automation.Audit logs
--audit-log writes the full record of a run: every query as executed, every count, checksum, timing, resolved variable, cutoff watermark and mismatch leaf.
recheck and drill-deeper replay, and its shape is published as the audit-log schema.
Some paths worth knowing:
What a run costs
Reconciliation runs real queries against real warehouses. On a consumption-priced platform those queries cost money, so it is worth knowing which commands spend before you put one in a loop.
Where the engine reports them, a run prints its own statistics — including a rough BigQuery cost estimate:
Gate a large run before it happens
EXPLAIN, not a scan — and warn when an estimate exceeds the threshold. Both default to 0 (off), so an automated run incurs no extra queries unless you ask for the gate.
Platforms that advertise no estimate support simply produce no warnings, so a gate is never a false sense of security. It is a guard against the accidental full-table drill, not a hard limit.
Standalone and air-gapped runs
By default, a locally executed run reports its audit log to Coalesce Quality whenever it can resolve a credential, so local results appear in the workspace next to backend runs. It says so atINFO, naming the endpoint. This happens even when every database in the suite is local.
--no-report — or RECON_NO_REPORT in the environment — resolves no credential and opens no connection to us at all. The terminal and the audit-log file are the only outputs.
This is a fully supported way to operate, not a debugging flag. Combined with the default privacy level, it means: only counts and checksums leave the database, and even those never leave the machine. For a regulated environment where a comparison must not cross a boundary, this is the mode to use — and the audit log is a self-contained, schema-validated record you can hand to a reviewer.
SCOPE_RECON_EDIT permission. A credential without it produces one warning naming the remedy; the comparison has already happened and its result is unaffected.
Local-only conveniences
Two features exist in the CLI and deliberately nowhere else:- Pre-flight table analysis.
check-config --dbreports size, keys, indexes and a suggested key column. See validate before you spend a query. - Environment overrides.
--environment <name>/--env-file <path>apply a named set of overrides at load time — most usefully pointing a suite at a dev copy of a schema while you author against it.
Next
Investigating results
Reading a segment tree, and following a finding to the rows.
Workspace suites
Save the suite, run it on our backend, put it on a schedule.
CLI reference
Every command and flag, generated from the binary.
Agent workflow
The same loop, written as an operating procedure for an agent.