rebase run replay

Replay a run — or a period of workflow runs — bounded to what was knowable at the time.

Synopsis

# Single mode: replay one run
rebase run replay <run-id> [--code latest|<version-id>] [--param k=v ...] \
    [--wait/--no-wait] [--timeout 600] [--poll-interval 5.0] [--json]

# Batch mode: replay every matching run of a workflow
rebase run replay --workflow <project/name> --since <7d|ISO> [--until <ISO>] \
    [--status succeeded] [--trigger-source api|schedule|trigger|replay] \
    [--code ...] [--param k=v ...] [--max-parallel 4] \
    [--compare/--no-compare] [--yes] [--json]

Pass either a <run-id> (single mode) or --workflow (batch mode), not both. --workflow takes project/name, or a bare workflow name with --project.

Arguments

ArgumentTypeDescription
<run-id>strRun ID to replay. Omit when using batch mode with --workflow.

Options

OptionTypeDescription
--codestrCode to run: omit for the original pinned version, latest (or current) for the workflow's current version, or a specific version ID.
--param, -pname=valueParameter override, merged over the original run's parameters. Values are parsed as JSON when possible. Repeat for multiple parameters.
--wait / --no-waitboolSingle mode: wait for the replay result and compare it with the original run. Defaults to --wait.
--timeoutintMaximum seconds to wait for each replay result. Defaults to 600.
--poll-intervalfloatSeconds between run status polls. Defaults to 5.0.
--jsonboolPrint machine-readable JSON output.

Batch mode options

OptionTypeDescription
--workflowstrReplay runs of this workflow: project/name, or a bare name with --project.
--projectstrProject name when --workflow is a bare workflow name.
--sincestrRequired. Runs created after this point: a duration back from now (7d, 24h, 90m) or an ISO datetime.
--untilstrRuns created before this ISO datetime.
--statusstrOnly replay runs with this status: queued, submitted, running, succeeded, failed, or cancelled.
--trigger-sourcestrFilter candidates by trigger source: api, schedule, trigger, or replay.
--max-parallelintMaximum concurrent replays. Defaults to 4.
--compare / --no-compareboolWait for each replay and compare its result with the original run. Defaults to --compare.
--yesboolSkip the confirmation prompt.

Output

Single mode prints the new replay run (ID, replay_of, pinned target_version_id, status). With --wait it then prints a comparison: status transition (succeeded -> succeeded), whether the results are identical (listing up to three differing keys when not), and both run durations.

Batch mode prints the candidate runs, asks Replay N runs? (unless --yes), then prints a table with one row per run: Original, Replay, Status, Result (identical, differs: <key>, or - when either run failed or --no-compare was used), and Created. With --json it emits {original, replay, original_status, replay_status, result_identical, differing_keys} rows instead.

Behavior

  • Knowledge-time bound: the replay runs with REBASE_REPLAY_KNOWLEDGE_TIME set to the original run's moment; SDK bitemporal and as_of reads are bounded to it. See Run Replay for what is and is not reproduced exactly.
  • Shadow mode: replays never signal datasets and never fire downstream triggers. Warehouse writes still execute — guard them with ctx.is_replay.
  • Replay-of-replay exclusion: batch mode skips candidates whose trigger_source is replay, unless --trigger-source replay is passed explicitly.
  • Non-replayable runs: ephemeral, function, and model runs cannot be replayed; the server rejects them with an explanatory error.
  • Exit codes: 0 on success; 1 when the replay run fails (single mode with --wait), when any batch replay fails or cannot be submitted, when the confirmation prompt is declined, or on argument errors. With --no-wait/--no-compare the command exits 0 after submission — outcomes are not known yet. Zero batch candidates exits 0.

Replayed runs are ordinary runs: inspect them with rebase run get, rebase run logs, and rebase run list --trigger-source replay.

On this page