Files
orchestrator/docs/work-items/ORCH-042/03-acceptance-criteria.md
claude-bot 66100855f6
All checks were successful
CI / test (push) Successful in 15s
analyst(ET): auto-commit from analyst run_id=167
2026-06-06 09:49:58 +00:00

6.7 KiB
Raw Permalink Blame History

03 — Критерии приёмки: ORCH-042

Каждый критерий — однозначное условие PASS/FAIL. Покрытие тестами — 04-test-plan.yaml.

Конфигурация

  • AC-1. Settings.tracker_mode существует, дефолт "edit", читается из env ORCH_TRACKER_MODE.
    • PASS: Settings().tracker_mode == "edit" без env; ORCH_TRACKER_MODE=bump"bump".
    • FAIL: поле отсутствует / другой дефолт / не читает env.
  • AC-2. Неизвестное/пустое значение режима трактуется как edit (оркестратор не падает).
    • PASS: ORCH_TRACKER_MODE=garbage (или пусто) → update_task_tracker идёт по edit-ветке, исключений нет.
    • FAIL: исключение / выбор bump-ветки на мусоре.

Режим edit (регрессия — поведение как было)

  • AC-3. Первый вызов (нет tracker_message_id): sendMessage тихо (disable_notification=True), id сохраняется; editMessageText НЕ вызывается.
  • AC-4. Повторный вызов при живом сообщении: editMessageText на сохранённый id; новое сообщение НЕ шлётся.
  • AC-5. edit вернул EDIT_GONE → шлётся НОВОЕ сообщение, id обновляется (fallback как раньше).
  • AC-6. edit вернул EDIT_NOT_MODIFIED или EDIT_FAILED → новое сообщение НЕ шлётся, id не меняется (защита от дублей сохранена).
    • Все AC-3..AC-6 проверяются при tracker_mode="edit" (дефолт). FAIL — любое расхождение с текущим поведением.

Режим bump

  • AC-7. Первый вызов в bump (нет id): deleteMessage НЕ вызывается; sendMessage тихо (disable_notification=True); возвращённый id сохраняется.
    • PASS: ровно один send_telegram(..., disable_notification=True), delete_telegram не вызван, get_tracker_message_id == new_id.
    • FAIL: вызван delete / громкое сообщение / id не сохранён.
  • AC-8. Повторный вызов в bump при существующем id: вызывается delete_telegram(старый_id), затем send_telegram(..., disable_notification=True), затем tracker_message_id перенаправляется на новый id.
    • PASS: порядок delete→send соблюдён, id == новый.
    • FAIL: нет delete / нет send / id остался старым.
  • AC-9. Bump тихий: новое сообщение всегда с disable_notification=True.
    • FAIL: disable_notification False/отсутствует.
  • AC-10. Одна карточка на задачу: за один вызов update_task_tracker в bump шлётся НЕ более одного нового сообщения.
    • FAIL: более одного send_telegram за вызов.

Устойчивость

  • AC-11. Fallback при delete-fail: если delete_telegram вернул False (старое >48ч / транзиент) — новое сообщение всё равно отправляется, id обновляется, исключений нет.
    • PASS: delete_telegram→False → ровно один send → id == новый.
    • FAIL: send пропущен / исключение всплыло.
  • AC-12. delete_telegram классификация (httpx замокан, never raises):
    • ok:trueTrue;
    • ok:false с "message to delete not found" / "message can't be deleted" / "message_id_invalid"True;
    • неизвестный ok:false / 5xx → False;
    • исключение (таймаут/сеть) → False;
    • нет токена/chat_id → False, HTTP-вызов не выполняется.
  • AC-13. Транзиентный сбой send в bump (send вернул None): tracker_message_id НЕ затирается на None; исключений нет; дублей нет (≤1 попытка send за вызов).
  • AC-14. update_task_tracker никогда не выбрасывает исключение ни в одном режиме (контракт «never raises») при любых сбоях БД/сети/Telegram.

Текстовые правки (оба режима)

  • AC-15. Метка «Подтверждение BRD» присутствует в карточке там, где раньше была «Ревью БРД»; строки «Ревью БРД» в выводе нет.
  • AC-16. После прохождения approve-gate (зафиксированы brd_review_started_at и brd_review_ended_at) строка подтверждения BRD начинается с (не ⏸️). Пока ждём человека (brd_review_ended_at пуст) — индикатор ожидания/ сохраняется (не ).
  • AC-17. Метки стадий в карточке русские: Анализ, Архитектура, Разработка, Код ревью, Тестирование, Внедрение. Английских меток (Analysis/Architecture/Development/Review/Testing/Deploy) в выводе нет — ни в « …»-строках, ни в «🔄 … идёт».
  • AC-18. Итоговая строка готовой задачи содержит «📦 Внедрено» (не «deployed»).

Регрессия и качество

  • AC-19. Состав отдельных пингов не изменён: notify_approve_requested шлёт ровно один НЕтихий пинг и стартует BRD-часы; notify_error — один НЕтихий пинг; notify_stage_change / notify_agent_started / notify_qg_failureНЕ шлют отдельных сообщений (только refresh трекера).
  • AC-20. Вся существующая и новая pytest-сюита зелёная (pytest tests/ -q). Существующие ассерты в tests/test_telegram_tracker.py обновлены под русские метки и «Подтверждение BRD».
  • AC-21. Документация обновлена в ТОМ ЖЕ PR: CHANGELOG.md, docs/architecture/internals.md (режимы + ORCH_TRACKER_MODE + delete_telegram), .env.example (ORCH_TRACKER_MODE). Отсутствие — REQUEST_CHANGES на ревью.