Skip to main content

Activity Operations

View Markdown

This page discusses the following:

Activity Operations are deliberate actions you perform on a specific Activity Execution, as opposed to lifecycle behaviors like retries and timeouts which happen automatically.

You can perform Activity Operations through the CLI, the UI, or directly via the gRPC API. Not all operations are available in all interfaces yet - see the summary table for current support. Activity Operations don't apply to Local Activities. For Standalone Activities, see Standalone Activity operator commands.

Public Preview

Activity Operations are in Public Preview. Pause, Unpause, and Reset are available in Server v1.28.0+. Self-hosted UI requires v2.47.0+.

Activity Operations aren't available as SDK client methods. They're operational controls designed for the CLI, UI, and gRPC API - not for programmatic use in Workflow or Activity code.

Operations summary

OperationWhat it doesCLI
PauseStops retries. In-flight execution continues unless the Activity uses Heartbeat.temporal activity pause
UnpauseResumes a Paused Activity. The next execution starts immediately.temporal activity unpause
ResetClears retry state (attempts, backoff) and schedules a new execution.temporal activity reset
Update OptionsChanges timeouts, Retry Policy, or Task Queue without restarting the Activity.temporal activity update-options

Pause

Pause stops the Temporal Service from scheduling new retries of an Activity Execution.

When to Pause

  • An Activity is calling an external service that's experiencing issues, and you want to stop retries until the service recovers.
  • You need to inspect or change configuration before the Activity retries.
  • You're rolling out a new Worker version and want to hold specific Activities until the deploy is complete.

What happens when you Pause an Activity

  • Pausing an Activity doesn't affect the parent Workflow. The Workflow continues Running, and Signals, Queries, and Updates on the parent Workflow are unaffected.
  • No further retries are scheduled. The Temporal Service stops scheduling retries. This is enforced server-side, not by the SDK.
  • Workflow code has no visibility into Activity Operations. Pause doesn't produce an Event History event, so the Workflow can't detect or react to it. See Observability.
  • Heartbeating determines whether the in-flight execution is interrupted:
    • Activities with Heartbeat are interrupted on their next Heartbeat. The SDK raises a Pause-specific error, and the Activity can catch this to clean up resources before exiting.
    • Activities without Heartbeat continue running to completion. If the execution succeeds, the result is delivered to the Workflow normally. If it fails, no retry is scheduled. Pause takes effect after the in-flight execution ends.
  • Pause is idempotent. Pausing an already-Paused Activity has no effect. Pausing a completed Activity returns an error.

CLI usage

temporal activity pause \
--workflow-id my-workflow \
--activity-id my-activity \
--reason "Downstream API is down, pausing until recovery"

See the CLI reference for temporal activity pause for all options.

Detect Pause in Activity code

Activities with Heartbeat can detect that an interruption was caused by Pause rather than a timeout or Workflow Cancellation. A Paused Activity resumes later. A Cancelled Activity doesn't. Your Activity code may need to handle these cases differently, for example releasing held resources on Pause while preserving them on Cancellation, or vice versa.

SDKVersionHow to detect Pause
Gov1.34.0+Catch activity.ErrActivityPaused
Javav1.29.0+Catch ActivityPausedException
TypeScriptv1.12.3+Check cancellationDetails.paused === true
Pythonv1.12.0+Check cancellation_details().paused on asyncio.CancelledError
.NETv1.7.0+Check CancellationDetails.IsPaused on OperationCanceledException

Interaction with Workflow Pause

Workflow Pause and Activity Pause are independent. Both stop Activity retries, but they must be Unpaused separately.

  • Workflow Pause blocks retries but doesn't interrupt in-flight executions via Heartbeat. Activity Pause does.
  • If both are active, both must be Unpaused before the Activity resumes.

