Andrey Epifancev 30833a466a Архив OpenSpec: sprints-backlog (#108)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 15:24:17 +04:00

21 KiB
Raw Blame History

MODIFIED Requirements

Requirement: Оболочка и адреса

Приложение SHALL открываться под префиксом /app/. Главная страница — «Обзор» ядра (/app/?project=<метка>, требование «Обзор проекта»). Страницы модулей SHALL лежать под префиксом имени модуля: модуль jira — /app/jira/links («Связи» — доска связей), /app/jira/backlog («Бэклог»), /app/jira/sprint («Спринт»), /app/jira/kanban («Kanban»; три последних — требование «Спринты и бэклог»), /app/jira/issues (список задач), /app/jira/feed (лента изменений, требование «Лента изменений») и /app/jira/issues/{key} (карточка задачи — окно поверх страницы, требование «Карточка задачи»); модуль wiki — /app/wiki (требование «Вики проекта»). Прежние адреса /app/board и /app/jira/board (на /app/jira/links), /app/issues, /app/issues/{key}, /app/feed SHALL перенаправлять на новые с сохранением строки запроса, без новой записи истории. Неизвестный путь — страница «не найдено» со ссылками на «Обзор» и разделы модулей.

Боковая панель SHALL быть закреплена у левого края окна на всю его высоту и MUST NOT прокручиваться вместе со страницей; если её содержимое не помещается по высоте, прокручивается сама панель. Сверху вниз панель SHALL содержать: название «SDLC Hub» и кнопку «Свернуть панель»; выпадающий список проектов («<метка> — <название>», текущий отмечен, в конце «+ Новый проект…»; требование «Проект в приложении»); пункт «Обзор»; разделы модулей группами — заголовок группы — название модуля («Jira», «Вики»), под ним ссылки разделов модуля со значками (текущий отмечен aria-current="page"); внизу — блок состояния модулей (требование «Состояние и обновление модулей»), переключатель темы (требование «Тема») и меню с действием «Сменить токен». Свёрнутая панель SHALL быть узкой полосой с теми же действиями значками: «Развернуть панель», метка текущего проекта (полностью — в подсказке), «Обзор», разделы (группы разделены линией), по значку состояния на модуль, тема, меню; названия — в подсказках и aria-label. Свёртка SHALL храниться в localStorage под ключом sdlc-hub-sidebar (collapsed; без записи — развёрнута).

На экранах уже 640 px панели в потоке нет: сверху SHALL быть закреплена строка с кнопкой «Меню», меткой текущего проекта и сводной точкой состояния модулей (ошибка, если она есть у какого-нибудь модуля; иначе — пакет в работе; иначе — все агенты на связи или нет), которая открывает панель. «Меню» открывает развёрнутую панель поверх страницы модальным окном: фокус переходит в панель и остаётся в ней, страница под ней недоступна; панель закрывается выбором раздела, клавишей Escape (если не открыто вложенное меню — тогда Escape закрывает только его) или щелчком мимо неё; фокус возвращается на «Меню». Горизонтальной прокрутки страницы на любой ширине нет.

Заголовок вкладки браузера SHALL быть «<название страницы> · <метка проекта> · SDLC Hub» (без проекта — без средней части); название страницы даёт оболочка («Обзор») или модуль. Неожиданная ошибка отрисовки страницы SHALL показываться сообщением с кнопкой «Перезагрузить», не пустым экраном.

Scenario: Прежний адрес доски связей

  • WHEN открыт /app/jira/board?project=AWPCA
  • THEN адрес — /app/jira/links?project=AWPCA, показана доска связей, в меню отмечен пункт «Связи», заголовок вкладки — «Связи · AWPCA · SDLC Hub»

Scenario: Переход между разделами

  • WHEN на доске в боковой панели выбран раздел «Задачи» группы «Jira»
  • THEN адрес — /app/jira/issues с текущим проектом, показан список задач; «назад» возвращает на доску

Scenario: Раздел «Лента»

  • WHEN на доске в боковой панели выбран раздел «Лента»
  • THEN адрес — /app/jira/feed с текущим проектом, показана лента изменений за сегодня; раздел отмечен в панели

Scenario: Сменить токен

  • WHEN в меню боковой панели выбрано «Сменить токен»
  • THEN токен очищен, показан экран входа

Scenario: Панель на месте при прокрутке

  • WHEN доска прокручена до самого низа
  • THEN боковая панель видна целиком на прежнем месте: разделы и блок состояния модулей доступны без прокрутки вверх

Scenario: Свёрнутая панель

  • WHEN нажата «Свернуть панель», страница перезагружена
  • THEN панель свёрнута в полосу значков, доска шире; значок «Задачи» открывает список задач; видны два значка состояния — Jira и Вики; «Развернуть панель» возвращает полную панель

Scenario: Узкий экран

  • WHEN ширина окна 390 px, нажата «Меню», в панели выбран раздел «Задачи»
  • THEN панель открылась поверх страницы, фокус в панели; после выбора панель закрыта, фокус на «Меню», показан список задач; горизонтальной прокрутки нет

Scenario: Прежний адрес

  • WHEN открыт /app/issues/AURORA-1536?project=AWPCA
  • THEN адрес заменён на /app/jira/issues/AURORA-1536?project=AWPCA, карточка открыта поверх списка задач

Scenario: Заголовок вкладки

  • WHEN открыта страница «Вики» проекта AWPCA
  • THEN заголовок вкладки — «Вики · AWPCA · SDLC Hub»

Requirement: Проект в приложении

«Обзор», доска, список задач, лента и вики SHALL показывать один проект — текущий. Текущий проект SHALL задаваться параметром project в адресе страниц; без параметра — последний выбранный в этом браузере (localStorage), если он есть в GET /projects, иначе первый из GET /projects; выбранный проект записывается в адрес без новой записи истории. Проекта из адреса нет в GET /projects — страница SHALL показывать «проект <метка> не найден» и подсказку выбрать проект в списке «Проект» боковой панели (на узком экране — в «Меню») вместо данных. Проектов нет — страницы SHALL показывать приглашение создать проект («+ Новый проект…»). Переходы между страницами SHALL сохранять текущий проект; смена проекта на странице, которой нет у нового проекта, открывает «Обзор»; исключение — «Бэклог», «Спринт», «Kanban»: адрес остаётся, страница показывает «У проекта нет …-доски» (требование «Спринты и бэклог»). Карточка задачи (/app/jira/issues/{key}) от проекта не зависит.

Доска SHALL загружать GET /board?project=<текущий>. Раскладка, дорожки и фильтры доски в localStorage SHALL храниться отдельно для каждого проекта; у проекта AWPCA — на прежних ключах (раскладка, сделанная до проектов, сохраняется). Фильтр спринтов SHALL показываться, только если хотя бы у одной своей задачи снимка (neighbor = false) есть спринт; иначе — «колонки «Спринт» нет — показаны все задачи».

Форма «Новый проект» (пункт «+ Новый проект…» выпадающего списка) SHALL открываться окном поверх страницы: метка (с подсказкой «метка задач в Jira и имя проекта в хабе») и название, затем поля каждого модуля в своей группе с заголовком — названием модуля: «Jira» — номер доски Jira (необязательно; подсказка «scrum или kanban определится сам»), «Вики» — корень вики (необязательно; подсказка «DOC-… или ссылка на страницу Eva»). Подсказка — текстом под полем, не в placeholder. Пустое необязательное поле в запрос не попадает; числовое поле с нецелым значением — ошибка у поля, запрос не уходит. «Создать» — POST /projects с автором viewer; ошибка хаба 409/422 — текст detail рядом с кнопкой, окно остаётся открытым; успех — окно закрывается, текущим становится новый проект, каждый пакет из ответа (batches) отслеживается своим модулем (требование «Состояние и обновление модулей»).

Scenario: Первый вход после выкатки

  • WHEN открыт /app/jira/links без project, в localStorage выбора нет, проекты AWPCA и STOCKS_DRRK
  • THEN адрес — /app/jira/links?project=AWPCA, доска — GET /board?project=AWPCA с прежней раскладкой карточек

Scenario: Переключение проекта

  • WHEN на доске AWPCA в выпадающем списке выбран STOCKS_DRRK, затем открыт раздел «Задачи»
  • THEN доска — GET /board?project=STOCKS_DRRK со своей раскладкой; адрес «Задач» — /app/jira/issues?project=STOCKS_DRRK

Scenario: Неизвестный проект в адресе

  • WHEN открыт /app/jira/issues?project=NOPE
  • THEN «проект NOPE не найден» и подсказка выбрать проект в боковой панели; запроса GET /issues нет

Scenario: Создание проекта из формы

  • WHEN в форме введены STOCKS_DRRK, «Запасы ДРРК», доска и корень вики пусто; нажато «Создать»
  • THEN POST /projects {label: "STOCKS_DRRK", name: "Запасы ДРРК", author: "viewer"}; текущий проект — STOCKS_DRRK; строка «Jira» блока состояния показывает «пакет #N выполняется»

Scenario: Проект с корнем вики из формы

  • WHEN в форме введены STOCKS_DRRK, «Запасы ДРРК», корень DOC-001234; нажато «Создать»
  • THEN POST /projects {label: "STOCKS_DRRK", name: "Запасы ДРРК", wiki_root: "DOC-001234", author: "viewer"}; строка «Jira» показывает пакет обновления, строка «Вики» — пакет синхронизации

Scenario: Метка занята

  • WHEN в форме введена метка awpca, хаб ответил 409
  • THEN окно открыто, рядом с «Создать» — текст ошибки хаба

Scenario: Канбан-проект

  • WHEN текущий проект — STOCKS_DRRK, ни у одной своей задачи снимка нет спринта (у соседа из AWPCA спринт есть)
  • THEN вместо фильтра спринтов — «колонки «Спринт» нет — показаны все задачи»

Scenario: Нецелый номер доски

  • WHEN в поле «Номер доски Jira» введено 51.5, нажато «Создать»
  • THEN у поля — «нужно целое число», запроса POST /projects нет

ADDED Requirements

Requirement: Спринты и бэклог

Модуль jira SHALL показывать для проекта с доской страницы по образцу Jira — только для просмотра: на них MUST NOT быть действий, меняющих Jira (перетаскивания, кнопок спринтов, смены статуса или ранга). Пункты меню группы «Jira» — «Связи», «Задачи», «Лента» и по типу доски текущего проекта (board_type из GET /projects): scrum — «Бэклог» и «Спринт»; kanban — «Kanban»; доски нет или тип неизвестен — новых пунктов нет, а прямой переход на их адрес показывает «У проекта нет scrum-доски» («…kanban-доски» для «Kanban») со ссылкой на «Связи». Данные — GET /agile?project=<текущий>; если доска есть, но её данных от агента нет (board = null или board.fetched_at = null) — «Нужен агент v15 и обновление из Jira» с кнопкой «Обновить» блока состояния модуля; данные доски есть (fetched_at задан), а колонок нет (columns = null) — «Не удалось прочитать настройки доски из Jira» и та же кнопка. Пока проекты не загружены, условные пункты меню скрыты; смена проекта на странице, которой у нового проекта нет, оставляет адрес и показывает сообщение «У проекта нет …-доски». Даты спринтов (ISO-8601 Jira) показываются «ДД.ММ» в часовом поясе браузера; «осталось N дн.» — от сегодня до конца спринта.

Строка задачи и карточка задачи на этих страницах: ключ, значок типа, тема, исполнитель (или «—»), оценка (число или «—»); выполненная — приглушена. Щелчок открывает карточку задачи (окно поверх страницы, как в списке задач).

«Бэклог» (/app/jira/backlog), сверху вниз: секции активных спринтов, будущих спринтов, «Бэклог», затем свёрнутый список «Прошлые спринты (N)». Заголовок секции спринта: имя, состояние, даты «ДД.ММ–ДД.ММ», цель (если есть), «N задач», «S SP (выполнено D)» и «без оценки: U», если U > 0. Задачи секции — по рангу. Секция без задач показывает «Нет задач». Прошлый спринт в списке — строка «имя · закрыт ДД.ММ · выполнено X из N · S SP»; раскрытие показывает его задачи с пометкой «не выполнено» у невыполненных.

«Спринт» (/app/jira/sprint): активный спринт доски — заголовок (имя, даты, «осталось N дн.» или «срок прошёл», цель, суммы оценок) и колонки доски Jira с числом задач, карточки в колонке — по рангу; колонка «Без колонки» — для статусов вне настроек доски, только если в ней есть задачи. Несколько активных спринтов — переключатель спринтов над доской (выбор в адресе ?sprint=<id>). Активного нет — «Нет активного спринта» и ссылка на «Бэклог».

«Kanban» (/app/jira/kanban): колонки доски из board_issues, карточки по рангу, у последней колонки подпись «за 14 дней»; если kanban_backlog = true — над колонками свёрнутый список «Бэклог (N)» по рангу.

Колонки, не помещающиеся по ширине, SHALL прокручиваться по горизонтали внутри доски, не страницы. Заголовок вкладки — «Бэклог», «Спринт», «Kanban» по общему правилу оболочки.

Scenario: Меню scrum-проекта

  • WHEN текущий проект AWPCA, board_type = scrum
  • THEN в группе «Jira» пункты «Связи», «Бэклог», «Спринт», «Задачи», «Лента»; пункта «Kanban» нет

Scenario: Проект без доски

  • WHEN текущий проект STOCKS_DRRK без доски, открыт /app/jira/backlog?project=STOCKS_DRRK
  • THEN пунктов «Бэклог», «Спринт», «Kanban» в меню нет; страница — «У проекта нет scrum-доски» со ссылкой на «Связи»

Scenario: Бэклог только смотрит

  • WHEN открыт «Бэклог» AWPCA
  • THEN на странице нет перетаскиваемых элементов и кнопок, кроме раскрытия секций и открытия карточки задачи

Scenario: Прошлый спринт

  • WHEN спринт AWPCA_Sprint_2_VGO закрыт, в нём 73 задачи, 61 в последней колонке, оценки у 10 задач на 25 SP
  • THEN в «Прошлые спринты» строка «AWPCA_Sprint_2_VGO · закрыт ДД.ММ · выполнено 61 из 73 · 25 SP»; раскрытие — 73 задачи, 12 с пометкой «не выполнено»

Scenario: Агент без досок

  • WHEN AWPCA scrum, агент v14 (данных доски нет), открыт «Спринт»
  • THEN «Нужен агент v15 и обновление из Jira» и кнопка «Обновить»