111 lines
5.0 KiB
YAML
111 lines
5.0 KiB
YAML
work_item: ORCH-086
|
||
description: >
|
||
Терминал-скип и проброс state_uuid на пути F-1 реконсилятора.
|
||
Тесты добавляются в tests/test_reconciler.py (рядом с существующими TC-01..TC-21),
|
||
переиспользуя фикстуры fresh_db / silence_side_effects / _green_ci /
|
||
plane_state_not_blocked и спай send_telegram. Все тесты — pytest, оффлайн
|
||
(Plane/Telegram мокаются), детерминированные.
|
||
tests:
|
||
- id: TC-86-01
|
||
type: unit
|
||
description: >
|
||
AC-1 — задача enduro НЕ-done в БД, но терминальная в Plane (group=completed),
|
||
гейт зелёный: F-1 НЕ вызывает _note_unblock и НЕ шлёт Telegram (ни при тике,
|
||
ни на первом проходе свежего Reconciler).
|
||
module: tests/test_reconciler.py
|
||
expected: PASS
|
||
|
||
- id: TC-86-02
|
||
type: unit
|
||
description: >
|
||
AC-2 — терминал-скип инкрементирует skipped_terminal_total и НЕ вызывает
|
||
advance_if_gate_passed для терминальной задачи (advance_stage-спай не дёрнут).
|
||
module: tests/test_reconciler.py
|
||
expected: PASS
|
||
|
||
- id: TC-86-03
|
||
type: unit
|
||
description: >
|
||
AC-2/R1 — терминал-детект по ГРУППЕ статуса Plane (completed/cancelled)
|
||
срабатывает независимо от проекта (enduro и orchestrator): задача в группе
|
||
cancelled тоже скипается.
|
||
module: tests/test_reconciler.py
|
||
expected: PASS
|
||
|
||
- id: TC-86-04
|
||
type: unit
|
||
description: >
|
||
AC-2/R1 — fallback терминал-детекта при пустых groups: терминальность по
|
||
логическому ключу done/cancelled проекта. Пустой groups + state_uuid ==
|
||
states['done'] -> скип.
|
||
module: tests/test_reconciler.py
|
||
expected: PASS
|
||
|
||
- id: TC-86-05
|
||
type: unit
|
||
description: >
|
||
AC-2 — терминальность по стадии БД оркестратора: задача со stage='cancelled'
|
||
(не отсекается get_active_tasks_for_reconcile, которое фильтрует только 'done')
|
||
скипается, не доходит до _note_unblock.
|
||
module: tests/test_reconciler.py
|
||
expected: PASS
|
||
|
||
- id: TC-86-06
|
||
type: unit
|
||
description: >
|
||
AC-3 — F-1 вызывает _note_unblock С непустым state_uuid (3 аргумента) на
|
||
легитимном unblock; проверяется, что dedup сохраняет ключ issue_id->state_uuid.
|
||
module: tests/test_reconciler.py
|
||
expected: PASS
|
||
|
||
- id: TC-86-07
|
||
type: unit
|
||
description: >
|
||
AC-3 — повторный F-1-тик для того же issue+state_uuid подавляется dedup-guard:
|
||
deduped_total += 1, второго send_telegram нет.
|
||
module: tests/test_reconciler.py
|
||
expected: PASS
|
||
|
||
- id: TC-86-08
|
||
type: unit
|
||
description: >
|
||
AC-4 (анти-регресс) — НЕ-терминальная реально застрявшая задача (рабочий
|
||
Plane-статус, прошла grace, нет active-job, гейт зелёный) ПО-ПРЕЖНЕМУ
|
||
продвигается и шлёт РОВНО один Telegram; unblocked_total += 1.
|
||
module: tests/test_reconciler.py
|
||
expected: PASS
|
||
|
||
- id: TC-86-09
|
||
type: unit
|
||
description: >
|
||
AC-5 — never-raise: исключение в терминал-детекте / fetch_issue_state не
|
||
роняет тик (reconcile_gate_once завершается) и НЕ приводит к ложной отправке
|
||
Telegram (консервативно: при неопределённости терминальности не уведомляем).
|
||
module: tests/test_reconciler.py
|
||
expected: PASS
|
||
|
||
- id: TC-86-10
|
||
type: unit
|
||
description: >
|
||
AC-6 — регресс F-2: существующие TC F-2 (терминал-скип/dedup/счётчики
|
||
ORCH-068) остаются зелёными; форма status()/GET-queue не изменилась
|
||
(skipped_terminal_total, deduped_total, unblocked_total присутствуют).
|
||
module: tests/test_reconciler_plane.py
|
||
expected: PASS
|
||
|
||
- id: TC-86-11
|
||
type: unit
|
||
description: >
|
||
AC-6 — reconcile_skip_blocked_enabled=False (escape hatch Guard 2) НЕ
|
||
отключает терминал-скип TR-1: терминальная задача всё равно скипается.
|
||
module: tests/test_reconciler.py
|
||
expected: PASS
|
||
|
||
- id: TC-86-12
|
||
type: unit
|
||
description: >
|
||
Полный прогон регрессии пакета reconciler: pytest tests/test_reconciler.py
|
||
tests/test_reconciler_plane.py tests/test_config.py -q зелёный.
|
||
module: tests/test_reconciler.py
|
||
expected: PASS
|