Andrey Epifancev 1133cee873 docs: рулинг R-7
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Typ5sXWNMFirr2va2uL8o
2026-10-11 23:56:27 +04:00

3.6 KiB
Raw Blame History

bridge-core (агент) — решения

Спека изменения лежит в репозитории jira-hub: jira-hub/openspec/changes/bridge-core/ (specs/agent, specs/commands, specs/hub-api, design.md). Здесь — только решения, принятые при реализации агента без обсуждения с человеком.

Decisions made without discussion

# Дата Решение Обоснование Цена ошибки
1 2026-10-11 tests/__init__.py добавляет каталог tests/ в sys.path (R-1) Тесты из плана импортируют _common/fake_jira по простому имени, при discover -s tests -t . иначе ImportError Мелкая: переписать импорты в тестах на относительные
2 2026-10-11 Потолок на Retry-After не вводим (R-2) Спека: «ждать Retry-After»; потолок тихо нарушает требование сервера Агент может уснуть надолго при аномальном заголовке; лечится потолком позже
3 2026-10-11 Журнал: не лечим права существующего файла и не блокируем prune/append flock'ом; запрет prune при работающем агенте — в README (R-3) Журнал создаётся этим же кодом (0600); prune — ручная команда раз в месяц Редкая потеря записи журнала при гонке prune/run; лечится flock
4 2026-10-11 Minor-замечания ревью Task 3 (T3.1, T3.3–T3.6, T3.8: пагинация поиска дубля, флаги existed/created, режим epic_link, префикс маркера, общий except в run, тесты) чиним одной финальной волной, а не по месту (R-4) Не блокируют Task 4–5; одна волна дешевле Task 4–5 унаследуют общий run; ошибки будут чиниться после
5 2026-10-11 Неизвестный link_type берётся как сырое имя типа Jira (fallback), без failed (R-5) Так же делает хаб в check_confirmed; допускает ручной ввод имён Jira Опечатка в типе даст HTTP-ошибку Jira вместо понятной ошибки агента
6 2026-10-11 Спринт в refresh берётся из Agile API по активным/будущим спринтам доски, а не из поля search; закрытые спринты дают sprint = null (R-6) В настройках хаба нет id поля спринта (field_ids его не содержит); план Task 5 выбрал Agile Исторические имена спринтов затрутся при полном refresh; лечится полем спринта в настройках
7 2026-10-11 Бисекция чанка key in (...) при 400 принята без лимита вызовов (до ~2·m·log2(n)); если не найден ни один ключ — ошибка, а не missing (R-7) Иначе refresh с удалённой задачей падает целиком; лимит вызовов усложняет без выгоды при редких удалениях При массовом удалении задач — всплеск запросов и риск 429 (агент их переживает)