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

3.0 KiB
Raw Blame History

ADDED Requirements

Requirement: Спринты, ранг и оценки

Агент v15 SHALL в каждом refresh (по JQL и по ключам) для каждой доски из boards команды с типом scrum или kanban (известным или только что определённым) прочитать настройки доски (GET /rest/agile/1.0/board/{id}/configuration: колонки и их статусы — по именам статусов; признак kanban-бэклога, если Jira его отдаёт, иначе null) и, у scrum, все спринты доски любого состояния (GET /rest/agile/1.0/board/{id}/sprint постранично) и приложить к первой пачке состояния boards (см. hub-api, «Приём досок и спринтов»). Ошибка чтения настроек доски — доска с columns: null, kanban_backlog: null; ошибка чтения списка спринтов scrum-доски — доска в boards не входит (хаб сохраняет прежние данные), имена спринтов задач — по правилам v12; причина в лог; refresh продолжается.

Каждая задача в состоянии (с v15) SHALL нести rank — значение поля ранга Jira (поле типа LexoRank), story_points — значение поля оценки (field_ids.story_points, если задано, иначе поле Jira с именем «Story Points»), и sprint_ids — id всех спринтов задачи из поля спринта Jira (любого состояния). Поле не найдено — ключ у задач не передаётся (хаб сохраняет прежнее значение) и запись в лог один раз за refresh.

Агент v15 SHALL выполнять ensure_sprint_meta, ensure_sprint_state, ensure_rank и story_points в ensure_fields по контракту commands; сравнение — до записи, повтор без изменений — done без записи.

Scenario: Доска с закрытыми спринтами

  • WHEN refresh {jql: …, boards: [{id: 4216, type: "scrum"}]}, у доски закрытые спринты 1–2, активный 3, будущий 4
  • THEN первая пачка состояния несёт boards с доской 4216, четырьмя спринтами и колонками; у задачи спринта 2, перенесённой в 3, — sprint_ids: [2, 3]

Scenario: Нет поля оценки

  • WHEN в Jira нет поля «Story Points», field_ids.story_points не задан
  • THEN у задач нет ключа story_points; ensure_fields {key: X, story_points: 3} — failed «поле оценки не найдено в Jira: задайте field_ids.story_points»