# 競合・再送・復帰

通信が途切れたり、他の更新と競合したりしたときに、結果を確かめて、安全にやり直す方法です。更新は、確認しないまま再実行すると、二重に実行されたり、他の人の変更を上書きしたりするおそれがあります。

## 結果が不明なとき

タイムアウト、接続の断、`OUTCOME_UNKNOWN`は、操作が実行されなかったことの証明では、ありません。実行されている場合があります。

1. 対象、本文、期待する版、`Idempotency-Key`を、保持しておきます。
2. 同じ操作の照会、または、同じ内容の再送で、確定した結果を確認します。
3. 結果が分かるまで、別のキーで、同じ操作をもう一度実行しません。

結果の確認の方法は、操作によって違います。

| 操作 | 確認の方法 |
| --- | --- |
| MCPの取込 | `imports_status`で、計画の状態を確認する |
| アプリの適用 | 同じ`fingerprint`と、同じキーで、再送する |
| 行の更新・削除 | 同じキーと本文で再送し、現在の行の版を確認する |

権限が失効した後など、確認できないときは、環境管理者に問い合わせてください。

## 412（版の競合）

412 `VERSION_CONFLICT`は、期待した版と、現在の版が一致しないことを示します。他の更新が、先に行われています。

1. 現在の権限で、対象を再取得します。
2. 最新の値と、利用者が変更しようとした内容を、比べます。
3. 利用者が解決した、新しい操作にだけ、新しい`Idempotency-Key`を付けます。

期待する版だけを、自動で置き換えて、上書きしないでください。行が削除されたり、見えなくなったりしているときは、404または403として扱います。

## 認証の期限切れ・失効

- 401で、トークンの期限切れなら、更新または再ログインを行います。更新を、無制限に繰り返しません。
- 失効や、期限切れが続くときは、利用者の再ログインへ戻ります。
- 403のときは、権限を広げようとせず、必要なMFAの実施、または管理者への確認へ案内します。

## 再送のときの権限

認証が切れたり、権限が変わったりしても、再送のときは、その時点の権限で評価されます。

詳しい再送の方式は、[共通ルール](concepts.md)にあります。エラーの一覧は、[エラーと再試行](errors.md)にあります。
