diff --git a/openspec/changes/attachment-fetch/design.md b/openspec/changes/attachment-fetch/design.md index 87c7fb1..a3c0e88 100644 --- a/openspec/changes/attachment-fetch/design.md +++ b/openspec/changes/attachment-fetch/design.md @@ -148,3 +148,11 @@ может не отдать размер; отказывать в таком вложении — терять файл. Цена ошибки: агент читает до 10 МБ лишнего. 13. 2026-10-22 — **пустое вложение принимается от агента.** Обоснование: в Jira бывают пустые файлы; иначе вечный `failed`. Цена ошибки: нет. +14. 2026-10-22 — **`command_id`/`batch_id` в состоянии вложения: при `fetching` — у живой (`queued`/`claimed`) команды, иначе у + последней `fetch_attachment` по этому id; `ready` требует и строку `attachment_file`, и файл в хранилище.** Обоснование: + повторный `POST …/fetch` должен вернуть ту же команду, что идёт, а не историческую; строка без файла — «не скачано» + (решение 2). Цена ошибки: интерфейс покажет чужой command_id в нейтральных состояниях — правка одной функции. + (R-1, правило исполнителя Task 2.) +15. 2026-10-22 — **при повторе имени «самое новое» вложение — максимум по `(created_at, число id, id)`.** Обоснование: + детерминированный выбор при равных временах (Jira отдаёт id по возрастанию). Цена ошибки: ссылка по имени укажет на + соседнее вложение — исправляется порядком ключа.