fix(tracker): no duplicate Telegram messages on not-modified/transient edits #22

Merged
admin merged 1 commits from fix/tracker-edit-not-modified into main 2026-06-04 13:22:47 +03:00
Owner

Что чинитЖивой Telegram-трекер слал НОВОЕ сообщение вместо редактирования одного (на ET-013: 21 editMessageText / 7 sendMessage). Дубли + старый трекер осиротевал и отставал.Корень: edit_telegram возвращал False на ЛЮБОМ 400, включая Telegram-ответ "message is not modified" (текст не изменился между переходами). update_task_tracker трактовал False как «edit упал» -> слал новое сообщение и перезаписывал tracker_message_id.## 3 правки1. edit_telegram теперь возвращает различимый результат ok|not_modified|gone|failed (вместо bool). 400 "message is not modified"/"exactly the same" -> not_modified (успех, лог DEBUG, НЕ дубль).2. update_task_tracker шлёт новое сообщение ТОЛЬКО при gone ("message to edit not found"/"can't be edited"/"MESSAGE_ID_INVALID"). ok/not_modified -> ничего. failed (сеть/таймаут/5xx/неизвестный 400) -> лог + выход, НЕ дубль. Никогда не падает.3. render_task_tracker у АКТИВНОЙ стадии с in-flight раном и >=2 прогонами агента показывает 🔄 Review · попытка N … идёт. Завершённые строки не тронуты; при 1 прогоне — как раньше, без «попытка N».## До/после (когда шлётся новое сообщение)- До: любой провал edit (включая not-modified) -> новое сообщение + перезапись id.- После: новое сообщение только при реально пропавшем сообщении (gone). not_modified и временные ошибки -> трекер дорисуется на следующем переходе.## НЕ трогалосьФормат завершённых строк, Итого, Ревью БРД, short_model_name, миграции, usage_comment/Plane-комменты, PLANE_STATES, HMAC, queue, launcher deployer-guard, отдельные алерты, disable_notification трекера.## Тесты+13 тестов (мокают httpx): not_modified->успех, not_found/can't-be-edited->gone, 200->ok, таймаут/5xx/unknown400->failed; update_task_tracker not_modified/failed не зовёт send, gone зовёт+обновляет id; render «попытка 2» при 2 review-ранах, без при 1, завершённые строки без изменений.Полный pytest: 272 passed, 9 failed (те же off-limits HMAC/401 webhook-тесты, baseline = 259 passed; +13 новых).

## Что чинитЖивой Telegram-трекер слал НОВОЕ сообщение вместо редактирования одного (на ET-013: 21 editMessageText / 7 sendMessage). Дубли + старый трекер осиротевал и отставал.**Корень:** `edit_telegram` возвращал `False` на ЛЮБОМ 400, включая Telegram-ответ `"message is not modified"` (текст не изменился между переходами). `update_task_tracker` трактовал `False` как «edit упал» -> слал новое сообщение и перезаписывал `tracker_message_id`.## 3 правки1. **edit_telegram** теперь возвращает различимый результат `ok|not_modified|gone|failed` (вместо bool). 400 "message is not modified"/"exactly the same" -> `not_modified` (успех, лог DEBUG, НЕ дубль).2. **update_task_tracker** шлёт новое сообщение ТОЛЬКО при `gone` ("message to edit not found"/"can't be edited"/"MESSAGE_ID_INVALID"). `ok`/`not_modified` -> ничего. `failed` (сеть/таймаут/5xx/неизвестный 400) -> лог + выход, НЕ дубль. Никогда не падает.3. **render_task_tracker** у АКТИВНОЙ стадии с in-flight раном и >=2 прогонами агента показывает `🔄 Review · попытка N … идёт`. Завершённые ✅ строки не тронуты; при 1 прогоне — как раньше, без «попытка N».## До/после (когда шлётся новое сообщение)- **До:** любой провал edit (включая not-modified) -> новое сообщение + перезапись id.- **После:** новое сообщение только при реально пропавшем сообщении (`gone`). not_modified и временные ошибки -> трекер дорисуется на следующем переходе.## НЕ трогалосьФормат завершённых строк, Итого, Ревью БРД, short_model_name, миграции, usage_comment/Plane-комменты, PLANE_STATES, HMAC, queue, launcher deployer-guard, отдельные алерты, disable_notification трекера.## Тесты+13 тестов (мокают httpx): not_modified->успех, not_found/can't-be-edited->gone, 200->ok, таймаут/5xx/unknown400->failed; update_task_tracker not_modified/failed не зовёт send, gone зовёт+обновляет id; render «попытка 2» при 2 review-ранах, без при 1, завершённые строки без изменений.Полный pytest: **272 passed, 9 failed** (те же off-limits HMAC/401 webhook-тесты, baseline = 259 passed; +13 новых).
admin added 1 commit 2026-06-04 13:21:08 +03:00
edit_telegram now returns a distinguishable outcome (ok|not_modified|gone|
failed) instead of a bare bool. update_task_tracker only sends a NEW message
when the original is truly gone; not_modified and transient failures no longer
spawn duplicate trackers or orphan the live one.

render_task_tracker shows "попытка N" on an actively re-run stage (>=2 agent
runs) so the text changes between review<->development cycles. Finished ()
lines are unchanged.

Tests: edit_telegram classification (ok/not_modified/gone/failed via mocked
httpx), update_task_tracker (not_modified/failed -> no send, gone -> send+id),
render attempt marker.
admin merged commit b222d7af27 into main 2026-06-04 13:22:47 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/orchestrator#22