56 lines
6.7 KiB
Markdown
56 lines
6.7 KiB
Markdown
# 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:true` → `True`;
|
||
- `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 на ревью.
|
||
</content>
|