Skip to content

feat(share): readable, unforgeable Telegram previews - #20

Merged
AbsoluteMode merged 1 commit into
mainfrom
feat/tg-preview-readable
Jul 30, 2026
Merged

feat(share): readable, unforgeable Telegram previews#20
AbsoluteMode merged 1 commit into
mainfrom
feat/tg-preview-readable

Conversation

@AbsoluteMode

Copy link
Copy Markdown
Owner

Максим посмотрел первое живое превью: «выглядит как пиздец какой-то». Он прав — и по дороге нашлась дыра посерьёзнее косметики.

Дыра: Telegram сам линкифицирует URL в тексте, а текст ответа приходит из индекса. То есть вредоносная ссылка из чужого транскрипта становилась нажимаемой прямо в канале апрува.

Решение — вся недоверенная строка живёт в коде: имя пира и короткие строки в inline-span, вопрос/задача/сниппеты в fence. Разметка рендерится буквально, автолинков нет, сниппет не может подделать нашу строку /ok.

Читаемость: секции вместо стены, кап на фрагмент (320) и на весь ответ (1400) со счётчиком «сколько ещё уйдёт при отправке», число фрагментов, /ok <hash> как code span — Telegram делает его tap-to-copy.

Отказоустойчивость: если Telegram отверг разметку — уходит plain-версия. Превью не имеет права молча не дойти.

Поймано вживую при первой отправке: незаэкранированная ( в fragment(s) роняла всё сообщение 400-й. Добавил тест, который проверяет, что в нашей собственной обвязке нет неэкранированных reserved-символов вне кода.

11 новых тестов (14 в файле), сюита 224 passed.

🤖 Generated with Claude Code

The old preview was an unstructured wall of text, and Telegram auto-linkified
URLs pulled from the index — a malicious link in someone else other transcript
became tappable in the approval channel. Now every untrusted string (peer
name, question, stated task, snippets) goes inside a code span or fence: markup
renders literally, no auto-linking, and a snippet cannot fake our /ok footer.
Layout is sectioned, fragments are capped per-chunk and overall with a count of
what was withheld, and the /ok line is a code span so Telegram makes it
tap-to-copy. Markdown send falls back to plain text if Telegram rejects the
markup — a preview must never silently fail to arrive.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@AbsoluteMode
AbsoluteMode merged commit 9c58fe4 into main Jul 30, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants