---
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` заведён. ✅

Документация соответствует коду; расхождений нет.
