9.0 KiB
9.0 KiB
Acceptance Criteria — ORCH-067
Work Item: ORCH-067
Каждый критерий формулирует чёткое условие PASS/FAIL. Привязка к тестам — в 04-test-plan.yaml.
Группа A — Bump по умолчанию (Требование 1)
AC-1 — дефолт tracker_mode = bump
- PASS:
Settings().tracker_mode == "bump"без выставленного envORCH_TRACKER_MODE. - FAIL: дефолт остался
"edit"или иное.
AC-2 — bump-поведение: одна карточка падает вниз
- PASS: при втором (и последующем) вызове
update_task_trackerдля задачи с уже сохранённымtracker_message_idвызываетсяdelete_telegram(old_id)(best-effort), затемsend_telegram(...)сdisable_notification=True, затемset_tracker_message_idна новый id. В чате остаётся ровно одна карточка на задачу. - FAIL: карточка редактируется на месте при дефолте; либо появляются дубли; либо новая
карточка отправляется со звуком (
disable_notificationне True).
AC-3 — bump fail-safe: транзиентный фейл send не обнуляет указатель
- PASS: если
send_telegramвернулNone(нет креды/транзиентный фейл),tracker_message_idНЕ перезаписывается вNoneи дубликат в рамках вызова не создаётся. - FAIL: указатель обнулён или создан второй card-месседж в одном вызове.
AC-4 — режим edit остаётся доступен через env
- PASS: при
ORCH_TRACKER_MODE=editповедение прежнее (editMessageText, fallback на новый месседж только при EDIT_GONE). - FAIL: edit-режим сломан/недоступен.
Группа B — Статус-строка карточки по модели ORCH-066 (Требование 2)
AC-5 — статус-строка присутствует в карточке
- PASS:
render_task_tracker(task_id)содержит явную строку текущего Plane-статуса (напр.📍 <status>) в шапке/верхней части карточки. - FAIL: статус-строки нет.
AC-6 — корректный маппинг stage → Plane-статус
- PASS: для всех stage-выводимых состояний строка статуса соответствует таблице ТЗ §2.2:
created→To Analyse,analysis→Analysis,architecture→Architecture,development→Development,review→Code-Review,testing→Testing,deploy→Awaiting Deploy,done→Done. - FAIL: хотя бы один stage маппится на неверное имя/внутренний ярлык.
AC-7 — In Review (ожидание согласования BRD) как полноценный статус
- PASS: при
stage == "analysis",brd_review_started_atзадан иbrd_review_ended_atпуст — статус-строка явно отражает⏸️ In Reviewс пометкой «ожидание согласования BRD»; при этом существующая строка «Подтверждение BRD …» с ⏸️/⏳ сохранена. Работает без сетевых вызовов. - FAIL: In Review теряется/не показан как статус, либо строка «Подтверждение BRD» исчезла.
AC-8 — Awaiting Deploy и Needs Input отражены
- PASS: состояние ожидания Confirm Deploy показывается как
⏸️ Awaiting Deploy — ожидание Confirm Deploy; состояние вопросов аналитика — как❓ Needs Input — нужны уточнения. - FAIL: любое из этих состояний не отражено в статус-строке.
AC-9 — рендер карточки никогда не падает
- PASS: при любой ошибке построения статуса (битые данные, недоступный источник)
render_task_trackerвозвращает корректную карточку (деградация на stage-маппинг или fallback-строку), исключение наружу не выходит. - FAIL:
render_task_trackerбросает исключение.
Группа C — Кликабельный номер в карточке (Требование 3)
AC-10 — номер задачи в карточке — гиперссылка
- PASS: при наличии
plane_web_url(не loopback),plane_workspace_slug,project_id(резолв по repo) иplane_issue_idкарточка содержит<a href="https://<base>/<ws>/projects/<pid>/issues/<issue_id>/">ORCH-NNN</a>. - FAIL: номер выводится сырым текстом при наличии всех данных, либо URL собран неверно.
AC-11 — fail-safe ссылки в карточке
- PASS: при отсутствии любого из (web_base/не-loopback, workspace, project_id,
plane_issue_id) карточка показывает номер БЕЗ ссылки (
html.escape(work_item_id)) и не падает. - FAIL: падение, пустая ссылка
<a href="">, либо битый<a>тег.
Группа D — Кликабельный номер во всех уведомлениях (Требование 4)
AC-12 — единый хелпер ссылки
- PASS: существует
plane_issue_link(...), возвращающий HTML-ссылку при достаточных данных иhtml.escape(work_item_id)при недостаточных; никогда не бросает. - FAIL: хелпера нет, либо он падает на неполных данных.
AC-13 — хелпер применён во всех уведомлениях с work_item_id
- PASS: во всех точках
send_telegram/notify_*из ТЗ §3.3, где упоминаетсяwork_item_id(notify_approve_requested,notify_error, alert'ы stage_engine, launcher, merge_gate, job_reaper, security_gate, reconciler, main), номер задачи кликабелен (при наличии данных) и ведёт на ту же страницу Plane. - FAIL: хотя бы одна такая точка выводит номер сырым текстом при наличии данных.
AC-14 — HTML-экранирование пользовательского текста
- PASS: title/причины/сообщения с потенциальным HTML (
<,>,&) экранируютсяhtml.escape; разметка<a>остаётся валидной; сообщение проходитparse_mode=HTML. - FAIL: неэкранированный текст ломает разметку (тест с title, содержащим
<b>/&, обнаруживает поломку).
Группа E — Нерегресс и качество
AC-15 — инварианты транспорта/нотификаций сохранены
- PASS:
send_telegram/edit_telegram/delete_telegramне изменены по сигнатуре/ семантике; карточка тихая (disable_notification=True); инвариант «одна карточка на задачу» соблюдён;STAGE_TRANSITIONS/QG/схема БД не тронуты. - FAIL: изменён транспорт, карточка пингует, появились дубли, тронута схема БД/QG.
AC-16 — нет регресса для enduro-trails
- PASS: существующие тесты нотификаций (
test_notify_approve_links.py,test_notify_done_regression.pyи др.) проходят; поведение карточки для не-ORCH проектов без новых Plane-статусов деградирует корректно (alias-fallback, без ссылки при нехватке данных). - FAIL: падение существующих тестов или сломанная карточка для enduro.
AC-17 — весь набор тестов зелёный
- PASS:
pytest tests/ -qзелёный. - FAIL: любой упавший тест.
AC-18 — документация обновлена в том же PR
- PASS: обновлены
CLAUDE.md(раздел нотификаций/tracker),CHANGELOG.md, создан ADR per-work-item. - FAIL: функционал изменён, документация — нет (reviewer → REQUEST_CHANGES).