Important considerations

  • A Paused Activity can still time out. Pause doesn't stop or extend the Schedule-To-Close Timeout. Use update-options to adjust the timeout if needed.
  • Pause won't interrupt an Activity that doesn't Heartbeat. The current execution runs to completion, which could take up to the full Start-To-Close Timeout.

Limitations

  • Pause operates on individual Activities by ID within a single Workflow. Unlike Unpause, Reset, and Update Options, there's no --query flag. To pause multiple Activities, issue separate commands for each Activity ID.
  • No Namespace-wide query for Paused Activities. You must know the Workflow ID. See Observability.

Unpause

Unpause resumes a Paused Activity Execution.

When to Unpause

  • The downstream service or dependency that caused you to Pause has recovered.
  • A code deploy or configuration change is complete and the Activity is safe to retry.
  • You Paused an Activity for investigation and are ready to let it proceed.

What happens when you Unpause an Activity

  • The Activity is rescheduled immediately. Any remaining retry backoff is discarded. The next execution starts right away.
  • Attempt count and Heartbeat data are preserved by default. The Activity resumes from where it left off. Use --reset-attempts or --reset-heartbeats on the CLI to clear these, or use Reset to restart from attempt 1.

Unpause is idempotent. Unpausing an Activity that isn't Paused has no effect. Unpausing an Activity that has already completed returns an error.

CLI usage

temporal activity unpause \
--workflow-id my-workflow \
--activity-id my-activity

See the CLI reference for temporal activity unpause for all options, including --reset-attempts and --reset-heartbeats to clear state on resume.

Important considerations

  • Unpausing many Activities at once can overwhelm downstream services. If you Paused multiple Activities because a service was down, Unpausing them all at the same time sends all retries simultaneously. Consider Unpausing in batches to avoid overwhelming a recovering service.
  • Unpausing doesn't override Workflow Pause. If the parent Workflow is also Paused, Unpausing the Activity alone isn't enough. Both must be Unpaused before the Activity resumes. See Interaction with Workflow Pause.
  • Unpausing doesn't reset the attempt count. The Activity retries from its current attempt number. Use Reset to restart from attempt 1.
  • A Paused Activity can time out before you Unpause it. The Schedule-To-Close Timeout isn't stopped or extended while Paused. Use update-options to extend the timeout before Unpausing if needed.
  • Unpause doesn't interrupt or duplicate an in-flight execution. If an Activity without Heartbeat is still running when you Unpause, it continues to completion. The Temporal Service doesn't schedule a concurrent execution. If the in-flight execution fails, the next retry proceeds normally.

Reset

Reset clears an Activity's retry state and schedules a fresh execution.

When to Reset

  • An Activity has exhausted most of its retries, and you want to give it a fresh set after fixing the underlying issue.
  • A Paused Activity needs to start clean after a configuration change or code deploy.
  • You want to clear accumulated retry backoff and retry immediately instead of waiting for the next backoff interval.
  • A batch of Activities failed due to a transient issue and you want to restart them all with staggered jitter.

What happens when you Reset an Activity

  • The attempt count resets to 1. The Activity gets a full set of retry attempts regardless of how many it had used.
  • Retry backoff is discarded. If the Activity was in a backoff wait, it's rescheduled to run immediately.
  • If the Activity is Paused, Reset also Unpauses it. Use --keep-paused to Reset the attempt count without resuming execution. With --keep-paused, the attempt count and Heartbeat data (if --reset-heartbeats) are reset, but the Activity stays Paused. No retry is scheduled until you Unpause separately.
  • Resetting an Activity doesn't affect the parent Workflow. The Workflow continues Running, and Signals, Queries, and Updates on the parent Workflow are unaffected.
  • Workflow code has no visibility into Activity Operations. Reset doesn't produce an Event History event, so the Workflow can't detect or react to it. See Observability.
  • Heartbeating determines whether an in-flight execution is interrupted:
    • Activities with Heartbeat are interrupted on their next Heartbeat. The SDK may raise a Reset-specific error so the Activity can clean up before exiting. The next execution starts at attempt 1.
    • Activities without Heartbeat continue running to completion. Reset doesn't cancel, interrupt, or schedule a concurrent execution. If the Activity was already retrying, the Temporal Service rejects the current execution's result because Reset changed the expected attempt number, and a fresh execution is scheduled after the Start-To-Close Timeout expires. If it was on its first execution, a successful result is still delivered to the Workflow normally.
  • Reset is idempotent. Resetting an Activity that's already at attempt 1 with no backoff has no effect. Resetting a completed Activity returns an error.

