async_conflict (409)
An async-match turn lost the optimistic-concurrency check — the `version` didn't match the current one (another turn landed first).
GET /async/{id} for the latest state + version, recompute your move against it, then retry ONCE with that version. Do not loop.