github durable-workflow/workflow 2.24.0

one hour ago

Changes

  • Heartbeats no longer grow run history with every call (#870). Each heartbeat still renews the lease, moves the heartbeat deadline and stores the latest progress on the attempt. An ActivityHeartbeatRecorded event is written only when progress changed since the last recorded event and at least max(heartbeat timeout, 60 seconds) has passed. Heartbeats without progress write none, and progress not yet recorded is written once when the attempt closes. Run detail, Waterline and history export read the latest progress from the attempt. Liveness, timeouts and retries are unchanged, and older histories replay and export as before. Expect far fewer heartbeat events.
  • Schedules (#876). Re-applying an unchanged schedule records nothing and keeps the next fire time and its jitter. changed_fields lists only real changes, and only a spec or jitter change moves the next fire. Creating a schedule with a taken id, including a deleted or max_runs_exhausted one, raises Workflow\V2\Exceptions\ScheduleAlreadyExistsException, matching the Server's 409 schedule_already_exists.
  • Operator metrics (#861). runs.replay_blocked, oldest_replay_blocked_at and max_replay_blocked_age_ms count open runs whose workflow task cannot replay, and a new advisory replay_blocked_runs health check warns while any exist.

Upgrade

Run migrations. A new migration adds nullable last_heartbeat_progress, last_heartbeat_progress_at and last_heartbeat_recorded_at columns to activity_attempts. It is additive, with no backfill. Dependency floors are unchanged.

Don't miss a new workflow release

NewReleases is sending notifications on new releases.