29 lines
2.7 KiB
Markdown
29 lines
2.7 KiB
Markdown
# modules Specification
|
||
|
||
## Purpose
|
||
Устройство хаба из ядра и подключаемых модулей (первый — `jira`): что принадлежит ядру, как модуль подключается описанием, проверка пересечений при старте и единая схема базы.
|
||
|
||
## Requirements
|
||
|
||
### Requirement: Ядро и модули хаба
|
||
Хаб SHALL состоять из ядра и подключаемых модулей. Ядро SHALL владеть базой и миграциями, настройками хаба, проектами
|
||
(метка, название), хранилищем файлов, реле общей папки, релизом агента, очередью пакетов команд, HTTP-сервером с
|
||
авторизацией, раздачей веб-приложения и общим слоем MCP. Модуль SHALL подключаться к ядру описанием: таблицы, типы команд
|
||
и их обработчики в очереди, маршруты HTTP, ключи настроек, фоновые работы, инструменты MCP, подкоманды CLI. Первый модуль —
|
||
`jira` (зеркало задач, журнал изменений, вложения, команды Jira). Ядро MUST NOT импортировать модули, кроме списка
|
||
подключённых модулей и истории миграций схемы.
|
||
|
||
При старте хаб SHALL проверять, что типы команд, ключи настроек и маршруты (метод и шаблон адреса) ядра и модулей не
|
||
пересекаются; пересечение — ошибка старта с указанием конфликта.
|
||
|
||
Схема базы SHALL оставаться одной, с одной версией `setting.schema_version` на весь хаб; таблицы модуля входят в неё.
|
||
|
||
#### Scenario: Конфликт типов команд
|
||
- **WHEN** два подключённых модуля объявляют тип команды `refresh`
|
||
- **THEN** хаб не стартует, ошибка называет тип и оба модуля
|
||
|
||
#### Scenario: Поведение без изменений
|
||
- **WHEN** хаб после перестройки стартует на базе v6 с агентом v14
|
||
- **THEN** схема остаётся v6, копия базы не создаётся; адреса API, веба, ответы и инструменты MCP — прежние; агент берёт
|
||
команды и отчитывается как раньше
|