auto-sync: 2026-06-04 01:20:01

This commit is contained in:
Stream
2026-06-04 01:20:02 +03:00
parent c906c05bce
commit e120da9234

View File

@@ -0,0 +1,59 @@
# DEV TASK — БАГ 6: убрать дублирующий локальный QG check_tests_local, довериться Gitea CI
**Проект:** orchestrator | **Сервер:** slin@82.22.50.71 | **Репо:** /home/slin/repos/orchestrator | **Контейнер:** orchestrator (8500)
**Ветка:** `fix/drop-local-tests-qg` из свежего main (`git checkout main && git pull && git checkout -b fix/drop-local-tests-qg`). main = `994f73a` (PR #16).
⚠️ **ГРАБЛЯ push (ORCH-7):** после push `git log origin/main..origin/fix/drop-local-tests-qg` ДОЛЖЕН показать коммит ДО отчёта «PR готов». Токен Gitea: `docker exec orchestrator printenv ORCH_GITEA_TOKEN`.
## Контекст / зачем
`check_tests_local` — легаси-затычка эпохи «Gitea CI не настроен» (docstring S-1: "instead of depending on Gitea CI (which is not configured -> always false)"). CI **теперь настроен и работает** (`.gitea/workflows/ci.yml`: lint+test+build, статусы приходят). Локальный прогон тестов:
1. ДУБЛИРУЕТ настоящий CI;
2. гоняет тесты enduro-trails в окружении контейнера оркестратора, где НЕТ зависимостей проекта (`lxml`/`shapely`/`defusedxml`) → ложные провалы (баг 6: `ModuleNotFoundError` на сборке).
CI гоняет тесты в правильном окружении (`pip install ".[dev]"`). Доверяемся ему через уже существующий `check_ci_green`.
## Поток `development` (как есть — НЕ ломать)
В `src/webhooks/gitea.py` `handle_ci_status` (~стр.199) УЖЕ реализовано: `state==success && stage==development``check_ci_green` (double-check API) → advance `development → review` + enqueue reviewer. Этот CI-путь рабочий и остаётся главным.
Проблема: в `src/stages.py:16` стадия development привязана к QG `check_tests_local`, который срабатывает по ДРУГОМУ триггеру (завершение агента-developer в stage_engine), параллельно CI-пути и в кривом окружении.
## Фикс — 3 точечных правки
### 1. `src/stages.py` стр.16 — сменить QG стадии development
```python
# было:
"development": {"next": "review", "agent": "reviewer", "qg": "check_tests_local"},
# стало:
"development": {"next": "review", "agent": "reviewer", "qg": "check_ci_green"},
```
### 2. `src/webhooks/gitea.py` ~стр.219-224 — снять подавление CI-failure
Сейчас при `state==failure` стоит «log only, suppressed — local tests are the gate». Раз CI теперь авторитетный гейт, при `failure && stage==development` нужно уведомлять о провале QG (как при других QG-fail), НЕ молча глотать. Замени блок `elif state == "failure":` на:
```python
elif state == "failure" and current_stage == "development":
# CI is now the authoritative gate for development -> review.
# A failing CI means the QG did not pass; notify (do not silently advance).
notify_qg_failure(task_id, current_stage, "check_ci_green", f"Gitea CI failed on branch '{branch}'")
```
(сохрани существующие импорты `notify_qg_failure` — он уже используется выше в этом же файле; не добавляй дублей импортов.)
### 3. `src/qg/checks.py` — НЕ удалять функцию, но пометить deprecated
Оставь `check_tests_local` в коде и в реестре `QG_CHECKS` (вдруг где-то ещё ссылаются / для истории), но обнови docstring: пометь `DEPRECATED: replaced by check_ci_green on the development stage (CI is now configured). Kept for backward-compat; not wired to any stage.` НЕ меняй её тело (pytest-вызов из PR #16 оставь как есть). Цель — чтобы grep по стадиям показывал, что она нигде не привязана.
## Ограничения
- 🚫 НЕ трогай stage_engine advance-логику (кроме того, что QG-имя для development сменится автоматически через stages.py), webhook HMAC/project-filter, nginx, openclaw.json, .env, deploy/rollback, очередь, PLANE_STATES, conftest.py, gitea_public_url, status-only verdict, другие стадии/QG.
- 🚫 НЕ ставь lxml/shapely/defusedxml/make в Dockerfile — суть фикса в том, чтобы НЕ гонять тесты проекта в контейнере оркестратора.
- 🚫 НЕ удаляй check_tests_local целиком (deprecated, не wired).
- Conventional Commits, один коммит: `fix(qg): use check_ci_green instead of local tests on development stage`.
## Тесты (контейнер)
`IMG=$(docker inspect orchestrator --format '{{.Config.Image}}'); docker run --rm -v /home/slin/repos/orchestrator:/code -w /code --entrypoint python3 $IMG -m pytest tests/ -q`
- Найди тесты, проверяющие QG стадии development / check_tests_local / CI-failure-suppression (tests/test_stage_engine.py, tests/test_webhooks.py, tests/test_qg.py). ОБНОВИ их под новое поведение:
- get_qg_for_stage("development") теперь == "check_ci_green".
- CI failure на development теперь шлёт notify_qg_failure (а не молчит) — поправь/добавь assert.
- Если был тест, что development-QG это check_tests_local — переориентируй на check_ci_green.
- Baseline: **210 passed + 9 pre-existing failed** (tests/test_webhooks.py HMAC/401 — off-limits, не трогать их суть). ⚠️ ВНИМАНИЕ: 9 baseline-failed включают test_webhooks по CI/push — НЕ пытайся их «чинить», но если твоя правка handle_ci_status затрагивает их ожидания, аккуратно сверься, что НЕ ломаешь дополнительно. Итог passed не ниже прежнего (учти, что часть тестов изменит ассерты — счётчик должен остаться ~213, как после PR #16).
## Отчёт
- НЕ деплоить, НЕ мержить (мерж + боевой прогон на task 29 делает ассистент: после деплоя дёрну CI-статус success на ветке ET-011 → должно уехать development→review + запуск reviewer).
- В отчёте: точные старый/новый код всех 3 правок, список обновлённых тестов с пояснением, полный вывод pytest (счётчик). Маленькая правка — не раздувай. Один исполнитель.