Дельты commands, hub-api, mcp, data-model, agent: issue_type bug с настройкой
issue_types.bug, хранилище файлов хаба (POST /files, GET /agent/files/{sha256}),
команда ensure_attachment, path в MCP batch_create, агент v11; заодно R-1
(#46) и M-1/M-2 из aep/jira-agent#30.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6.0 KiB
Why
15.10.2026 при заведении AURORA-1639 (замечания тестирования и файл ОСВ, не прошедший распознавание) мост не справился
с двумя вещами, и владелец доделывал руками в Jira: задачу нельзя завести типом «Ошибка» (ensure_issue принимает только
task/epic), и к задаче нельзя приложить файл — такой команды нет. Баги из тестирования в AURORA заводятся типом
«Ошибка», и к ним почти всегда прикладываются файлы (ОСВ, скриншоты). Issues: aep/jira-hub#43, aep/jira-agent#31.
Решения владельца 15.10.2026 (brainstorming): файл приходит только из MCP (локальный путь в чате), веб-морда загрузку пока не умеет; обязательные поля у «Ошибки» те же, что у «Задачи»; файл хранится в хабе, агент забирает его отдельным запросом (вариант A), а не через общую папку напрямую и не base64 в параметрах команды.
What Changes
- Тип
bugвensure_issue: настройкаissue_types.bug = {name, id}(idнеобязателен — агент шлёт{name}), ключи конфигаissue_type_bug/issue_type_bug_idвinit; без настройки хаб отвергает пакет 422, агент — ошибкой конфигурации вместо{"name": null}. - Хранилище файлов в хабе:
POST /files {content: base64}→{file: sha256, size}, каталогfiles/(0700), предел 10 МБ (413), атомарная запись, одна копия на содержимое, уборка файлов старше 30 дней без ссылок активных команд.GET /agent/files/{sha256}— файл агенту (base64 в JSON: проходит и через реле папки, и по HTTP). - Команда
ensure_attachment {key, file, filename}:key— ключ илиnew:<n>; хаб проверяет, что файл загружен, при выдаче дописываетsize; агент ищет вложение с тем же именем и размером, иначе скачивает файл у хаба, сверяет sha256 и загружаетmultipart/form-data. Пауза 30 с; по состоянию зеркала не подтверждается. - MCP
batch_create: уensure_attachmentвместоfileможноpath— MCP сам загружает файл и подставляетfileиfilename. Одним пакетом: создать «Ошибку» → поставить в спринт → приложить файл. - Описание параметров и ошибки 422 (R-1 из aep/jira-hub#46): закрепить в спеке поведение, сделанное в #44 —
описание
batch_createиз описания параметров в коде, «ожидаются …» в ошибках валидации. - Агент v11 (
AGENT_VERSION = 11, самообновлением): тип из настроек с ошибкой конфигурации,do_ensure_attachment, multipart на stdlib; заодно из aep/jira-agent#30 — комментарий безidотбрасывается с логом (M-1), 403/404 при дочитывании комментариев не роняетrefresh(M-2).
Capabilities
New Capabilities
Modified Capabilities
commands: типbug; командаensure_attachment(таблица, темп, подтверждение); проверки постановки; описание параметров и текст ошибок валидации.hub-api:POST /files,GET /agent/files/{sha256}, хранилище файлов и его уборка, 422 уPOST /batches.mcp: описаниеbatch_createиз кода;pathуensure_attachment.data-model:issue_types.bugи ключи конфига.agent: тип из настроек, выполнениеensure_attachment, устойчивость дочитывания комментариев, v11.
Non-Goals
- загрузка файла из веб-морды и список вложений в зеркале/карточке — отдельно, когда понадобится;
- удаление и замена вложений в Jira (команда только добавляет недостающее);
- поля по умолчанию для типа «Ошибка» (обязательные поля как у задачи);
- привязка выдачи команд к версии агента: старый агент отвечает
failed«неизвестный тип команды», хватаетmin_agent_version = 11(предупреждение); - вложения больше 10 МБ.
Impact
- jira-hub:
commands.py(SPEC, проверки),queue.py(дописываниеsizeпри выдаче),api.py(два маршрута, уборка вtick), новый модуль хранилища файлов,settings.py(init),mcp_server.py(path), тесты, спеки, README, ARCHITECTURE.md. Схема БД не меняется. - jira-agent (aep/jira-agent#31):
src/agent.pyv11, тесты и фейки (вложения вfake_jira, файлы вfake_hub), README, ARCHITECTURE.md.run.pyне меняется. - Выкатка: merge хаба → перезапуск хаба и MCP →
settings_set issue_typesсbug→jira-hub agent publishv11 →min_agent_version = 11→ живая проверка на тестовой задаче (удаляет владелец).