ensure_fields со story_points получает board_id доски проекта задачи; агент v16 пишет
оценку через /rest/agile/1.0/issue/{key}/estimation — поле не на экране редактирования.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
50 lines
4.8 KiB
Markdown
50 lines
4.8 KiB
Markdown
## 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 отдаёт значение числом; проверяется вживую до пакета | одна правка агента |
|