CLI usage

temporal activity reset \
--workflow-id my-workflow \
--activity-id my-activity

# Reset retry state but don't resume yet
temporal activity reset \
--workflow-id my-workflow \
--activity-id my-activity \
--keep-paused

See the CLI reference for temporal activity reset for all options, including --reset-heartbeats and bulk mode via --query.

Detect Reset in Activity code

Activities with Heartbeat can detect that an interruption was caused by Reset rather than a timeout or Workflow Cancellation. A Reset Activity is retried from attempt 1. A Cancelled Activity isn't. Your Activity code may need to handle these cases differently, for example saving partial progress on Reset while discarding it on Cancellation.

SDKHow to detect Reset
Goactivity.GetCancellationDetails(ctx).Cause() returns activity.ErrActivityReset
JavaCatch ActivityResetException
TypeScriptCatch ApplicationFailure with error.type === "ActivityReset"
PythonCheck cancellation_details().reset on asyncio.CancelledError
.NETCheck CancellationDetails.IsReset on OperationCanceledException

Important considerations

  • A Reset Activity can still time out. Reset doesn't restart the Schedule-To-Close Timeout. The deadline is calculated from when the Activity was originally scheduled. Use update-options to extend the timeout before or after Reset.
  • Heartbeat details are preserved by default. If your Activity uses Heartbeat details for progress tracking and you want a clean restart, pass --reset-heartbeats.
  • Reset won't interrupt an Activity that doesn't Heartbeat. The current execution runs to completion, which could take up to the full Start-To-Close Timeout. If the Activity had already retried (attempt > 1), the Temporal Service rejects the current execution's result because Reset changed the expected attempt number. The Activity waits for its Start-To-Close Timeout to expire before a new execution is scheduled.
  • --restore-original-options restores the Activity's original configuration. It reverts timeouts, Retry Policy, and Task Queue to the values from when the Activity was first scheduled.
  • Bulk Reset can overwhelm downstream services. When using --query to Reset Activities across many Workflows, use --jitter to stagger the restart times.

Update Options

Update Options changes an Activity's runtime configuration without restarting it.

When to Update Options

  • The Schedule-To-Close Timeout is about to expire on a Paused Activity, and you need to extend it before Unpausing.
  • An Activity's Retry Policy needs tuning based on observed failure patterns (for example, increasing the backoff interval or maximum attempts).
  • You want to move an Activity to a different Task Queue to route it to a specific set of Workers.
  • You need to restore an Activity's original configuration after a temporary override.

What happens when you Update an Activity's Options

You can change timeouts (Schedule-To-Close, Start-To-Close, Schedule-To-Start, Heartbeat), Retry Policy (initial interval, maximum interval, backoff coefficient, maximum attempts), and Task Queue. Only the fields you specify are changed. All other options remain unchanged.

  • If the Activity is waiting for retry (scheduled), the new options take effect immediately. Any pending retry timer is regenerated with the updated configuration.
  • If the Activity is currently running, the new options are stored but take effect on the next execution. The in-flight execution isn't interrupted.
  • If the Activity is Paused, the new options are stored immediately. They take effect when the Activity is Unpaused and the next execution starts.
  • Workflow code has no visibility into Activity Operations. Update Options doesn't produce an Event History event, so the Workflow can't detect or react to it. See Observability.

