From 122144080b05f1d7c991242ccef69cf7627d7552 Mon Sep 17 00:00:00 2001 From: Stream Date: Wed, 3 Jun 2026 18:30:01 +0300 Subject: [PATCH] auto-sync: 2026-06-03 18:30:01 --- .../reports/dev-2026-06-03-pipeline-ux.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tasks/orchestrator/reports/dev-2026-06-03-pipeline-ux.md b/tasks/orchestrator/reports/dev-2026-06-03-pipeline-ux.md index a2da012..c7f8613 100644 --- a/tasks/orchestrator/reports/dev-2026-06-03-pipeline-ux.md +++ b/tasks/orchestrator/reports/dev-2026-06-03-pipeline-ux.md @@ -91,6 +91,19 @@ Baseline: 166 passed, 9 pre-existing 401 (test_webhooks.py). - НЕ деплоил, НЕ мержил — мерж за Стримом после живой проверки. - `.env.bak-*` (стрэй-бэкап) НЕ закоммичен. +## ДОП-ФИКС: mute Telegram в тестах (срочный, выполнен ПЕРЕД остальным) +Проблема: прогон pytest на проде слал РЕАЛЬНЫЕ Telegram Славе (тесты двигают стадию → `notify_stage_change` → `send_telegram`, читает живой `.env`). +Фикс: `tests/conftest.py` (новый) — autouse-фикстура `_no_telegram` глушит `send_telegram`. +- Патчит **источник** `src.notifications.send_telegram` (покрывает все `notify_*` и локальные `from .notifications import send_telegram` внутри функций — webhooks/plane, launcher, queue_worker, main). +- Дополнительно патчит `src.stage_engine.send_telegram` — там import на уровне модуля (3 прямых вызова), source-патч его НЕ перехватил бы. +- `raising=False` везде. + +**Доказательство (не на доверии):** прогнал полную сюиту с ФЕЙКОВЫМИ telegram-кредами (`ORCH_TELEGRAM_BOT_TOKEN=fake-leak`, `CHAT_ID=99999`) + трип-вайр на `httpx.post` (через sitecustomize), бросающий **BaseException** (чтобы `except Exception` в send_telegram НЕ проглотил) при любом вызове `api.telegram.org`: +- БЕЗ conftest → трип-вайр срабатывает (`TelegramLeak: ...botfake-leak/sendMessage`) → утечка реальна. +- С conftest → **190 passed, 9 baseline, 0 обращений к api.telegram.org** (leak-файл не создан). Славе ничего не прилетело. + +Коммит: `7fd6529 test(conftest): mute Telegram in all tests to stop prod leakage` — в том же PR #10. + ## Замечание для Стрима (живая проверка) - Rejected-вердикт (и `:rejected:` коммент) теперь **перезапускает агента предыдущей стадии** (через `STAGE_AUTHORS[prev_stage]`) — это унифицировано для обоих механизмов (раньше коммент-ветка для non-analysis только откатывала без перезапуска). Так выполнено требование ТЗ «откат + перезапуск агента». - Стадийные статусы видны на доске только в проекте enduro (UUID per-project). При онбординге новых проектов — ORCH-10.