Andrey Epifancev 93e5595c40 chore(agent): версия 11, README и решения агента для bug-and-attachments (#31)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 01:55:08 +04:00

6.8 KiB
Raw Blame History

agent-v11-bug-attachments — решения агента

Спека и дизайн изменения — в jira-hub/openspec/changes/bug-and-attachments/ (issue aep/jira-hub#43, aep/jira-agent#31). Агентская часть — раздел «Агент v11» дизайна хаба и требования agent «Тип задачи и вложения» (ADDED) и «Чтение состояния» (MODIFIED: M-1, M-2 из aep/jira-agent#30).

Решения владельца 15.10.2026 (brainstorming jira-hub#43): файл приходит только из MCP; обязательные поля «Ошибки» — как у «Задачи»; файл хранится в хабе, агент забирает его отдельным запросом GET /agent/files/{sha256} (base64 в JSON).

Decisions made without discussion

Решения 1–8 записаны в jira-hub/openspec/changes/bug-and-attachments/design.md (раздел «Decisions made without discussion»); здесь — только решения агентской части.

Маркер Дата Решение Обоснование Цена ошибки
R-20 2026-10-15 Любой 404 от GET /agent/files/{sha} — failed «файл удалён с хаба, загрузите заново», без разбора кода no_file в теле Спека hub-api: у маршрута 404 бывает только no_file; агент v11 публикуется после выкатки хаба с маршрутом (design «Выкатка», шаги 1 и 3) Если хаб без маршрута (откат хаба) — вводящий в заблуждение текст «загрузите заново» вместо «нет маршрута»; повторная загрузка не поможет, причина видна по логу хаба
R-21 2026-10-15 Таймаут GET /agent/files — обычный timeout агента (60 с), не поднимается до 120 с, как у загрузки в Jira design Risks: круг папки для файла 10 МБ (≈13,4 МБ JSON) — секунды, «таймаут вызова агента 60 с с запасом»; таймаут — ConnectionError → повтор как обрыв связи с хабом На медленной папке большой файл не успеет за 60 с: 4 попытки и failed «результат неизвестен»; лечится timeout в agent.json
R-22 2026-10-15 Ответ хаба на файл с кодом 2xx, но не JSON — временный сбой («ответ на файл не JSON») без текста HttpError Текст Http содержит начало тела, то есть base64 содержимого, а спека запрещает содержимое в журнале и логе; обрезанный ответ — сбой пути, как повреждение Диагностика беднее: начала тела в ошибке нет, причину искать по логу хаба/реле
R-23 2026-10-15 В filename="…" кавычка и переводы строк кодируются как у браузеров (%22, %0D, %0A); при поиске уже приложенного вложения сравниваются обе формы имени — исходная и «браузерная» Хаб запрещает в имени только / и \; сырая кавычка ломает заголовок части; если Jira сохранит имя в закодированной форме, без второй формы каждый повтор команды создавал бы дубль Вложение с такими символами в Jira может называться …%22…; другое вложение, чьё имя совпало с «браузерной» формой, будет принято за уже приложенное
R-24 2026-10-15 Ответ Jira на загрузку не список или без id у первого элемента — failed «Jira не вернула id вложения в ответе на загрузку», без повтора Спека: результат — attachment_id из ответа; повтор команды человеком найдёт вложение по имени и размеру и вернёт done с id Если Jira на самом деле не сохранила вложение, failed без повтора требует ручного повтора команды
R-25 2026-10-15 Загрузка вложения идёт через тот же повтор 429/503 по Retry-After, что и остальные вызовы Jira (JiraClient._retry) 429/503 — запрос не обработан, повтор безопасен; спека «Ограничение темпа и 429» не делает исключений для записи 503 от прокси после фактической записи даст второе вложение; вероятность низкая, лишнее удаляется руками
R-26 2026-10-15 Тип задачи проверяется до поиска дубля в ensure_issue: без настройки типа — ни одного вызова Jira, даже если задача с той же темой уже есть Спека: «failed без вызова Jira»; настройку могли убрать между постановкой и выдачей (design решение 6) Повтор ensure_issue по уже созданной задаче после удаления настройки типа даёт failed вместо done с найденным ключом
R-27 2026-10-16 Трейлер коммитов исполнения — Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>, а не Opus 5.5 из текста плана Указание окружения об атрибуции приоритетнее плана; план исполняет Sonnet Неверное имя модели в трейлере 4–5 коммитов; правится при rebase

Наблюдения вне ревью

  • O-1: README к началу исполнения утверждал «сейчас 9», хотя AGENT_VERSION был 10 (v10 не обновила пункт); исправлено вместе с обновлением до 11.
  • O-2: полный набор занимает ≈2 минуты (230 → 262 теста), дольше таймаута foreground-команды; прогоны task-done запускались в фоне.