Update Options is idempotent. Updating an Activity with the same values it already has produces no change. Updating options on an Activity that has already completed returns an error.

CLI usage

temporal activity update-options \
--workflow-id my-workflow \
--activity-id my-activity \
--schedule-to-close-timeout 24h

See the CLI reference for temporal activity update-options for all options, including Retry Policy, Task Queue, and bulk mode via --query.

Important considerations

  • Changes to a running Activity take effect on the next execution, not the current one. If you need the change to apply immediately, the Activity must finish or fail its current execution first.
  • --restore-original-options is batch-only. This flag only works with --query. It's silently ignored in single-workflow mode. It can't be combined with other option changes in the same command.

Limitations

  • Update Options is CLI and gRPC only. It's not available in the UI.

Standalone Activity operator commands

Standalone Activity operator commands use the same Activity operation concepts as Workflow Activities, but they target a top-level Standalone Activity instead of an Activity scheduled by a Workflow.

  • To target a Standalone Activity, identify the Activity by Activity ID.
  • If the Activity ID has multiple runs, use the Activity Run ID to target one run.
  • Do not provide a Workflow ID when you are targeting a Standalone Activity.
  • These commands operate on one Standalone Activity Execution at a time.
  • Workflow Run Timeout and Workflow Execution Timeout don't apply because a Standalone Activity is not part of a Workflow Execution.
  • Standalone Activities still use Activity timeouts: Schedule-To-Close, Schedule-To-Start, Start-To-Close, and Heartbeat.
  • Schedule-To-Close is the overall Activity Execution deadline. It keeps running while the Activity is Paused.
  • Start-To-Close and Heartbeat timeouts apply only while a Worker is running an attempt.
  • If the Activity has a Start Delay, the first dispatch can't happen before ScheduleTime + StartDelay.
  • Start Delay also affects the Schedule-To-Close and Schedule-To-Start deadlines for the first dispatch.
  • Start Delay stops affecting dispatch after the first Worker has picked up the Activity.
  • If an operation reissues a dispatch task, the task is scheduled at the later of the operation time, any remaining Start Delay, and any preserved retry backoff.
  • A cancel request can still be accepted while Pause or Reset is pending; after cancellation is pending, cancellation takes precedence over operator commands.
  • Terminal Activity states can't be Paused, Unpaused, Reset, or updated.
  • The commands return NotFound if the targeted Standalone Activity Execution doesn't exist.

Pause a Standalone Activity

Pause prevents the Temporal Service from dispatching another attempt for a Standalone Activity.

  • If the Activity is SCHEDULED:
    • Pause moves it to PAUSED.
    • Pause invalidates any pending dispatch task.
    • No Worker receives it until it is Unpaused or Reset without keep_paused.
  • If the Activity is STARTED:
    • Pause moves it to PAUSE_REQUESTED.
    • The running Worker keeps its task token.
    • Pause doesn't invalidate Start-To-Close or Heartbeat timeout tasks.
    • If the Activity heartbeats:
      • The next heartbeat response reports that the Activity is paused.
    • If the Activity completes successfully:
      • The Activity completes normally.
    • If the Activity fails retryably:
      • The Activity moves to PAUSED instead of dispatching the next retry.
    • If the Activity fails non-retryably:
      • The Activity fails instead of moving to PAUSED.
    • If the Activity reaches Start-To-Close Timeout:
      • The retry path consumes the pause request and the Activity moves to PAUSED when retries remain.
    • If the Activity reaches Heartbeat Timeout:
      • The retry path consumes the pause request and the Activity moves to PAUSED when retries remain.
  • When a pause request is consumed by a failed or timed-out attempt, the attempt count is incremented before the Activity lands in PAUSED.
  • Pause doesn't stop the Schedule-To-Close Timeout.
  • If the Activity is PAUSED:
    • It can time out with Schedule-To-Close Timeout. TODO: list all combinations and iteractions for pause and SAA timeouts
  • Pause is rejected:
    • If cancellation is already pending. TODO: List out all scenarios where a pause will be rejected TODO: list out all scenarios where a cancellation is rejected
    • If the Activity is already Paused, unless the request is a duplicate with the same request ID.
    • If reset is already pending.
  • Pause records pause metadata such as identity, reason, request ID, and pause time.

