From e120da9234d0f8568b36bea979f9a3acb9d9e953 Mon Sep 17 00:00:00 2001 From: Stream Date: Thu, 4 Jun 2026 01:20:02 +0300 Subject: [PATCH] auto-sync: 2026-06-04 01:20:01 --- .../DEV_TASK_DROP_LOCAL_TESTS_QG.md | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 tasks/orchestrator/DEV_TASK_DROP_LOCAL_TESTS_QG.md diff --git a/tasks/orchestrator/DEV_TASK_DROP_LOCAL_TESTS_QG.md b/tasks/orchestrator/DEV_TASK_DROP_LOCAL_TESTS_QG.md new file mode 100644 index 0000000..0c760ef --- /dev/null +++ b/tasks/orchestrator/DEV_TASK_DROP_LOCAL_TESTS_QG.md @@ -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 (счётчик). Маленькая правка — не раздувай. Один исполнитель.