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