Бэкенд хаба: нормализация параметров, 422 вместо 500, файлы, публикация агента, уборка настроек (#129) #130
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/129-hub-backend"
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 #129.
Пакет C из сверки follow-ups 25.10: дефекты бэкенда хаба. Только Python-код хаба. Агенты, веб и схема базы не меняются. Спека —
openspec/changes/hub-backend-fixes/, план —docs/superpowers/plans/2026-10-26-hub-backend-fixes.md.Что исправлено
summary,description,body,goal) хранится как задан;ensure_rank {before: " A-2 "}больше не уходит агенту с пробелами;" new:1 "подставляется так же, какnew:1;ensure_fieldsиз одних пробелов даёт 422 и не очищает поле в Jira;filenameприводится к NFC, поиск вложения по имени в MCP сравнивает имена в NFC.attachment_id, id вложений в состоянии агента и версия агента — только0-9."²"больше не роняет хаб с 500, в том числе вGET /agentи/agents.POST /agent/stateполеissuesдолжно быть списком объектов со строковымkey;POST /wiki/syncполеprojectдолжно быть строкой.size = null, при скачивании 404, предупреждение в лог;SDLC_HUB_HOME(#102 T3.2) трактуется как незаданный: база больше не пишется в рабочий каталог.agent.py.prevне затирается.base_jqlиboard_idудаляются изsettingпри открытии хаба. Резервная копия базы делается штатно.Проверки
make check: pytest 1187 passed, lint и tsc без замечаний, vitest 73 файла и 759 тестов. Перепроверено сессией наe20977eи1cb56be.Rulings I made
check_confirmedи симметричные типы связей) перенесён в пакет B. Как��е типы симметричны, знает только агент. Цена ошибки: при потерянном отчёте лишняя довыдача команды, агент ответит existed.summary,description,body,goal. Цена ошибки: тема с пробелами по краям уходит в Jira как есть._recoverчинит только состояния, однозначные по sha256 манифеста. В редком сочетании сбоев нужно опубликовать повторно.base_jql/board_idудаляются через механизм устаревших ключей, без новой версии схемы.files.sizeдля каталога на месте файла возвращаетNone(S_ISREG).ensure_fieldsиз одних пробелов — 422 «из одних пробелов; для очистки — "" или null». Без этого обрезка давала бы"", а это «очистить поле в Jira». Дляbefore/after/move_open_toпробелы по-прежнему значат «не задано». Цена ошибки: такой ввод отвергает хаб, а не Jira.files.sizeберёт размер черезfstatоткрытого файла (Path.stat()не требует права на чтение);_intactловитOSError, поэтомуputперезаписывает нечитаемую копию. Цена ошибки: лишнее открытие файла при claim.base_jql/board_idи поднимаетsettings_version. Значение остаётся в предупрежденииmigrate_v3и вbackups/schema-v3.R-1…R-6 приняты на этапе спеки, R-7…R-10 — контроллером при исполнении. Все записаны в
design.md, раздел «Decisions made without discussion». R-8 дописан и в спекуcommands.Отложено (deferred)
hooks.py:36— недостижимая проверка «filename пустой»batch_create: нет теста обрезки keyvalidate#<id>вложения в MCP без тестаhistory.py,mcp.py) без тестаmanifest.jsonв_recover.tmpот оборванной_write_atomicне убираютсяSDLC_HUB_HOME=""не проверяетhome_problem/home_warningtests/test_mcp.py::test_unbound_session(один раз в полном прогоне)\dпринимают цифры Unicode ("١٢"→ id 12)linksиneighbor_keysвPOST /agent/statefiles.putповерх каталога на месте файла — 500ensure_fieldsс пробелами по краям не подтверждается по зеркалу (цена R-2)После merge: перезапуск хаба (kickstart) — за владельцем. При первом старте из
settingуйдутbase_jqlиboard_id.🤖 Generated with Claude Code