mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-08-11 07:19:03 +00:00
update/pause/resume read the aggregate and persist it whole; a dispatch or completion committing between those operations previously got overwritten by the stale snapshot -- rolling back next_run_at, run_count, and last_run_id, after which the next poll re-launches an already-executed occurrence. - ScheduledTask gains a `version` token owned by the storage write path; every committed write (save CAS, record_launch, record_completion, claim_due, cancel_stuck_once_tasks) increments it. - `save()` is now a compare-and-set on that version: a stale write raises the new ConcurrentUpdateError instead of committing. - The service retries the read-modify-write (re-applying the aggregate transitions to a fresh read) up to 3 times, then surfaces the conflict for the router to map to a retryable 409. Also exports LaunchIndeterminateError from the package root, missed in the previous commit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>