## Why Download id в уведомлениях бота сейчас уходит обычным текстом с префиксом `#` (`internal/tgbot/bot.go`, `render.go`). В клиентах Telegram по моноширинному ``-тексту работает tap-to-copy — удобно скопировать id для перехода на `/download/{id}` или для диагностики по логам. Обычный текст так скопировать нельзя. Чтобы получить ``, нужно включить у исходящих сообщений parse mode. Это делает разметку значимой для **всех** текстов бота: спецсимволы (`<`, `>`, `&`) в display name, путях, распознанных названиях, причинах и тексте ошибок сломают сообщение или будут истолкованы как разметка. Escape-хелпера сейчас нет — его надо ввести и аккуратно применить ко всем внешним фрагментам. ## What Changes - **Download id выводится моноширинным** (`{id}`) во всех уведомлениях бота — tap-to-copy. Визуальный префикс (`#` / `download_id=`) остаётся вне ``, чтобы копировался чистый id. - **Включается HTML parse mode** у всех исходящих сообщений — как у `send()`, так и у edit-пути обновления карточки (`refreshCard`). - **Вводится escape-хелпер**; все внешние/недоверенные фрагменты (display name, распознанное название, источник/контекст, путь плана, причины распознавания, provider, `error_code`/`error_msg`) экранируются перед вставкой в размеченное сообщение. Инвариант «выход LLM недоверенный» распространяется на разметку. - Секреты по-прежнему не попадают в сообщения и логи (без изменений). ## Capabilities ### New Capabilities Нет. ### Modified Capabilities - `notifications`: добавляется требование к **формату** уведомлений — download id моноширинным (tap-to-copy) и инвариант безопасного экранирования внешнего текста при включённом форматировании. Условия и события доставки уведомлений (падение, review, готовность, рассинхрон) без изменений. ## Impact - **Спеки:** дельта `notifications` (два ADDED-требования: формат id и экранирование). - **Код:** `internal/tgbot/bot.go` (`send` — ParseMode HTML; `refreshCard` — ParseMode HTML на edit; композиция id как ``), `internal/tgbot/render.go` (escape-хелпер + экранирование всех внешних фрагментов, id в ``). - **Тесты:** `internal/tgbot/bot_test.go` — обновить ожидания текста (id теперь в ``), добавить проверку экранирования спецсимволов во внешнем фрагменте. - **Миграции БД:** нет.