work_item: ORCH-042
description: >
  Режим bump live-трекера (delete+send+repoint, тихо, fallback, never-raises),
  сохранение режима edit без регрессий, и текстовые правки карточки
  (Подтверждение BRD, ✅ после approve, русские метки стадий, «Внедрено»).
  Сеть не трогаем: httpx / низкоуровневые helpers мокаются; изолированная temp-БД.

tests:
  # --- config ---
  - id: TC-01
    type: unit
    description: "Settings.tracker_mode по умолчанию 'edit' и читается из ORCH_TRACKER_MODE (AC-1)"
    module: tests/test_config.py
    expected: PASS

  - id: TC-02
    type: unit
    description: "Неизвестное/пустое значение режима -> update_task_tracker идёт по edit-ветке, без исключений (AC-2)"
    module: tests/test_telegram_tracker.py
    expected: PASS

  # --- edit mode regression ---
  - id: TC-03
    type: unit
    description: "edit: первый вызов -> sendMessage тихо, id сохранён, editMessageText не вызван (AC-3)"
    module: tests/test_telegram_tracker.py
    expected: PASS

  - id: TC-04
    type: unit
    description: "edit: повторный вызов -> editMessageText на сохранённый id, нового send нет (AC-4)"
    module: tests/test_telegram_tracker.py
    expected: PASS

  - id: TC-05
    type: unit
    description: "edit: EDIT_GONE -> отправка нового, id обновлён (AC-5)"
    module: tests/test_telegram_tracker.py
    expected: PASS

  - id: TC-06
    type: unit
    description: "edit: EDIT_NOT_MODIFIED и EDIT_FAILED -> нового сообщения нет, id не меняется (AC-6)"
    module: tests/test_telegram_tracker.py
    expected: PASS

  # --- bump mode ---
  - id: TC-07
    type: unit
    description: "bump: первый вызов (нет id) -> delete не вызван, send тихий, id сохранён (AC-7, AC-9)"
    module: tests/test_tracker_bump.py
    expected: PASS

  - id: TC-08
    type: unit
    description: "bump: повторный вызов -> delete(старый) затем send(тихо), id перенаправлен на новый, порядок delete->send (AC-8, AC-9, AC-10)"
    module: tests/test_tracker_bump.py
    expected: PASS

  - id: TC-09
    type: unit
    description: "bump fallback: delete_telegram->False -> новое всё равно отправлено, id обновлён, без исключений (AC-11)"
    module: tests/test_tracker_bump.py
    expected: PASS

  - id: TC-10
    type: unit
    description: "bump: send вернул None (транзиент) -> id не затёрт на None, ровно одна попытка send, без исключений (AC-13)"
    module: tests/test_tracker_bump.py
    expected: PASS

  - id: TC-11
    type: unit
    description: "bump: одна карточка за вызов -> send_telegram вызван <=1 раза (AC-10)"
    module: tests/test_tracker_bump.py
    expected: PASS

  # --- delete_telegram classification ---
  - id: TC-12
    type: unit
    description: "delete_telegram: ok:true -> True (httpx замокан)"
    module: tests/test_tracker_bump.py
    expected: PASS

  - id: TC-13
    type: unit
    description: "delete_telegram: ok:false 'message to delete not found' / 'message can't be deleted' / 'message_id_invalid' -> True (AC-12)"
    module: tests/test_tracker_bump.py
    expected: PASS

  - id: TC-14
    type: unit
    description: "delete_telegram: неизвестный ok:false / 5xx -> False (AC-12)"
    module: tests/test_tracker_bump.py
    expected: PASS

  - id: TC-15
    type: unit
    description: "delete_telegram: исключение (таймаут/сеть) -> False, never raises (AC-12, AC-14)"
    module: tests/test_tracker_bump.py
    expected: PASS

  - id: TC-16
    type: unit
    description: "delete_telegram: нет токена/chat_id -> False, HTTP не вызывается (AC-12)"
    module: tests/test_tracker_bump.py
    expected: PASS

  # --- never raises ---
  - id: TC-17
    type: unit
    description: "update_task_tracker никогда не бросает (DB/сеть сбой) в обоих режимах (AC-14)"
    module: tests/test_tracker_bump.py
    expected: PASS

  # --- text changes ---
  - id: TC-18
    type: unit
    description: "render: метка 'Подтверждение BRD' присутствует, 'Ревью БРД' отсутствует (AC-15)"
    module: tests/test_telegram_tracker.py
    expected: PASS

  - id: TC-19
    type: unit
    description: "render: approve-gate пройден (brd_review_ended_at задан) -> строка BRD с ✅, не ⏸️ (AC-16)"
    module: tests/test_telegram_tracker.py
    expected: PASS

  - id: TC-20
    type: unit
    description: "render: ожидание человека (brd_review_ended_at пуст) -> индикатор ожидания/⏳, не ✅ (AC-16)"
    module: tests/test_telegram_tracker.py
    expected: PASS

  - id: TC-21
    type: unit
    description: "render: русские метки стадий (Анализ/Архитектура/Разработка/Код ревью/Тестирование/Внедрение), английских нет — в ✅- и 🔄-строках (AC-17)"
    module: tests/test_telegram_tracker.py
    expected: PASS

  - id: TC-22
    type: unit
    description: "render done: итоговая строка содержит '📦 Внедрено', не 'deployed' (AC-18)"
    module: tests/test_telegram_tracker.py
    expected: PASS

  # --- separate alerts regression ---
  - id: TC-23
    type: unit
    description: "Состав отдельных пингов не изменён: approve-gate/error шлют 1 нетихий пинг; stage_change/agent_started/qg_failure не шлют (AC-19)"
    module: tests/test_telegram_tracker.py
    expected: PASS

  # --- full suite ---
  - id: TC-24
    type: integration
    description: "Вся pytest-сюита зелёная; обновлённые ассерты под русские метки проходят (AC-20)"
    module: tests/
    expected: PASS
</content>
