Files

5.0 KiB
Raw Permalink Blame History

01-BRD — ORCH-080: убрать Telegram link-preview (логотип Plane) в уведомлениях трекера

Work Item ID: ORCH-080 Эпик: ORCH-052 (под-задача ORCH-52g) Тип: Доработка (UX уведомлений) Приоритет: LOW (косметика) Зона: src/notifications.py

1. Контекст и проблема

Каждая задача в Telegram сопровождается одной live-карточкой трекера (src/notifications.py, ORCH-042/066/067). С ORCH-067 в карточке появился кликабельный номер задачи<a href="https://plane.mva154.duckdns.org/.../issues/<id>/">ORCH-NNN</a>.

Telegram по умолчанию разворачивает link-preview (web page preview) для первой ссылки в сообщении. Из-за ссылки на Plane под каждым сообщением трекера раскрывается крупный баннер-превью «Plane — Modern project management».

Жалоба (Слава, 08.06): баннер уродует ленту чата и дублируется на каждой задаче/каждом обновлении карточки (особенно заметно в дефолтном режиме bump, где карточка пересоздаётся на каждом переходе).

2. Диагностика (код-аудит src/notifications.py)

Функция Эндпоинт Текущий JSON-payload Превью
send_telegram() (стр. 52-62) POST /sendMessage chat_id, text, parse_mode: HTML, disable_notification разворачивается (нет disable_web_page_preview)
edit_telegram() (стр. 165-174) POST /editMessageText chat_id, message_id, text, parse_mode: HTML разворачивается (нет disable_web_page_preview)

Причина баннера: оба payload не содержат ключ disable_web_page_preview. Telegram Bot API по умолчанию (отсутствие ключа) включает превью.

delete_telegram() (/deleteMessage) превью не порождает — правки не требует.

3. Бизнес-цель

Карточка трекера и уведомления в Telegram не должны показывать баннер link-preview Plane, при этом ссылка на задачу остаётся кликабельной.

4. Бизнес-требования

  • BR-1. В payload sendMessage (send_telegram) присутствует disable_web_page_preview: True.
  • BR-2. В payload editMessageText (edit_telegram) присутствует disable_web_page_preview: True.
  • BR-3. Баннер-превью Plane больше не появляется ни под карточкой трекера (оба режима bump/edit), ни под отдельными notify-сообщениями, которые идут через send_telegram (notify_approve_requested, notify_error, alert'ы стадий) — все они используют тот же низкоуровневый примитив.
  • BR-4. Кликабельная ссылка <a href> на задачу в Plane сохраняется (parse_mode: HTML не меняется).
  • BR-5. Контракт never-raise сохранён: отправка/редактирование никогда не валит оркестратор; pytest зелёный.

5. Не-цели (вне скоупа)

  • Не менять текст/формат/верстку карточки.
  • Не трогать parse_mode (HTML нужен для <a href>).
  • Не трогать bump/edit-логику (update_task_tracker), репойнт tracker_message_id, delete-семантику.
  • Не вводить флаги/конфиг — поведение «без превью» безусловное (превью никому не нужно).
  • Не трогать схему БД.

6. Заинтересованные лица

  • Слава (Owner) — инициатор, конечный наблюдатель ленты Telegram.

7. Грабли / координация

  • Файл src/notifications.py затрагивает также ORCH-067 (и потенциально другие задачи эпика). Сверить, что правки (две строки) не конфликтуют при merge.
  • Один репозиторий с ORCH-74 → по ORCH-026 действует сериализация merge. Запускать после того как ORCH-74 доедет в main (или когда конвейер свободен), чтобы не плодить параллельный merge в orchestrator.
  • Деплой — штатный через Confirm Deploy (self-hosting, ORCH-059).