Design-only change agent-v16-sp-estimation (#53)

Оценка из ensure_fields через /rest/agile/1.0/issue/{key}/estimation доски: поле оценки
не на экране редактирования Jira банка. Контракт — sdlc-hub#113.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Andrey Epifancev 2026-10-25 21:39:19 +04:00
parent 2a82f13433
commit 3dbca034ad

View File

@ -0,0 +1,34 @@
# agent-v16-sp-estimation — решения агента
Спека и дизайн изменения — в `sdlc-hub/openspec/changes/sp-estimation-board/` (issue aep/sdlc-hub#113, aep/jira-agent#53).
Агентская часть: требование `agent` «Спринты, ранг и оценки» (MODIFIED: оценка через доску) и строка `ensure_fields`
в `commands` «Команда — желаемый результат на одной задаче» (MODIFIED: `board_id` при `story_points`, чтение и запись
оценки через `/rest/agile/1.0/issue/{key}/estimation`). Версия агента — 16.
## Причина
Jira банка 25.10.2026 отклонила `PUT /rest/api/2/issue/{key}` с `customfield_15852`: «Field cannot be set. It is not on
the appropriate screen, or unknown». Поле оценки не на экране редактирования; бэклог Scrum ставит его через доску.
Владелец проверил в браузере: `GET /rest/agile/1.0/issue/AURORA-1704/estimation?boardId=4216` →
`{"fieldId":"customfield_15852","value":1.0}`.
## Решения агента
1. **`ensure_fields` с `story_points` и `board_id`:** `GET AGILE/issue/{key}/estimation?boardId=<board_id>`, сравнение
`_same_points(value, want)`; отличается — `PUT` туда же `{"value": want}` (`null` — очистить). `field_ids.story_points`
и `GET /field` для этого не нужны.
2. **Остальные поля — как v15**, `PUT /issue` только с ними; `GET /issue` — только если в команде есть поля, кроме
оценки (`key`, `board_id`, `story_points` не считаются).
3. **Порядок:** сначала `PUT /issue` с остальными полями, затем оценка. Ошибка оценки — исключение HTTP наружу, как у
прочих вызовов Jira (команда `failed` с текстом Jira).
4. **Без `board_id`** — оценка через `PUT /issue` в поле `field_ids.story_points`/найденное по имени, как v15.
5. **Проверка значения** (`число ≥ 0 или null`) — до любых вызовов Jira, как v15.
## Decisions made without discussion
| Дата | Решение | Обоснование | Цена ошибки |
|---|---|---|---|
| 25.10.2026 | R-1: без `board_id` — путь v15 | совместимость с хабом до #113 | нет |
| 25.10.2026 | R-2: сначала остальные поля, затем оценка | новый путь не должен ломать остальные поля | частичная запись, повтор безопасен |
| 25.10.2026 | R-3: без `GET /issue`, если в команде только оценка | минус вызов Jira на команду в пакете оценок | нет |
| 25.10.2026 | R-5: `value` — число как есть | Jira отдаёт число; живая проверка до пакета | одна правка агента |