# Test with a dry run

A dry run tests the current definition with sample input and returns a step-by-step trace. It is useful for finding transformation mistakes before starting durable processing, but its behavior depends on the handlers and the environment's dry-run policy.

## Run a sample

1. Open **Test workflow** in the editor.
2. Enter a JSON array of record objects, such as `[{"status":"open"},{"status":"closed"}]`.
3. Choose **Run dry-run**.
4. Read each step's status, input count, output count, and preview.
5. Correct the first unexpected result and test again.

Use realistic records and include absent fields, nulls, empty input, and alternate values. A source job can have its own configured input; sample input does not necessarily replace every source's behavior.

## Read the trace

**Succeeded** means the step executed in the preview. **Validated** means its configuration was checked without performing the normal operation. **Skipped** can mean a condition was false. **Failed** identifies a preview error.

A destination marked Validated has not proved that a real write will succeed. A passthrough writer can forward its inputs so downstream transformations remain inspectable, without proving persistence.

## Understand effects and cost

Dry-run testing does not create a saved workflow or its normal durable run history. It is not a universal promise that no external work occurs. Read operations, model calls, and other executable handlers can contact services or incur usage. HTTP GET can execute while mutating HTTP methods are suppressed. Connector operations are generally configuration-validated rather than executed.

Write suppression depends on the environment's active policy and the step's declared behavior. Review the handler reference and avoid using a live write-capable process as a casual preview without understanding that policy.

Optional extension workflows can require a durable run instead of stateless preview. Use a small controlled real run when that requirement appears.

After the trace matches expectations, save and run against a limited real source. Confirm the destination separately. See [validation](/docs/workflows/validation), [monitoring runs](/docs/workflows/monitor-runs), and [reliability](/docs/workflows/reliability).
