Тип «Ошибка» и вложения: хранилище файлов, ensure_attachment, path в MCP (#43) #47
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/43-bug-and-attachments"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #43. Закрывает R-1 из #46 (параметры в описании
batch_createи в 422 закреплены в спеке). Пара — aep/jira-agent PR (агент v11, issue aep/jira-agent#31).OpenSpec change
bug-and-attachments(proposal, design — решения 1–23, дельты commands, hub-api, mcp, data-model, agent).Что сделано
bugвensure_issue: настройкаissue_types.bug = {name, id}; без неё — 422 «команда N: нет настройки issue_types.bug» при постановке;initберётbugизissue_type_bug/issue_type_bug_id, только если ключи есть в конфиге.files/<sha256>(новый модульfiles.py):POST /files {content: base64}→{file, size}; предел 10 485 760 байт (413), пустой — 422empty_file, не base64 — 400; атомарная запись, одна копия на содержимое, повторная загрузка обновляет mtime и лечит испорченную копию; каталог 0700 при каждом старте; уборка вtickраз в сутки — файлы старше 30 дней без ссылок команд вqueued/claimed.GET /agent/files/{sha256}→{file, size, content}(base64; проходит и реле папки, и HTTP), 404no_file; id только из 64 hex нижнего регистра.ensure_attachment {key, file, filename}:key— ключ илиnew:<n>; при постановке — форматfile, файл загружен,filenameбез/,\,"и управляющих символов; пауза 30 с; по зеркалу не подтверждается;sizeдописывается только при выдаче (claim, довыдача,GET /agent/commands/{id}), в базеparamsбез него — retry проходит проверку как новая.batch_create: уensure_attachmentвместоfile—path(локальный файл до 10 МБ); MCP читает все файлы пакета, загружаетPOST /files, подставляетfileиfilename(по умолчанию имя файла). Описание инструмента собирается изSPEC.Проверка
make check: pytest 419 passed, lint и vitest 205 passed.Выкатка (после merge, за владельцем)
git pullна Mac mini, перезапуск хаба (launchd) и MCP;make webне нужен.settings_set issue_types={task…, epic…, bug: {name: "Ошибка", id: null}}.jira-hub agent publish …/agent.py(v11),min_agent_version = 11.issue_types.bug.id.Rulings I made
filenameс"и управляющими символами (CR, LF и др.) — они ломают multipart у агента. Цена: файл с кавычкой в имени прикладывается под другимfilename.issue_types.<тип>— в том числеtask/epic— отвечаетfailed«нет настройки…» вместо{"name": null}. Меняет поведение для старых типов; на живом хабе настройки есть.files_dirпараметром, тексты MCP).Findings
3b4cf66,e8707d4"и управляющих символов9b21060,87d28a92e98ce6files.size/readловят только FileNotFoundError — PermissionError в claim даёт 500filenameпо умолчанию изpathбез NFC — NFD и NFC пути дадут два вложения2e98ce6Deferred
M-1, M-3, M-4 — в follow-up issue при закрытии.
🤖 Generated with Claude Code
Дельты 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>Не base64 — 400 bad_request, пустой — 422 empty_file, больше 10 МБ — 413 too_large; агенту — {file, size, content} в base64, нет файла — 404 no_file; уборка отдельно от автообновления (решения 14–16). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>SPEC ensure_attachment {key, file, filename}, пауза 30 с, по состоянию не подтверждается; queue._check_setup: формат file, файл загружен («файл <sha> не загружен: POST /files»), filename без / и \, без кавычек и управляющих символов (R-2); claim, довыдача и GET /agent/commands/{id} дописывают size (null без файла), в базе params без size, retry проходит (решения 17–18). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>