Unpause a Standalone Activity

Unpause resumes a Standalone Activity that is PAUSED or has a pending pause request.

  • If the Activity is PAUSED:
    • Unpause:
      • moves it back to SCHEDULED.
      • creates a new dispatch task.
      • creates a new Schedule-To-Start timeout task when Schedule-To-Start Timeout is set.
    • If retry backoff is still in the future:
      • Unpause honors the remaining retry backoff by default.
    • If the retry backoff came from a Worker-provided NextRetryDelay:
      • Unpause honors that retry delay by default.
    • If retry backoff has already elapsed:
      • Unpause can dispatch immediately.
    • Unpause doesn't clear the current retry interval unless reset_attempts is set.
    • If reset_attempts is set:
      • Unpause:
        • resets the attempt count to 1.
        • clears the current retry interval.
    • If reset_heartbeat is set:
      • Unpause clears the stored heartbeat time and heartbeat details.
    • If jitter is set:
      • Unpause delays dispatch by a random duration within the jitter window.
    • If the Activity still has an unexpired Start Delay and no Worker has picked it up yet:
      • Unpause honors the Start Delay.
  • If the Activity is PAUSE_REQUESTED:
    • Unpause moves it back to STARTED.
    • The running Worker keeps its task token.
    • Unpause doesn't schedule a new attempt.
    • Unpause doesn't invalidate the current Start-To-Close or Heartbeat timeout tasks.
    • If cancellation is requested before Unpause:
      • Unpause is a no-op.
  • If the Activity is RESET_REQUESTED because Reset with keep_paused was requested while the Activity was PAUSE_REQUESTED:
    • Unpause clears the keep_paused intent but keeps the reset pending.
    • The running Worker continues to see the pending reset on heartbeat, but no longer sees the Activity as paused.
    • The reset lands in SCHEDULED instead of PAUSED when the running attempt yields.
  • Unpausing an Activity that is not Paused is a no-op.
  • Unpausing a terminal Activity is rejected.

Reset a Standalone Activity

