Модульная перестройка хаба: ядро + модуль jira (#87) #88
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/87-modules"
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 #87
Первый шаг к sdlc-hub: код хаба разделён на ядро
jira_hub/core/и модульjira_hub/modules/jira/, внешнее поведение не изменилось.Спека:
openspec/changes/hub-modules/. План:docs/superpowers/plans/2026-10-23-hub-modules.md.Что сделано
tests/fixtures/baseline/) сняты до переноса и не менялись: инструменты MCP, маршруты HTTP, настройки, схема.Module(core/modules.py) и реестр (core/registry.py). При старте реестр проверяет пересечения типов команд, ключей настроек и маршрутов.schema_version= 6.modules/jira/hooks.py,fetch.py,refresh.py).core/mcp.py. Новая формаjira-hub mcp [модуль], по умолчаниюjira. Неизвестный модуль — код выхода 2.web/src/modules/jira/, оболочка собирается из списка модулей.# долг hub-modules, 10 мест, решение 12). Долг убирается в change wiki.Не изменилось
/agent/*(агент v14 работает как раньше);jira-hubи его инструменты (.mcp.jsonв awp-ca и регистрацию в user scope менять не нужно);Проверка
make check: pytest763 passed, lint чистый, vitest45 files / 457 tests passed.npm run e2e:37 passed,44 skipped(screens-тесты идут только приSCREENS=1).jira-hub mcp nope: stderrнеизвестный модуль nope; модули: jira, код выхода 2.Rulings I made
Все записаны в
openspec/changes/hub-modules/design.md, раздел «Decisions made without discussion» (#7–#20).R-1 (design #7). В
test_core_importsбыл временный список исключенийPENDING, который мог только сокращаться; к T6 он опустел.Цена ошибки: на шагах T3–T5 граница ядра проверялась слабее.
R-2 (#8). Метку долга ставит задача, которая создаёт или переносит код; T8 проверяет метки поиском.
Цена ошибки: нулевая.
R-3 (#9).
jira_utcиfill_comment_utcлежат вmodules/jira/history.py. ПорядокAGENT_KEYS: сначала ключи модуля, потом ядра.Цена ошибки: нулевая.
R-4 (#10).
registry.checkполучает маршруты ядра только начиная с T5.Цена ошибки: пересечение маршрутов проверяется только со T5.
R-5 (#11).
retry_paramsиdrop_unresolvedпол��чают команду целиком.link_typesчитается вcheck_confirmedмодуля. У позднего отчёта сменился логгер.Цена ошибки: фильтр по логгеру
jira_hub.core.queueбольше не находит эту строку; на каждую выданную команду добавляется лишний запрос кsetting.R-6 (#12). Assert
commands.estimate == 152заменён тестомqueue.estimateна реальном модуле jira.Цена ошибки: нулевая.
R-7 (#13).
Hub.tickсначала убирает файлы ядра, потом зовётtickмодулей. Метка сбоя — атрибутlabelфункции. Суточная уборкаdownloads/— работа модуля.Цена ошибки: автообновление теперь идёт после
files.sweep; метка в атрибуте — неявный контракт.R-8 (#14).
POST /projectsотдаётbatch_idпервого модуля, который вернул пакет.Цена ошибки: если пакеты вернут несколько модулей, остальные в ответе не видны.
R-9 (#15). Помощники
core/mcp.pyстали публичными,mcp.runвозвращает код выхода.Цена ошибки: нулевая.
R-10 (#16).
test_mcp_project_optionзаменён двумя тестами из плана. Проверка «mcpбез--project→ None» возвращена в T8.Цена ошибки: нулевая.
R-11 (#17). Веб:
SidebarStatusполучает{project, compact},TopbarNoticeнеобязателен, хуки модулей вызываются через.mapпо константным спискам,qkмодуля разворачиваетqkядра.Цена ошибки: нулевая.
R-12 (#18). Тест границы ищет типы команд по границе слова.
Цена ошибки: новое слово вне списка тест пропустит; список расширяется вручную.
R-13 (#19). Расхождения design.md с кодом, принятые планом:
agent publishостался в ядре;sweep_downloadsостался вcore/files.py;tail(cmds)иon_project_created(conn, project, author).Цена ошибки: нулевая; при следующем модуле контракт брать из
core/modules.py.R-14 (#20). M-1 и M-2 исправлены в fix wave, M-3 отложен.
Цена ошибки: нулевая.
Находки
Исправлены: T3.1–T3.4, T4.I, T4.1, T4.3, T5.I, T6.1, T6.2, T7.I, T7.2, I-1, M-1, M-2.
Отклонены: T1.1, T1.2, T2.1, T2.2, T4.4, T5.3, T6.3, T7.3, T8.2.
Отложено (уйдёт в follow-up issue при закрытии)
TooLarge/AgentTooOldв отдельный модуль ошибок.labelкак атрибут функции тика — неявный контракт.downloads/на следующие сутки.key={n.to}ломается при дубле адресов.modules.testне проверяет уникальностьnav.toи имени модуля.pacingотдельно на каждый т��п (N запросов); нужен хук пауз на пакет.Наблюдения
jira-hub import /nonexistentбезJIRA_HUB_HOME. Это вызвало идемпотентныйsettings.ensure_defaultsна живой базе; схема осталась v6, ущерба нет.sleep; исправлено по указанию владельца.После merge (владелец)
git pull,make web,launchctl kickstart -k gui/$(id -u)/ru.aepif.jira-hub, затем/mcp→ reconnect.🤖 Generated with Claude Code