Andrey Epifancev 5ef6c937b5 Спека OpenSpec: несколько проектов-меток в мосте (#61)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 18:59:33 +04:00

58 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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 после выкатки потерял задачи, заметки, раскладку доски или историю синхронизаций.
- Сессия в репозитории одного проекта по умолчанию видит и меняет задачи другого.