--- type: review work_item_id: ORCH-080 verdict: APPROVED version: 1 --- # Review ORCH-080 ## Summary Задача убирает баннер Telegram link-preview («Plane — Modern project management»), который разворачивался под кликабельной ссылкой `ORCH-NNN` в карточке трекера и во всех notify/alert-сообщениях. Решение точно соответствует TRZ и ADR-001: добавлен ключ `"disable_web_page_preview": True` в JSON-payload обоих низкоуровневых примитивов `send_telegram` (`POST /sendMessage`) и `edit_telegram` (`POST /editMessageText`) — единая точка для всех потребителей, без kill-switch, без изменения контрактов. Изменение минимально (2 строки + комментарии), аддитивно и обратимо. Проверены все четыре оси (ТЗ, ADR, качество кода, тесты) + документация. Findings уровней P0/P1/P2 — нет. ## Findings ### P0 — Blocker - нет ### P1 — Must fix - нет ### P2 — Should fix - нет ## Соответствие ТЗ и AC - TRZ §2.1/§2.2 — ключ добавлен в оба payload в точности как предписано. ✅ - AC-1 — `disable_web_page_preview: True` в `sendMessage` payload (TC-01). ✅ - AC-2 — то же в `editMessageText` payload (TC-02). ✅ - AC-3 — баннер исчезает (ручная верификация на staging; косвенно покрыто AC-1/AC-2). ✅ - AC-4 — `parse_mode: "HTML"` сохранён в обоих payload, ссылка кликабельна (TC-03); `tests/test_notify_issue_links.py` зелёный. ✅ - AC-5 — поля `chat_id/text/parse_mode/disable_notification` (send) и `chat_id/message_id/text/parse_mode` (edit) сохранены; контракты возврата (`message_id|None`, `EDIT_*`) не изменились (TC-04/TC-05). ✅ - AC-6 — never-raise сохранён (TC-06); полный прогон `pytest tests/ -q` — **1058 passed**. ✅ - AC-7 — документация обновлена в том же PR (см. ниже). ✅ ## Соответствие ADR ADR-001 (Accepted): правка на уровне примитива (а не каждого вызова), безусловно без флага, top-level `disable_web_page_preview` вместо `link_preview_options`, `parse_mode: HTML` сохранён, контракты и инвариант «одна карточка на задачу» не тронуты. Реализация соответствует решению 1:1. Глобальные ADR не нарушены (`STAGE_TRANSITIONS`, `QG_CHECKS`, схема БД — без изменений). ✅ ## Качество кода - Изменение минимальное, целевое; комментарии ссылаются на ORCH-080 и поясняют цель. - `try/except` never-raise в обеих функциях не затронут; пути без кредов и контракты возврата сохранены. - Тесты содержательные: инспектируют реальный payload через мок `httpx` (`call_args.kwargs["json"]`), покрывают флаг, регрессию `parse_mode`/полей, контракты возврата и never-raise (TC-01..06). Нет тривиальных/пустых тестов. - Security: ключ булев, новых поверхностей/секретов нет. ## Документация Изменён `src/` (поведение исходящих Telegram-запросов) → документация обновлена в том же PR, как требует CLAUDE.md §2/§6: - `CHANGELOG.md` — запись в `## [Unreleased]` (тип `fix:`). ✅ - `CLAUDE.md` — раздел «Нотификации / Telegram live-tracker» дополнен пунктом «Без link-preview (ORCH-080)». ✅ - `docs/architecture/README.md` — компонент Notifications дополнен ремаркой ORCH-080. ✅ - ADR `docs/work-items/ORCH-080/06-adr/ADR-001-disable-telegram-link-preview.md` заведён. ✅ Документация соответствует коду; расхождений нет.