Optimistic concurrency
Resources expose an integer aggregate version and a strong ETag such as "v3". Updates and state transitions send the most recently read ETag in If-Match. Child workflow changes advance the parent aggregate version.
A stale write returns 412 version_conflict. Reread the complete aggregate, compare the new state with intended changes, obtain user input if intent is ambiguous, and retry with the new ETag and the same idempotency key only when the payload remains identical.