5.8 KiB
Оценка через доску (хаб) Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: хаб дописывает board_id доски проекта задачи в ensure_fields со story_points, чтобы агент v16 ставил оценку через доску.
Architecture: hooks._assign_boards уже ставит доску в ensure_sprint по меткам задачи; расширяем его на
ensure_fields с ключом story_points (свои тексты 422 для канбана и «вне проектов»). retry_params снимает
board_id и у ensure_fields. Описание batch_create в MCP — одна фраза.
Tech Stack: Python 3.13, pytest.
Spec: openspec/changes/sp-estimation-board/ (proposal, design, specs/commands, specs/mcp).
Global Constraints
- От клиента
board_idвensure_fields— 422 «лишние параметры board_id» (валидация уже такая:board_idне в списке параметров — не добавлять его вcommands.COMMANDS). - Тексты 422 (команда N — как у
ensure_sprint): «команда N: K не входит ни в один проект — доску для оценки не определить»; «команда N: у проекта P канбан-доска, оценка — только на scrum-доске»; нет доски, тип не известен, разные доски — текстыensure_sprintбез изменений. ensure_fieldsбезstory_points— без доски и без проверок доски.
Review Focus
ensure_fields {story_points}для временного ключаnew:<n>— доска по меткам егоensure_issueв пакете (как у спринта) — тест в Task 1.ensure_fieldsбез оценки на задаче вне проектов — пакет создаётся,board_idнет — тест в Task 1.- Повтор
ensure_fieldsсоstory_pointsпосле смены доски проекта — новая доска — тест в Task 1. - Пакет из
ensure_fieldsиensure_sprintна одну задачу — обе получают доску — тест в Task 1. - Повтор
ensure_fieldsбез оценки — параметры без изменений — тест в Task 1.
Task 1: Доска в ensure_fields со story_points
Files:
- Modify:
src/sdlc_hub/modules/jira/hooks.py(_assign_boards,retry_params) - Test:
tests/test_queue.py(рядом сtest_sprint_gets_project_board)
Interfaces:
-
Produces: в
paramsensure_fieldsсоstory_points—board_id: int. -
Step 1: Тесты (
fields_sp(key, sp=1)→{"type": "ensure_fields", "params": {"key": key, "story_points": sp}}):test_story_points_gets_project_board— AURORA-1692 с меткойAWPCA: params== {"key": "AURORA-1692", "story_points": 1, "board_id": 4216};test_story_points_board_rejected— parametrize какtest_sprint_board_rejected, но канбан → «у проекта STOCKS_DRRK канбан-доска, оценка — только на scrum-доске», вне проектов → «AURORA-77 не входит ни в один проект — доску для оценки не определить»; батчей 0;test_fields_without_points_no_board—ensure_fields {key: AURORA-77, duedate: "2026-10-30"}вне проектов: пакет создан,"board_id" not in params;test_story_points_for_new_issue_uses_batch_labels—ensure_issue new:1в пакете проектаAWPCA+fields_sp("new:1")→board_id == 4216;test_fields_and_sprint_same_issue—[fields_sp("A-1"), sprint("A-1")]: у обеихboard_id == 4216;test_retry_story_points_recomputes_board— какtest_retry_sprint_recomputes_board: после смены доски на 5120 повтор → 5120;test_retry_fields_without_points_keeps_params— повторensure_fields {key, duedate}→ params те же.
-
Step 2:
uv run pytest tests/test_queue.py -k "story_points or fields_" -q— FAIL. -
Step 3:
_assign_boards: обрабатыватьensure_sprintиensure_fieldsс"story_points" in params; слово цели («спринта»/«оценки») и текст канбана — по типу команды;_board_errorполучает необязательный текст канбана (kanban_text), по умолчанию прежний.retry_params:dropи дляensure_fields. Docstring_assign_boards— упомянуть оценку. -
Step 4:
uv run pytest -q— весь набор зелёный. -
Step 5: commit «Доска проекта в ensure_fields со story_points (#113)».
Task 2: Описание batch_create в MCP
Files:
-
Modify:
src/sdlc_hub/modules/jira/mcp.py:500 -
Test:
tests/test_mcp.py:224 -
Step 1: в тесте строка
"board_id для ensure_sprint, ensure_sprint_meta и ensure_sprint_state выставляет хаб"→"board_id для ensure_sprint, ensure_sprint_meta, ensure_sprint_state и ensure_fields со story_points выставляет хаб"; FAIL. -
Step 2: та же фраза в описании
batch_create;uv run pytest -qиmake check— зелёные. -
Step 3: commit «MCP: board_id в ensure_fields со story_points ставит хаб (#113)».