## Why Пользователь опубликовал несколько постов через веб-approve в канал @dedinit_vesti и увидел, что в канале пост выглядит «как простой агрегатор»: - только ссылка на чужой канал (заголовок-сниппет из первых 120 символов текста), - служебная информация по направлениям (📁 направление/язык, 📰 источник, 👁 просмотры), - в конце Telegram добавляет предпросмотр ссылки (link preview). Такой репост никому не интересен: не видно ни медиа из оригинального поста, ни полного текста, ни комментария модератора — только «голая» ссылка и служебка. ## What Changes Формат публикуемого поста (карточка) меняется на «богатый репост»: 1. **Медиа из оригинального поста** — если у поста есть media_path (фото/видео), оно отправляется **первым сообщением** (sendPhoto/sendVideo), а текст — следующим. Сейчас sendPhoto есть, но caption обрезается до 1024 и текст дублируется вторым сообщением; видео (content_type=video) вообще не отправляется как медиа (фильтр в card.py). 2. **Полный текст поста** — вместо сниппета из первых 120 символов (make_card) или summary отправляется полный текст исходного поста (обрезанный до Telegram-лимита 4096). 3. **Комментарий модератора** — в веб-форме approve добавляется поле «Комментарий (по желанию)»; комментарий публикуется первым (или в начале текста), чтобы в канале было видно мнение/контекст редактора, а не только пересказ. 4. **Ссылка на оригинал БЕЗ предпросмотра** — ссылка на исходный пост остаётся в тексте, но Telegram-предпросмотр ссылки отключается (sendMessage параметр `link_preview_options={"is_disabled": True}`), чтобы канал не выглядел как агрегатор ссылок с превью. 5. **Служебная информация** — частично убирается/переформатируется: направление/язык, источник, просмотры больше НЕ обязательны в теле поста (внешняя ссылка на оригинал уже даёт контекст). Остаётся атрибуция для своего контента («Дед в АйТи»). ## Impact - `publisher/card.py` — построение текста карточки (полный текст + комментарий + ссылка + атрибуция, служебка по минимуму). - `services/publisher/app/telegram.py` — поддержка видео (sendVideo), параметр `link_preview_options` для sendMessage; send_photo с полным caption без обрезания (или без дублирования текста). - `services/publisher/app/main.py` — Card модель: +`comment`; передача link_preview_options. - `web/app.py` (approve) — чтение комментария из формы, проброс в card. - `web/templates/candidates.html` — поле ввода комментария в форме approve. - `publisher/card.py` — фильтр медиа: разрешить video (mp4), не только картинки. - Rollback: вернуть прежний make_card и вызовы; карточки станут как раньше. - Безопасность: комментарий — пользовательский ввод → HTML-экранирование как текст поста.