fix(tracker): no duplicate Telegram messages on not-modified/transient edits #22
Reference in New Issue
Block a user
Delete Branch "fix/tracker-edit-not-modified"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что чинитЖивой 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 новых).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.