58 lines
6.6 KiB
Markdown
58 lines
6.6 KiB
Markdown
## Why
|
||
|
||
Владелец работает в одном Jira-проекте AURORA и разграничивает свои проекты метками. Сейчас мост знает один такой
|
||
проект — AWPCA (АРМ КА): базовая JQL `project = AURORA AND labels = AWPCA` и одна доска `board_id = 4216` зашиты в
|
||
настройки. Нужен второй проект — STOCKS_DRRK — со своей доской Jira (возможно, канбан без спринтов) и своим
|
||
репозиторием, откуда Claude ведёт его задачи через MCP. Дальше проектов может стать больше.
|
||
|
||
Решения владельца 19.10.2026 (brainstorming, jira-hub#61):
|
||
- **полноценный вариант**: проект — сущность хаба, а не фильтр поверх общей JQL;
|
||
- у каждого проекта **своя доска Jira**, у неё может не быть спринтов (канбан);
|
||
- **сессия Claude в репозитории проекта видит и меняет только задачи своего проекта**; связи между проектами не нужны;
|
||
- **веб-приложение одно**, проект переключается выпадающим списком в шапке (вариант A из макетов), в его конце —
|
||
«+ Новый проект…»;
|
||
- проект заводит **человек из веб-приложения или Claude через MCP**; Claude затем сам прописывает в репозитории, с каким
|
||
проектом работает его сессия;
|
||
- **обновление из Jira — одним запросом по всем проектам**: метки всех проектов собираются в одну JQL; так и для
|
||
автообновления, и для кнопки «Обновить из Jira», и для `refresh` из MCP;
|
||
- **пока только создание проекта**: переименования и удаления нет.
|
||
|
||
## What Changes
|
||
|
||
- **Проекты в хабе.** Новая таблица `project` (схема v4): метка Jira (ключ, не меняется), название, номер доски Jira
|
||
(может отсутствовать), тип доски (`scrum` / `kanban`, определяет агент). Маршруты `GET /projects`, `POST /projects`.
|
||
Миграция заводит проект AWPCA «АРМ КА» с доской 4216 из нынешних настроек.
|
||
- **Базовая JQL собирается из проектов** — `project = <project_key> AND labels in ("<метка>", …)`; настройки
|
||
`base_jql` и `board_id` уходят из `setting`. Создание проекта ставит полный `refresh`.
|
||
- **Разрез по проекту в API.** `GET /board?project=` и `GET /issues?project=` отдают задачи проекта и их соседей
|
||
(задачи других меток, связанные с ними, и их эпики) с признаком `neighbor` относительно проекта.
|
||
- **Пакет проекта.** `POST /batches` принимает `project`: хаб добавляет метку проекта в `ensure_issue`, запрещает чужие
|
||
метки проектов и команды над задачами вне проекта; пакет помнит свой проект (`batch.project`).
|
||
- **Спринты по доске проекта.** `ensure_sprint` получает `board_id` доски проекта задачи от хаба; на канбан-доске и без
|
||
доски — 422 при постановке. `refresh` получает от хаба список досок проектов; агент собирает спринты со всех
|
||
scrum-досок и сообщает тип досок, тип которых хабу ещё не известен.
|
||
- **MCP с привязкой к проекту.** `jira-hub mcp --project <метка>`: инструменты задач и пакетов работают в разрезе
|
||
проекта. Без привязки доступны только список и создание проектов и служебные инструменты. Новые инструменты
|
||
`projects`, `project_create` (ответ — готовый фрагмент `.mcp.json` для репозитория проекта).
|
||
- **Веб-приложение.** Выпадающий список проектов в шапке, форма «Новый проект», проект в адресе (`?project=`) и в
|
||
памяти браузера; доска и список задач — по выбранному проекту; раскладка доски хранится отдельно для каждого
|
||
проекта, раскладка AWPCA сохраняется.
|
||
- **Агент v12** (отдельный PR в jira-agent): доски из параметров команд вместо настройки `board_id`, тип доски.
|
||
|
||
## Non-Goals
|
||
|
||
- Переименование, удаление проекта, смена его доски — позже.
|
||
- Свои для каждого проекта словари (`kind_labels`, `link_types`, `transitions_map`, `issue_types`, `closed_statuses`) —
|
||
Jira-проект один, словари общие.
|
||
- Проекты в других Jira-проектах (кроме `project_key` = AURORA).
|
||
- Отдельное автообновление и отдельная кнопка «обновить» для одного проекта.
|
||
- Перенос задачи из проекта в проект (смена метки проекта) командами в разрезе проекта.
|
||
- Смена проекта внутри запущенной сессии MCP (только перезапуском с другим `--project`).
|
||
|
||
## Anti-Goals
|
||
|
||
- Задача одного проекта получила метку другого (или осталась без метки своего) из-за того, что сессия Claude не знала,
|
||
в каком она проекте.
|
||
- AWPCA после выкатки потерял задачи, заметки, раскладку доски или историю синхронизаций.
|
||
- Сессия в репозитории одного проекта по умолчанию видит и меняет задачи другого.
|