Andrey Epifancev 20747c2b65 Агент v16: зазор между записями и сверка поля оценки доски (#53, I-1, I-2)
I-1: если ensure_fields записал поля через PUT /issue, перед записью оценки — зазор
ensure_fields. I-2: fieldId оценки доски сверяется с field_ids.story_points; расхождение —
failed без записи.

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

37 lines
3.9 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.

# 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 отдаёт число; живая проверка до пакета | одна правка агента |
| 25.10.2026 | I-1 (финальное ревью): между `PUT /issue` и `PUT …/estimation` одной команды — зазор `ensure_fields` | политика темпа: зазор между записями внутри команды | пакет «оценка + поля» идёт медленнее |
| 25.10.2026 | I-2 (финальное ревью): `fieldId` оценки доски сверяется с `field_ids.story_points` (если задан), расхождение — `failed` без записи | иначе число уйдёт в чужое поле доски другого проекта | лишний отказ, если поле настроено неверно — правится настройкой |