Files
orchestrator/docs/work-items/ORCH-095/13-test-report.md
claude-bot cdc5e5c548
All checks were successful
CI / test (push) Successful in 41s
CI / test (pull_request) Successful in 41s
tester(ET): auto-commit from tester run_id=530
2026-06-10 00:17:26 +03:00

6.5 KiB
Raw Blame History

result, work_item, stage, author_agent, status, created_at, model_used, type, work_item_id
result work_item stage author_agent status created_at model_used type work_item_id
PASS ORCH-095 testing tester pass 2026-06-10 claude-opus-4-8 test-report ORCH-095

Test Report — ORCH-095

Фикс HTML-инъекции «<1м» в live-карточке трекера (render_task_tracker). Прогон полного регресса + профильной сюиты, smoke read-only API. Review-вердикт — APPROVED (12-review.md).

Окружение

  • Python: 3.12.13
  • pytest: 8.3.3
  • Дата: 2026-06-10
  • Worktree: /repos/_wt/orchestrator/feature_ORCH-095-bug-html-1-render-task-tracker (ветка feature/ORCH-095-bug-html-1-render-task-tracker — код именно этой задачи, не общий чекаут)

Smoke API (read-only, прод-контейнер не трогается)

  • GET /health{"status":"ok","service":"orchestrator"}
  • GET /status → активная задача ORCH-095 (id=80) на стадии testing, agent_running=null ✓
  • GET /queue → блок serial_gate присутствует (ORCH-088): enabled=true, репо orchestrator — active_task ORCH-095 testing, frozen=false, waiting пуст; блок auto_labels присутствует (ORCH-089). Регресса смока нет. ✓

Результаты

Полный регресс

cd <worktree> && pytest tests/ -v --tb=short1437 passed, 1 warning in 46.89s. Единственное предупреждение — PydanticDeprecatedSince20 (унаследованное, не относится к задаче).

Профильная сюита (ORCH-095)

pytest tests/test_tracker_html_escape.py -v24 passed (новый файл, TC-01…TC-11).

Регресс существующих тестов трекера (TC-12)

pytest tests/test_telegram_tracker.py tests/test_tracker_issue_link.py tests/test_tracker_status_line.py tests/test_notifications_orphans.py tests/test_notify_issue_links.py -q91 passed.

Сопоставление с тест-планом (04-test-plan.yaml)

TC ID Описание Тест-функция Результат
TC-01 _fmt_minutes(<60с) → HTML-безопасно, без сырого <1м test_tc01_sub_minute_duration_escaped_at_boundary PASS
TC-02 _fmt_minutes граничные входы (0/None/нечисло/60/большое/-5/59/61) — never-raise + безопасно test_tc02_fmt_minutes_never_raise_and_safe[*] (9 кейсов) PASS
TC-03 render_task_tracker со стадией < 1 мин — нет неэкранированного < из длительности test_tc03_render_sub_minute_stage_is_safe PASS
TC-04 Заголовок со спецсимволами < > & — только экранированно, без двойного экранирования test_tc04_title_special_chars_escaped_no_double PASS
TC-05 Статус-лейбл / имя модели / эффорт экранированы (defence-in-depth) test_tc05_status_label_escaped, test_tc05_model_escaped, test_tc05_effort_escaped PASS
TC-06 Токены/стоимость ($, числа) HTML-безопасны test_tc06_token_cost_metrics_safe PASS
TC-07 Регресс намеренной разметки: <a href> номер задачи остаётся кликабельным, не задвоен test_tc07_issue_number_stays_clickable PASS
TC-08 Регресс _done_link: строка 🔗 PR #n · 📦 Внедрено валидна, не экранирована test_tc08_done_link_markup_preserved PASS
TC-09 update_task_tracker (edit) — payload text не содержит сырого <1м-триггера test_tc09_edit_payload_is_parse_safe PASS
TC-10 Возобновление застрявшей карточки + анти-дубль ORCH-087 на транзиентном фейле test_tc10_valid_render_edits_in_place_no_new_card, test_tc10_transient_fail_does_not_duplicate PASS
TC-11 never-raise на битых входах (нет задачи / None-заголовок / битые timestamps / _esc) test_tc11_never_raise_missing_task, test_tc11_never_raise_none_title_and_bad_timestamps, test_tc11_esc_never_raises PASS
TC-12 Полный регресс существующих тестов трекера остаётся зелёным suite (91 passed) + полный регресс (1437 passed) PASS

Все 12 TC выполнены и сопоставлены.

Сопоставление с критериями приёмки (03-acceptance-criteria.md)

AC Содержание Покрытие Результат
AC-1 Стадия < 1 мин не ломает парсер Telegram (&lt;1м) TC-01, TC-03, TC-09 PASS
AC-2 Все динамические поля HTML-безопасны, без двойного экранирования TC-02, TC-04, TC-05, TC-06 PASS
AC-3 Регресс намеренной разметки (<a href> номер, _done_link, форматирование) TC-07, TC-08, TC-12 PASS
AC-4 Застрявшая карточка возобновляет обновления; анти-дубль ORCH-087 цел TC-10 PASS
AC-5 never-raise, зелёный регресс, CHANGELOG, машина стадий/гейты/схема БД не тронуты TC-11, TC-12, полный регресс 1437 passed PASS

Вывод pytest

======================= 1437 passed, 1 warning in 46.89s =======================

Профильная сюита:

======================== 24 passed, 1 warning in 1.31s =========================

Регресс трекера (TC-12):

91 passed, 1 warning in 4.32s

Итог

PASS — полный регресс зелёный (1437 passed), профильная сюита ORCH-095 зелёная (24 passed), каждый TC из тест-плана выполнен и сопоставлен с критериями приёмки, smoke API read-only (/health, /status, /queue с блоками serial_gate + auto_labels) без регресса. Обоснованных FAIL/смок-сбоев нет → result: PASS → задача переходит на deploy-staging.