Files
orchestrator/docs/work-items/ORCH-086/12-review.md

52 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 (D1D4).
`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) и фикса (D1D4).
- `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), регрессии нет.