# Bugfixes — 2026-05-21 ## Контекст Задача ET-005 (переключатель единиц измерения) застряла на переходе `development → review`. В процессе диагностики и починки найдено и исправлено 5 багов в orchestrator. ## Баги исправленные ### 1. CI status webhook: пустой `branches` в payload **Файл:** `src/webhooks/gitea.py` (handle_ci_status) **Проблема:** Gitea отправляет CI status webhook с `branches: []`. Функция делала ранний `return` — не могла определить branch и не продвигала задачу. **Решение:** Fallback через `git branch -r --contains ` — определяет ветку по SHA коммита. Ищет ветку `feature/*` в output. ### 2. git safe.directory в контейнере **Файл:** Docker runtime (orchestrator container) **Проблема:** `subprocess.run(["git", ...])` внутри контейнера падал с `fatal: detected dubious ownership in repository` — repo mount принадлежит другому user. **Решение:** `git config --global --add safe.directory '*'` при старте контейнера. Убран кастомный `env={**os.environ, "HOME": "/home/slin"}` который ломал gitconfig. ### 3. X-Gitea-Event: pull_request_approved не роутился **Файл:** `src/webhooks/gitea.py` (webhook router) **Проблема:** Gitea отправляет event type `pull_request_approved` при approve review, но роутер обрабатывал только `pull_request`. **Решение:** Расширен роутинг на `pull_request`, `pull_request_approved`, `pull_request_review_approved`. ### 4. review.state vs review.type — новый формат Gitea **Файл:** `src/webhooks/gitea.py` (handle_pr) **Проблема:** Gitea webhook отправляет `review.type = "pull_request_review_approved"` вместо `review.state = "APPROVED"`. Код искал только `review.state`. **Решение:** Маппинг из `review.type` если `review.state` пустой: `"approved" in type → APPROVED`, `"request_changes"/"rejected" in type → REQUEST_CHANGES`. ### 5. Нет auto-advance после завершения agent **Файл:** `src/agents/launcher.py` **Проблема:** После завершения tester (exit_code=0) задача оставалась в `testing` — не было механизма автоматического продвижения. Для `development → review` триггер — CI status webhook, для `review → testing` — PR review webhook, но для `testing → deploy` внешнего триггера нет. **Решение:** Добавлен метод `_try_advance_stage()` в `AgentLauncher`, вызывается из `_monitor_agent` после успешного завершения агента. Проверяет QG, продвигает stage, запускает следующего агента. ## Известные проблемы (не исправлены) ### dismiss_stale_approvals Branch protection `dismiss_stale_approvals: true` на main ветке: tester пушит коммит после review approval → approval становится stale → merge блокируется. **Workaround:** Re-approve через claude-bot после каждого push tester'а. **Рекомендация:** Либо отключить `dismiss_stale_approvals`, либо добавить auto-re-approve в orchestrator после tester push. ## Результат ET-005 прошла полный цикл: `analysis → architecture → development → review → testing → deploy → done`