Files
orchestrator/docs/BUGFIXES_2026-05-21.md

63 lines
3.8 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.
# 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>` — определяет ветку по 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`