---
type: review
work_item_id: ORCH-086
verdict: APPROVED
version: 1
---

# Review ORCH-086

## Summary
Терминал-скип и `state_uuid`-dedup распространены на путь F-1 реконсилятора, закрывая F-1-пробел
ORCH-068 (ложное «ET-002 done разблокирована (потерян webhook)»). Изменение полностью локализовано
в `src/reconciler.py` (новый `_resolve_issue_status` + врезка ранних гардов в `_reconcile_gate_task`
+ переиспользование резолва в `_is_blocked_or_needs_input` через опц. аргументы с `_UNSET`-sentinel
для обратной совместимости). Реализация 1:1 соответствует ТЗ (TR-1/TR-2/TR-3) и ADR-001 (D1–D4).
`STAGE_TRANSITIONS`, `QG_CHECKS`, схема БД, сигнатуры `advance_stage`/`advance_if_gate_passed`/
`_note_unblock`, форма `status()`/`GET /queue`, config-флаги — без изменений. Контракт never-raise
сохранён на всех новых путях. Полный прогон `pytest tests/ -q` зелёный — 1069 passed.

## Findings

### P0 — Blocker
- (нет)

### P1 — Must fix
- (нет)

### P2 — Should fix
- (нет)

## Документация
Обновлена в том же PR, соответствует требованию «golden source наравне с кодом» (CLAUDE.md §2,
TRZ §8):
- `docs/architecture/README.md` — раздел Reconciler F-1 дополнен блоком ORCH-086 (терминал-скип +
  dedup на F-1, единый fetch на тик, безусловность относительно `reconcile_skip_blocked_enabled`).
- `CHANGELOG.md` — запись `fix:` ORCH-086 с описанием корня (причины A/B) и фикса (D1–D4).
- `docs/work-items/ORCH-086/06-adr/ADR-001-reconciler-f1-terminal-skip-and-dedup.md` — присутствует,
  Accepted, описывает решение, порядок гардов, семантику ошибок и отклонённые альтернативы.
- API не менялось → обновление таблицы API не требуется. Per-work-item ADR достаточно (точечный фикс
  существующего компонента, не сквозное решение — обосновано в §«Область и масштаб»).

## Контроль качества
- Тесты содержательные, не тривиальные: TC-86-01..09/11 (`tests/test_reconciler.py`) покрывают
  терминал по группе `completed`/`cancelled`, fallback по логическому ключу при пустых `groups`,
  DB-side `cancelled` без обращения к Plane, проброс/dedup `state_uuid`, анти-регресс легитимного
  unblock, never-raise без ложного уведомления, независимость терминал-скипа от Guard-2-флага;
  TC-86-10 (`tests/test_reconciler_plane.py`) — неизменность формы `status()`; TC-86-12 — зелёный
  регресс-прогон. Сопутствующая правка `tests/test_orch026_task_deps.py` корректно адаптирует мок
  Guard 2 под новую сигнатуру и держит резолв offline.
- `task.get("plane_id") or task.get("plane_issue_id")` в `_resolve_issue_status` — дословный перенос
  ранее протестированной логики Guard 2 (ORCH-060), регрессии нет.
