Skip to main content
replay --ci reads each recorded response from <data_dir>/recordings/<upstream>.ndjson and diffs it against its frozen baseline family, entirely offline. No network, no provider account, no running agent.

What it compares

Each JSON recording is matched to its (method, template, status class) family and diffed the same way live traffic is: fields added or removed, types changed, values outside the known set, a field arriving null, a status code moving within its class. Findings are deduplicated per method, template, kind, field and detail.

What it skips

  • Recordings whose family is not frozen yet. They are counted as pre-warmup skipped.
  • Non-JSON recordings.
  • New values on fields listed in volatile_fields. Presence, type and nullability of those fields are still checked.

Exit codes

In CI

The gate needs the data_dir the agent wrote, or a copy of it. Ship the baselines/ and recordings/ directories as an artifact, or mount the volume read-only:
The handoff is {"source":"replay-ci","records":n,"findings":[…]}. See CI integration.

Recordings as scenarios

For a regression suite that does not need the agent’s data at all, turn a traffic window into an ordinary scenario pack and commit it:
See Generated packs.