# 02-TRZ — ORCH-080: убрать Telegram link-preview в уведомлениях трекера Work Item ID: ORCH-080 Зона изменений: `src/notifications.py` (две строки) ## 1. Задействованные модули `src/` - `src/notifications.py` — **единственный** изменяемый модуль: - `send_telegram(text, disable_notification=False)` — обёртка `POST .../sendMessage`. - `edit_telegram(message_id, text)` — обёртка `POST .../editMessageText`. Косвенно затронуты (поведение улучшается без изменения их кода — они вызывают изменённые примитивы): `update_task_tracker` (bump+edit), `notify_approve_requested`, `notify_error`, а также вызовы `send_telegram` из `launcher`/`stage_engine` (alert'ы деплоя/падений). ## 2. Изменения кода ### 2.1. `send_telegram()` — добавить ключ в JSON-payload `httpx.post` В словаре `json={...}` вызова `sendMessage` (текущие стр. 55-60) добавить строку: ```python "disable_web_page_preview": True, ``` Итоговый payload: ```python json={ "chat_id": s.telegram_chat_id, "text": text, "parse_mode": "HTML", "disable_notification": disable_notification, "disable_web_page_preview": True, }, ``` ### 2.2. `edit_telegram()` — добавить ключ в JSON-payload `httpx.post` В словаре `json={...}` вызова `editMessageText` (текущие стр. 168-173) добавить строку: ```python "disable_web_page_preview": True, ``` Итоговый payload: ```python json={ "chat_id": s.telegram_chat_id, "message_id": message_id, "text": text, "parse_mode": "HTML", "disable_web_page_preview": True, }, ``` > Примечание: Telegram Bot API исторически принимает top-level `disable_web_page_preview` > для `sendMessage`/`editMessageText` (актуальная схема также поддерживает > `link_preview_options.is_disabled`, но top-level флаг остаётся валиден и совместим). > Используем top-level флаг — минимальная, обратносовместимая правка, как указано в задаче. ## 3. Изменения API Нет изменений внутреннего HTTP API оркестратора. Меняется только тело исходящих запросов к Telegram Bot API (добавлен один булев ключ в payload двух методов). ## 4. Изменения схемы БД Нет. ## 5. Требования к новым QG checks Нет. Новые Quality Gate проверки не вводятся. ## 6. Конфиг / флаги Нет. Поведение «без превью» — безусловное (kill-switch не требуется: превью трекера не нужно никому, риск регрессии нулевой; правка обратимая одной строкой). `parse_mode`, `disable_notification`, bump/edit-логика — без изменений. ## 7. Артефакты, обновляемые по pipeline - `CHANGELOG.md` — запись в `## [Unreleased]` (тип `fix:` — косметика UX уведомлений). - Документация: правка `src/notifications.py` затрагивает поведение, описанное в `CLAUDE.md` (раздел «Нотификации / Telegram live-tracker») и `docs/architecture/README.md` (компонент Notifications). Достаточно короткой ремарки, что карточка/уведомления шлются без web-page-preview (по желанию архитектора — определить объём в ADR; ADR не обязателен для столь малой косметики, решение за архитектором). ## 8. Контракты-инварианты (не нарушать) - **never-raise**: обе функции по-прежнему ловят все исключения (`try/except: pass`/`return`) и не валят оркестратор. - Возвращаемые значения не меняются: `send_telegram` → `message_id|None`, `edit_telegram` → `EDIT_*`. - `parse_mode: "HTML"` сохранён в обоих payload (иначе `` сломается). - `disable_notification` в `send_telegram` сохранён (карточка тихая). - Инвариант «одна карточка на задачу» (bump/edit) не затрагивается. ## 9. Commit / ветка - Ветка: `feature/ORCH-080-orch-52g-telegram-link-preview` (существует). - Commit: `fix: disable Telegram link-preview in tracker notifications (ORCH-080)`.