8.7 KiB
verdict, work_item, stage, author_agent, status, created_at, model_used, type, work_item_id, version
| verdict | work_item | stage | author_agent | status | created_at | model_used | type | work_item_id | version |
|---|---|---|---|---|---|---|---|---|---|
| APPROVED | ORCH-120 | review | reviewer | approved | 2026-06-17 | claude-opus-4-8 | review | ORCH-120 | 2 |
Review ORCH-120 — Открытые вопросы аналитика → Needs Input
Summary
Реализация сильная, завершённая и корректная. Ранее мёртвый путь «аналитик задаёт
блокирующие вопросы → 01-questions.md → Needs Input» активирован четырьмя согласованными
изменениями (контракт промпта + канон артефакта; приоритет вопросов над files_ok; авто-park через
ось «пауза» ORCH-124; resume + unpark). Чистая логика вынесена в leaf src/analyst_questions.py
(never-raise, kill-switch, self-hosting-скоуп — зеркало coverage_gate/serial_gate); side-effects
изолированы в stage_engine (_decide_analysis_outcome / _emit_analysis_needs_input /
_emit_analysis_in_review / _emit_analysis_empty). ORCH-089 autoApprove-блок перенесён
байт-в-байт (сверено по git show origin/main). STAGE_TRANSITIONS / реестр и имена QG_CHECKS
/ check_* / machine-verdict-ключи / схема БД — подтверждённо не тронуты (пустой git diff по
src/stages.py, src/qg/checks.py, src/db.py). Все 11 AC реализованы и покрыты; обязательный
регресс-тест TC-01 (Bug-трек, ORCH-019 BR-4) — валидный фиксатор дефекта (красный на дофиксовом
files_ok-first порядке, зелёный после). Полный регресс pytest tests/ — 2205 passed (86s).
Блокировавший ранее дефект устранён. Предыдущая ревизия (v1, run_id=780) выносила
REQUEST_CHANGES из-за единственного P1 — необновлённой витрины системы docs/overview/
(ось ORCH-011 / ORCH-079). Коммит 19c3177 обновил витрину в этом же PR (см. раздел «Документация»);
ось закрыта, tests/test_system_docs.py зелёный. Новых P0/P1/P2 нет → APPROVED.
Findings
P0 — Blocker
(нет)
P1 — Must fix
(нет)
P2 — Should fix
(нет)
P3 — Nice to have
- Косметика (не привязано к правилу, не блокирует):
_decide_analysis_outcomeв gate-off ветке повторно собирает путь01-questions.md(os.path.join+os.path.isfile), который уже инкапсулирован вanalyst_questions.questions_active; а_emit_analysis_*повторно резолвятget_worktree_path. Дублирование намеренно (gate-off ветка = «оригинальный байт-в-байт порядок»), поведенчески безвредно — при будущем рефакторе можно консолидировать резолв worktree.
Документация
Обновлено (проверено по diff) — golden source синхронизирован с кодом:
docs/overview/tech-pipeline.md— абзац «пауза без блокировки» теперь называет два источника паузы (операторPOST /serial-gate/pause+ движок авто-park на Needs Input, под флагомanalyst_needs_input_autopause_enabled, скоуп self-hosting; симметричный unpark на resume).docs/overview/tech-observability.md— пунктGET /queueобновлён: пауза/возобновление в serial gate — от оператора и от движка (авто-park на Needs Input).docs/overview/tech-agents.md— строкаanalystдополнена when-applicable сигнальным01-questions.md+ врезка о канале «блокирующие вопросы → Needs Input».docs/architecture/README.md— новый раздел «Открытые вопросы аналитика → Needs Input (ORCH-120 — реализовано)» со ссылкой на adr-0053.CHANGELOG.md— запись[Unreleased]с полным описанием 4 изменений, флагов и витрины.docs/_standards/PIPELINE_DOCS.md— строка манифеста для01-questions.md(владелецanalyst,when-applicable, сигнальный, не machine-verdict) + примечание о префиксе01-(DQ-4)..openclaw/agents/analyst.md— контракт «блокирующие вопросы →01-questions.md, НЕ фабриковать deliverables» + поведение на resume; канон 52d сохранён (анти-дрейф-asserttest_orch120_analyst_documents_questions_channel+ канон-тесты зелёные).docs/_templates/01-questions.md— новый скелет (frontmatter 52c с плейсхолдерами; контекст / блокирующие вопросы / что разблокирует анализ)..env.example— 3 ключаORCH_ANALYST_*с описанием и безопасными дефолтами.- ADR:
docs/work-items/ORCH-120/06-adr/ADR-001-analyst-open-questions-needs-input.md+ сквознойdocs/architecture/adr/adr-0053-analyst-open-questions-needs-input-flow.md.
Обзорные доки / витрина (ORCH-011 / ORCH-079): README.md «Известные ограничения» проверен —
нет пункта, который закрывается этой задачей (мёртвый путь вопросов не значился ограничением),
обновление не требуется. Витрина docs/overview/ обновлена в том же PR (см. выше). Ось закрыта.
Нужно обновить: ничего.
Проверки осей (для прозрачности)
- Соответствие ТЗ/AC: AC-1…AC-11 реализованы и покрыты
(
tests/test_orch120_analyst_needs_input.pyTC-01…TC-10,..._serial_gate_needs_input.pyTC-04 интеграционно через реальныйclaim_next_job,..._resume_unpark.pyTC-05 + autopause-off,..._questions_artifact_canon.py, assert канона). Полный регресс 2205 passed. TC-01 — валидный обязательный фиксатор (RED→GREEN), требование ORCH-019 BR-4 для Bug→escalate full-cycle выполнено. - Соответствие ADR / трассировка (ORCH-078): реализация = ADR-001 / adr-0053 (D1…D5, DQ-1…DQ-4).
STAGE_TRANSITIONS/QG_CHECKS/check_*/ machine-verdict / схема БД — байт-в-байт (пустой diff). ОRCH-089 autoApprove перенесён вербатим; ось «пауза» ORCH-124 переиспользована (новых колонок нет); инварианты ORCH-066 (Needs Input только у аналитика — не расширен), ORCH-088/124 (serial-gate/пауза — лишь корректно триггерится, код не тронут), ORCH-090 (relaunch-guard — unpark врезан ПОСЛЕ гейта, подcurrent_stage=='analysis', не ослаблен) — сверены, не сломаны. - Качество кода: leaf-паттерн чистый (импорт только
os/logging/config+ ленивыйqg.checks), never-raise во всех публичных функциях и врезках, kill-switch + скоуп корректны (questions_gate_applies/autopause_applies), docstrings на публичных функциях содержательны. Freshness-supersede (DQ-2) детерминирован и offline; fail-направление к Needs Input — безопасно («не строить на домыслах»). Гейт-off ветка восстанавливает оригинальный порядок байт-в-байт (AC-9). - Документация: golden source (номерные/стандартные доки, ADR, CHANGELOG,
.env.example) и обзорная витринаdocs/overview/обновлены в том же PR. Ось обзорных доков закрыта.