103 lines
4.9 KiB
Markdown
103 lines
4.9 KiB
Markdown
# 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 (иначе `<a href>` сломается).
|
||
- `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)`.
|