fix(tradein): startup topic-check реально валидирует message_thread_id #3513

Merged
lekss361 merged 1 commit from fix/3471-topic-check-really-validates into main 2026-09-13 10:41:17 +00:00
Collaborator

Summary

  • sendChatAction не валидирует message_thread_id — живой прод-замер (#3471) показал, что она подтверждает даже заведомо несуществующую тему ({"ok":true,"result":true}). verify_chat_and_topic была ложно-зелёной ровно в сценарии, ради которого её писали: удалённая/переименованная тема проходила проверку, а реальная отправка потом падала на каждом сообщении.
  • Заменил проверку темы на sendMessage+deleteMessage: sendMessage с несуществующим message_thread_id мгновенно отвечает 400 Bad Request: message thread not found (тоже проверено на проде), а с валидным создаёт сообщение, которое сразу стирается deleteMessage — в истории треда не остаётся ничего.
  • Поправлен неверный докстринг send_chat_action, утверждавший обратное.
  • Поведение вокруг сохранено: тот же путь через клиент (ретранслятор/ретраи), тот же формат лог-строк, та же семантика возврата (bool, не роняет процесс).

Test plan

  • Живой прод-замер (ssh selectel -> docker exec tradein-tgbot): sendMessage с мусорным message_thread_id=987654 -> 400 message thread not found; с валидным message_thread_id=2 (support) -> успех, зонд-сообщение сразу удалено deleteMessage.
  • Новый тест test_verify_chat_and_topic_is_red_when_topic_deleted_even_though_send_chat_action_lies явно проверен на падение против до-фиксной реализации (git checkout HEAD -- client.py + прогон теста -> assert True is False), затем зелёный после возврата фикса.
  • pytest tests/services/tgbot/test_topic_check_and_group_rate_limit.py tests/test_alerts_become_events.py -- 34 passed.
  • ruff check на изменённые файлы -- чисто.

Closes #3471

🤖 Generated with Claude Code

https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG

## Summary - `sendChatAction` не валидирует `message_thread_id` — живой прод-замер (#3471) показал, что она подтверждает даже заведомо несуществующую тему (`{"ok":true,"result":true}`). `verify_chat_and_topic` была ложно-зелёной ровно в сценарии, ради которого её писали: удалённая/переименованная тема проходила проверку, а реальная отправка потом падала на каждом сообщении. - Заменил проверку темы на `sendMessage`+`deleteMessage`: `sendMessage` с несуществующим `message_thread_id` мгновенно отвечает `400 Bad Request: message thread not found` (тоже проверено на проде), а с валидным создаёт сообщение, которое сразу стирается `deleteMessage` — в истории треда не остаётся ничего. - Поправлен неверный докстринг `send_chat_action`, утверждавший обратное. - Поведение вокруг сохранено: тот же путь через клиент (ретранслятор/ретраи), тот же формат лог-строк, та же семантика возврата (`bool`, не роняет процесс). ## Test plan - [x] Живой прод-замер (ssh selectel -> docker exec tradein-tgbot): `sendMessage` с мусорным `message_thread_id=987654` -> `400 message thread not found`; с валидным `message_thread_id=2` (support) -> успех, зонд-сообщение сразу удалено `deleteMessage`. - [x] Новый тест `test_verify_chat_and_topic_is_red_when_topic_deleted_even_though_send_chat_action_lies` явно проверен на падение против до-фиксной реализации (`git checkout HEAD -- client.py` + прогон теста -> `assert True is False`), затем зелёный после возврата фикса. - [x] `pytest tests/services/tgbot/test_topic_check_and_group_rate_limit.py tests/test_alerts_become_events.py` -- 34 passed. - [x] `ruff check` на изменённые файлы -- чисто. Closes #3471 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG
bot-backend added 1 commit 2026-09-13 10:32:15 +00:00
fix(tradein): startup topic-check реально валидирует message_thread_id
All checks were successful
CI Trade-In / changes (pull_request) Successful in 10s
CI / changes (pull_request) Successful in 13s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m51s
a2e8c46db7
sendChatAction не проверяет message_thread_id — живой прод-замер (#3471)
показал, что она подтверждает даже заведомо несуществующую тему
({"ok":true,"result":true}). verify_chat_and_topic поэтому была
ложно-зелёной ровно в сценарии, ради которого её писали: удалённая или
переименованная тема форума проходила проверку, а реальная отправка
потом падала на каждом сообщении.

Заменил проверку темы на sendMessage+deleteMessage: sendMessage с
несуществующим message_thread_id мгновенно отвечает 400 "message
thread not found" (тоже подтверждено на проде), а с валидным создаёт
сообщение, которое сразу стирается deleteMessage — в истории треда не
остаётся ничего. Docstring send_chat_action поправлен — он утверждал
обратное.

Новый тест воспроизводит замеренное поведение (sendChatAction лжёт,
sendMessage честно отказывает) и явно проверен на падение против
до-фиксной реализации (git checkout HEAD -- client.py + прогон теста
дал assert True is False).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG
lekss361 merged commit 3218190a89 into main 2026-09-13 10:41:17 +00:00
lekss361 deleted branch fix/3471-topic-check-really-validates 2026-09-13 10:41:19 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3513
No description provided.