21 KiB
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
AWPCAscrum, агент v14 (данных доски нет), открыт «Спринт» - THEN «Нужен агент v15 и обновление из Jira» и кнопка «Обновить»