Andrey Epifancev dc71d4e025 Архив OpenSpec: projects (#61)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 23:04:05 +04:00

6.6 KiB
Raw Blame History

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