Skip to main content

What is Impact Simulation?

An Impact Simulation runs a policy version against a large set of historical execution data, then compares the results against a baseline version. Think of it as a regression test suite — before deploying a new version, you can see exactly how it would have performed on past traffic.
Impact Simulation vs Dry Run: A Dry Run tests one input at a time for quick iteration. An Impact Simulation tests hundreds or thousands of inputs at once and produces aggregate metrics (match rate, metric deltas, per-rule statistics). Use Dry Runs during development; use Impact Simulation before deployment.

What You Get

Reading the Change Distribution

One aggregate delta looks the same whether many records moved a little, one record moved a lot, or large moves in both directions cancelled out. Those three carry very different risk, so the distribution reports the shape as well as the total.
measuredRecords is not the denominator of the change counts. The two are counted over different populations. The change counts run over every processed record and treat an absent variable as zero, while measuredRecords counts only records where the variable is genuinely present in both versions. A record that has it in one version only is counted as changed but not as measured, so changedRecords can exceed measuredRecords.
The whole object is null when no baseline version was compared, and on runs that completed before the field existed — a stored result is returned as-is, so older runs carry no such key. largestIncrease and largestDecrease are null when the aggregation is COUNT, because the per-record difference is then only -1, 0 or +1 and no single record moves further than any other.

Running a Simulation

Console

Navigate to a policy group → Simulation tab → select candidate version, baseline version, date range → click Start.

CLI

metricConfig.targetVariable points at any key in the response — input facts, mutated facts, or generatedVariables (including the {key}__delta keys produced by MUTATE_FACT). Pick the variable whose aggregate behavior you want to compare across versions.
Simulations run asynchronously. Poll until status is COMPLETED or FAILED:

Dataset Types

Record Limits

options.maxRecords bounds how many records one simulation processes. A maxRecords above the hard cap is rejected with 400. The request is never silently truncated: a truncated run reports 100% progress against the truncated denominator, so nothing on screen would tell you the rest was dropped. The default only applies where the engine cannot know the size in advance. HISTORICAL is a date range and UPLOADED is a file in object storage. MANUAL is an array you just sent, so defaulting it would silently discard data you provided explicitly. An explicit maxRecords is honored for every type, MANUAL included.
The sample is not random. HISTORICAL reads the date range newest first (by createdAt then id, both descending, so the order is the same on every run) and takes the leading maxRecords. UPLOADED takes the leading rows in file order. A 30-day range that hits the cap measures your most recent executions, not a spread across the month — narrow the range rather than trusting the cap to sample it for you.

File Upload Dataset

Upload a CSV or JSON file to use as simulation input. This is useful when you have custom test data that doesn’t come from execution history.

Supported Formats

First row must be a header with fact keys. Each subsequent row is one test record.
Type inference: Numbers, booleans (true/false), and strings are automatically detected. Empty values become null. Quoted fields with commas are supported.
Max file size: 10 MB

Download a Template

Don’t know the expected columns? Download a template pre-filled with example values based on the version’s required facts:
In the New Simulation dialog, select File Upload (CSV / JSON) as dataset type. Click CSV or JSON under “Download template.”

Upload & Run Simulation

  1. Go to Impact SimulationsNew Simulation
  2. Select policy group and target version
  3. Set Dataset Type to File Upload (CSV / JSON)
  4. Drag & drop your file or click to select
  5. Wait for the Uploaded badge
  6. Click Start Simulation

Managing Simulations

The CSV carries the distribution in its own # Metric Distribution section, with the columns ChangedRecords,IncreasedRecords,DecreasedRecords,LargestIncrease,LargestDecrease,MeasuredRecords. The section is omitted entirely when there was no baseline, and the two Largest cells are left empty when the aggregation is COUNT.

Best Practices

  1. Always set a baseline. Without a baseline version, you only see absolute numbers — no deltas.
  2. Use a meaningful date range. At least 7 days of data for statistically significant results.
  3. Check maxRecords. Start with 5,000–10,000 for quick validation, and read Record Limits above before you read a capped result as a random sample.
  4. Run simulation before every production deployment.
Impact Simulation re-executes rules against historical input facts, and nothing leaves the engine: the 3 action primitives read and write facts, and nothing else. Decision Replay carries the same guarantee.

Next Steps

Dry Run

Quick single-input validation during development.

A/B Testing

Compare versions with live production traffic.