Таймаут, попытка и право на повтор — три разных состояния.
Таймаут означает: ответ не пришёл вовремя.
Попытка означает: система зафиксировала обращение к провайдеру.
Право на повтор появляется только после проверки результата первой попытки.
Если запрос мог успеть создать внешний объект, состояние остаётся UNKNOWN. Новый вызов с новым ключом может сделать дубль.
Безопасная последовательность:
1. сохранить точный пакет и idempotency key; 2. заморозить автоматический повтор; 3. прочитать состояние провайдера; 4. записать канонический факт или доказанное отсутствие объекта; 5. отдельно разрешить новую попытку.
UNKNOWN — не ошибка интерфейса. Это честная граница знания системы.
Где в вашем процессе таймаут всё ещё автоматически превращается в «можно повторить»?