6.0 KiB
Raw Blame History

agent-v12-project-boards — решения агента

Спека и дизайн изменения — в jira-hub/openspec/changes/projects/ (issue aep/jira-hub#61, aep/jira-agent#35). Агентская часть — решения 7, 14, 15 дизайна хаба и требования agent «Доски проектов» (ADDED) и «Состав и настройки агента» (MODIFIED); контракт команд — commands (ensure_sprint.board_id, refresh.boards, результат boards).

Decisions made without discussion

Решения 1–21 записаны в jira-hub/openspec/changes/projects/design.md (раздел «Decisions made without discussion»; для агента — № 6, 7, 14); здесь — только решения агентской части.

Маркер Дата Решение Обоснование Цена ошибки
R-30 2026-10-19 Типы досок определяются первым шагом refresh — до поиска и в том числе при пустых keys Спека: «для каждой доски с type = null агент SHALL запросить» — без условий; хвост пакета refresh {keys: []} не должен оставлять тип неизвестным Лишний GET /board/{id} на доску неизвестного типа, если поиск затем упадёт; результат с типом при этом теряется до следующего refresh
R-31 2026-10-19 Любой HttpError на GET /board/{id} (в том числе 5xx) — тип null и строка в логе, refresh продолжается; ConnectionError не ловится — весь refresh failed с повтором, как при обрыве связи с Jira Спека: «ошибка запроса — в лог, refresh продолжается»; null тип в хабе не меняет, следующий refresh спросит снова; обрыв связи — не свойство доски Временный 5xx откладывает определение типа до следующего refresh (автообновление)
R-32 2026-10-19 Ошибка чтения спринтов scrum-доски (известной или только что определённой) в refresh не глотается: refresh failed с текстом Jira, как v11 Пропуск доски записал бы в зеркало sprint = null всем её задачам; спека о такой ошибке молчит Одна сломанная доска (удалена, стала канбаном) останавливает обновление зеркала всех проектов, пока владелец не поправит доску в базе хаба
R-33 2026-10-19 Запасной settings.board_id — только когда ключа boards нет (refresh) или board_id нет / null (ensure_sprint); boards: [] — ни одной доски, спринты не читаются Новый хаб оставляет board_id в настройках (решение 14 хаба) и шлёт boards всегда; [] от него значит «у проектов нет досок», а не «старый хаб» Если старый хаб когда-нибудь пришлёт boards: [], спринты пропадут из зеркала; такого хаба нет
R-34 2026-10-19 Ключ boards в результате refresh — только если агент запросил тип хотя бы одной доски; иначе ключа нет Спека: результат «для досок, чей тип агент запрашивал»; сценарий «Старый хаб» — «результат без boards» Хаб SHALL принимать результат без boards; если он ждёт {}, — ошибка разбора результата в хабе
R-35 2026-10-19 Доски сравниваются и выводятся по str(id); повторы в boards отбрасываются (запрос типа — один); элемент без id пропускается; тип принимается только точным "scrum"/"kanban", иное ("simple" и т. п.) — null со строкой в логе; спринты читаются в порядке boards, последнее найденное имя побеждает Ключи результата в спеке — строки; хаб шлёт без повторов, но повтор не должен стоить второго запроса; сценарий спеки — «один раз» Доска "4216" строкой и 4216 числом считаются одной; другой регистр типа от Jira ("Scrum") дал бы null
R-36 2026-10-19 По находке I-1 финального ревью: если scrum-доска не отдала спринты в refresh, агент перепроверяет её тип; стала kanban — доска пропускается, в результате boards: {"<id>": "kanban"}, refresh done; иначе failed с текстом «доска : …» (код и retryable прежние) Смена доски на канбан лечится без правки базы; при прочих ошибках владелец видит, какую доску править (R-32 расширил зону поражения на все проекты) Лишний GET /board/{id} при ошибке спринтов; типы досок, определённые в упавшем прогоне, не доходят до хаба — следующий refresh спросит снова