Reset clears retry state and schedules, or requests, attempt 1 for a Standalone Activity.

  • If the Activity is SCHEDULED:
    • Reset moves it to SCHEDULED at attempt 1.
    • If the Activity is in retry backoff:
      • Reset discards the retry backoff.
    • Reset creates a new dispatch task.
    • Reset creates a new Schedule-To-Start timeout task when Schedule-To-Start Timeout is set.
    • If the Activity has never been picked up and still has an unexpired Start Delay:
      • Reset honors the Start Delay.
    • If jitter is set:
      • Reset delays dispatch by a random duration within the jitter window.
  • If the Activity is PAUSED and keep_paused is false:
    • Reset moves it to SCHEDULED at attempt 1.
    • Reset unpauses the Activity.
  • If the Activity is PAUSED and keep_paused is true:
    • Reset leaves it PAUSED at attempt 1.
    • No new dispatch task is created until a later Unpause.
  • If the Activity is STARTED:
    • Reset moves it to RESET_REQUESTED.
    • Reset is deferred until the running attempt yields.
    • The running Worker keeps its task token.
    • The next heartbeat response reports that the Activity was reset.
    • If the Activity completes successfully:
      • The Activity completes normally and the reset doesn't apply.
    • If the Activity fails:
      • The reset is applied and the next attempt is attempt 1.
    • If the Activity fails non-retryably:
      • The reset is still applied and the next attempt is attempt 1.
    • If the Activity has no retries remaining:
      • The reset is still applied and the next attempt is attempt 1.
    • If the Activity reaches Start-To-Close Timeout:
      • The reset is applied and the Activity moves to SCHEDULED at attempt 1.
    • If the Activity reaches Heartbeat Timeout:
      • The reset is applied and the Activity moves to SCHEDULED at attempt 1.
  • If the Activity is PAUSE_REQUESTED and keep_paused is false:
    • Reset clears the pause request.
    • Reset is deferred until the running attempt yields.
    • The Activity dispatches attempt 1 when the reset is applied.
  • If the Activity is PAUSE_REQUESTED and keep_paused is true:
    • Reset is deferred until the running attempt yields.
    • The Activity lands in PAUSED at attempt 1 when the reset is applied.
    • The next heartbeat response reports both that the Activity was reset and that the Activity is paused.
  • Reset doesn't stop the Schedule-To-Close Timeout.
  • Reset doesn't create a new Schedule-To-Close clock.
  • Schedule-To-Close continues to use the Activity Execution's first dispatch time.
  • After a reset dispatches a new attempt, the attempt's scheduled time reports the reset attempt's dispatch time, not the original first-attempt dispatch time.
  • Reset discards retry backoff, but it still respects any remaining Start Delay before the first Worker pickup.
  • If reset_heartbeat is set:
    • Reset clears stored heartbeat time and heartbeat details.
    • If the Activity is non-running:
      • Heartbeat state is cleared immediately.
    • If the Activity is running:
      • Heartbeat state is cleared when the reset is applied to the next attempt.
  • If reset_heartbeat is not set:
    • Heartbeat details are preserved.
  • If restore_original_options is set:
    • Reset restores the options from when the Standalone Activity was created.
    • Reset can restore Task Queue, Schedule-To-Close Timeout, Schedule-To-Start Timeout, Start-To-Close Timeout, Heartbeat Timeout, Retry Policy, Priority, and Start Delay.
    • Subfield updates made before Reset don't change the saved original options.
    • Start Delay is restored only if the Activity has not started its first attempt.
    • If the Activity is non-running:
      • The restore is applied immediately.
    • If the Activity is running:
      • The restore is deferred until the reset is applied to the next attempt.
      • Restored timeouts don't shorten or otherwise disturb the in-flight attempt.
      • If the Activity completes successfully after the reset is requested:
        • The Activity completes and the restored options are never applied.
  • Reset is rejected:
    • If cancellation is already pending.
    • If another reset is already pending.
    • If the Activity is terminal.

Update Standalone Activity options

