Andrey Epifancev c00b0bd4b2 Спека sp-estimation-board: оценка через доску (#113)
ensure_fields со story_points получает board_id доски проекта задачи; агент v16 пишет
оценку через /rest/agile/1.0/issue/{key}/estimation — поле не на экране редактирования.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 22:07:56 +04:00

50 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Context
Основа — `main` `af70ba8` (после sprints-backlog #108, схема v9, агент v15). Issue #113, ветка
`feat/113-sp-estimation-board`. Агент — jira-agent#53, ветка `feat/53-v16-sp-estimation`, design-only change
`agent-v16-sp-estimation`.
Что есть сейчас:
- агент v15 пишет `story_points` в `PUT /rest/api/2/issue/{key}` вместе с остальными полями (`do_ensure_fields`);
- Jira банка 25.10.2026 отклонила запись: поле оценки не на экране редактирования;
- хаб дописывает `board_id` только в `ensure_sprint` (по проекту задачи, `hooks._assign_boards`) и в команды спринта
(по проекту пакета, `hooks._assign_project_board`); `retry_params` снимает его у этих типов;
- живые данные: доска 4216 (`AWPCA`, scrum), поле оценки доски `customfield_15852` = `field_ids.story_points` хаба.
## Goals / Non-Goals
**Goals:** оценки из чата ставятся в Jira банка; повтор без изменений — без записи; контракт `ensure_fields` для
остальных полей не меняется.
**Non-Goals:** см. proposal.
## Decisions
1. **Оценка — через ресурс оценки доски** `/rest/agile/1.0/issue/{key}/estimation?boardId=…` (владелец, 25.10.2026:
«давай» на предложенную схему после проверки ресурса в браузере). Так ставит оценку бэклог Scrum; экран
редактирования не нужен.
2. **Доска — по проекту задачи, как у `ensure_sprint`** (владелец, 25.10.2026). Те же 422; текст для канбана —
свой: «у проекта P канбан-доска, оценка — только на scrum-доске»; задача вне проектов — «… доску для оценки не
определить».
3. **`board_id` только при `story_points` в параметрах.** `ensure_fields` без оценки проверок доски не проходит — задачи
вне проектов правятся, как раньше.
4. **Повтор (`command_retry`) снимает `board_id` у `ensure_fields`** — доска определяется заново, как у `ensure_sprint`.
5. **Подтверждение по зеркалу не меняется:** `story_points` в зеркале — то же поле `customfield_15852`.
## Risks / Trade-offs
- **Формат `value` в `PUT …/estimation`.** Документация Atlassian показывает строку (`"8.5"`), Jira отдаёт число
(`1.0`). Агент шлёт число; если Jira банка не примет — правка агента после живой проверки на одной задаче (до пакета).
- **Частичная запись.** Остальные поля `PUT /issue` пишутся до оценки; ошибка оценки — `failed`, повтор команды
остальные поля не меняет (уже совпадают).
## Decisions made without discussion
| Дата | Решение | Обоснование | Цена ошибки |
|---|---|---|---|
| 25.10.2026 | R-1. Без `board_id` в команде агент v16 ставит оценку через `PUT /issue`, как v15 | совместимость с хабом до этого change; агент выкатывается после хаба, но порядок не гарантирован | нет: без доски поведение то же, что сейчас |
| 25.10.2026 | R-2. Порядок в агенте: сначала `PUT /issue` с остальными полями, затем оценка | оценка — новый путь с риском ошибки; остальные поля не должны зависеть от неё | частичная запись при ошибке оценки — повтор безопасен |
| 25.10.2026 | R-3. `GET /issue` не делается, если в команде только оценка | пакет оценок — 64 команды; минус один вызов Jira на команду | нет |
| 25.10.2026 | R-4. Текст 422 для канбана у `ensure_fields` — отдельный | «спринтов нет» вводит в заблуждение для оценки | косметика |
| 25.10.2026 | R-5. `value` в `PUT …/estimation` — число (`null` — очистить) | Jira отдаёт значение числом; проверяется вживую до пакета | одна правка агента |