Merged
Size
M
Change Breakdown
Feature100%
#3454feat: add `isReplay` to run context

Developers can detect replays in task runs

Developers can detect replays in task runs
DE
devin-ai-integration
·Apr 28, 2026

Developers can now determine if a task run is a replay of a previous run directly from the execution context, enabling custom logic specifically for replayed executions.

Developers can now detect when a task is a replay of a prior run. By checking ctx.run.isReplay inside their tasks, teams can write conditional logic specifically for replayed executions.

This means tasks can behave differently on a replay—skipping side effects like sending duplicate notification emails, omitting analytics events, or logging with different tags. Previously, a replay ran with the exact same context as the original, making it difficult to safely re-run complex tasks that had external side effects.

The replay detection is available across the core engine and webapp execution paths, deriving its value directly from existing database fields without requiring new schema migrations.

typescript
1export const myTask = task({
2 id: "my-task",
3 run: async (payload, { ctx }) => {
4 if (ctx.run.isReplay) {
5 // Skip sending duplicate notifications
6 }
7 },
8});
View Original GitHub Description

Summary

Adds isReplay boolean to the run context (ctx.run.isReplay), following the same pattern as the existing isTest. The value is derived from the existing replayedFromTaskRunFriendlyId database field, so no schema migration is needed.

✅ Checklist

  • I have followed every step in the contributing guide
  • The PR title follows the convention.
  • I ran and tested the code works

Testing

  • Verified @trigger.dev/core builds successfully
  • Verified webapp typechecks successfully
  • All new fields use default(false) for backwards compatibility

Changelog

  • Added isReplay to TaskRun and V3TaskRun schemas in common.ts
  • Added RUN_IS_REPLAY semantic attribute and wired it in taskContext
  • Propagated isReplay through the dequeue system, run attempt system, and all execution context construction paths (V1 + V2)
  • Added isReplay to DequeuedMessage and TaskRunExecutionLazyAttemptPayload schemas
  • Added patch changeset for @trigger.dev/core
  • Updated docs: added isReplay to context reference, added "Detecting replays" section to replaying page

💯

Link to Devin session: https://app.devin.ai/sessions/1d6f1b3cc39a4623b72d05bf00f2d70c

© 2026 · via Gitpulse