Update Options changes a Standalone Activity's stored runtime options.

  • Update Options can change:
    • Task Queue name.
    • Schedule-To-Close Timeout.
    • Schedule-To-Start Timeout.
    • Start-To-Close Timeout.
    • Heartbeat Timeout.
    • Retry Policy.
    • Retry Policy initial interval.
    • Retry Policy backoff coefficient.
    • Retry Policy maximum interval.
    • Retry Policy maximum attempts.
    • Priority.
    • Priority Key.
    • Fairness Key.
    • Fairness Weight.
    • Start Delay while the Activity is still in its delay window.
  • Update Options requires an update mask unless restore_original is used.
  • If restore_original is set:
    • restore_original can't be combined with an update mask.
    • restore_original restores the options from when the Standalone Activity was created.
    • restore_original is applied immediately to the active Standalone Activity Execution.
    • restore_original restores Start Delay only if the Activity has not started its first attempt.
  • Updated timeout values are validated and normalized after the update.
  • If Schedule-To-Close Timeout is updated:
    • Update Options reissues the Schedule-To-Close timeout task at the new deadline.
    • Stale Schedule-To-Close timeout tasks from before the latest options update are ignored.
    • If Schedule-To-Close Timeout is disabled:
      • Previously scheduled Schedule-To-Close timeout tasks are ignored.
    • Shortening Schedule-To-Close Timeout can cause the Activity to time out sooner.
    • Extending Schedule-To-Close Timeout can allow future retries that would otherwise be blocked by the Activity deadline.
  • If Start-To-Close Timeout or Heartbeat Timeout is updated for a running attempt:
    • Update Options reissues the Start-To-Close timeout task for that attempt.
    • Update Options reissues the Heartbeat timeout task for that attempt.
    • Updated running-attempt timers are anchored to the current attempt's start time or last heartbeat time.
    • Updating Start-To-Close or Heartbeat Timeout can affect the current running attempt.
  • If Task Queue is updated:
    • The change affects future dispatches, not a task already picked up by a Worker.
  • If Retry Policy is updated:
    • Retry Policy subfield updates are merged with the existing Retry Policy and then validated.
    • The update is rejected if the merged Retry Policy is invalid.
    • Update Options recalculates the current retry interval only when the Activity is SCHEDULED or PAUSED, is waiting in retry backoff, and the current retry interval was derived from the Retry Policy.
    • Update Options doesn't recalculate a Worker-provided NextRetryDelay that is already scheduled.
  • If an unrelated field is updated:
    • Update Options doesn't recalculate the current retry interval.
  • If restore_original is set and the Activity is SCHEDULED or PAUSED:
    • Update Options can recalculate the current retry interval when the interval was derived from the Retry Policy.
  • If the Activity is SCHEDULED:
    • Update Options reissues dispatch and Schedule-To-Start timeout tasks.
    • If the Activity is in retry backoff:
      • Reissued dispatch and Schedule-To-Start timeout tasks keep the existing retry deadline unless the retry interval is recalculated by a Retry Policy update or cleared by another operation.
  • If the Activity is PAUSED:
    • Update Options stores the new options but doesn't dispatch the Activity.
    • Updated Retry Policy values can affect when the Activity dispatches after Unpause.
  • If the Activity is PAUSE_REQUESTED:
    • Update Options reissues running-attempt timers so Start-To-Close and Heartbeat timeouts continue to be enforced.
  • If the Activity is RESET_REQUESTED:
    • Update Options reissues running-attempt timers so Start-To-Close and Heartbeat timeouts continue to be enforced.
  • If cancellation is pending:
    • Update Options is still allowed.
    • Updated Start-To-Close and Heartbeat timers can still affect the running attempt.
  • If Start Delay is updated:
    • Start Delay can be updated only while the Activity is SCHEDULED and the first dispatch time is still in the future.
    • Start Delay can't be updated after the first dispatch delay has elapsed.
    • Start Delay can't be updated after a Worker has picked up the first attempt.
    • A nonzero Start Delay update requires Start Delay to be enabled for the Namespace.
  • Update Options doesn't reset attempts.
  • Update Options doesn't clear heartbeat details.
  • Updating a terminal Activity is rejected.

Observability

Activity Operations have a limited audit trail because they are not recorded in a Workflow's Event History. However, you can use the CLI and the UI to check Activity state and find Paused Activities for running Workflows.

Check Activity state

temporal workflow describe shows the current state of each pending Activity, including whether it's Paused, its current attempt count, and last failure. The UI shows who performed an operation, when, and why (if a --reason was provided).

Find Paused Activities

The TemporalPauseInfo Search Attribute is filterable within a Workflow.

There's no Namespace-wide query to find all Paused Activities across Workflows. You must know the Workflow ID.

Audit trail

Activity Operations don't produce Event History events. There is no record of a Pause, Reset, or option change in the Workflow's Event History. Nothing that reads the Event History - Workflow code, Replays, or external tooling - will see that an Operation occurred.

Evidence of an Operation is gone when the Activity completes or the Workflow closes. There's no persistent record that an Activity was Paused, Reset, or had its options changed.

The only way to confirm the current state of an Activity is temporal workflow describe or the UI.