reviewer(ET): auto-commit from reviewer run_id=148
This commit is contained in:
80
docs/work-items/ORCH-048/12-review.md
Normal file
80
docs/work-items/ORCH-048/12-review.md
Normal file
@@ -0,0 +1,80 @@
|
||||
---
|
||||
type: review
|
||||
work_item_id: ORCH-048
|
||||
verdict: APPROVED
|
||||
version: 1
|
||||
---
|
||||
|
||||
# Review ORCH-048
|
||||
|
||||
## Summary
|
||||
|
||||
Фикс достоверности staging-чека B6: реестр проектов теперь читается по HTTP у живого
|
||||
инстанса (новый read-only `GET /projects`), а не локальным импортом `src.projects` в
|
||||
process-env скрипта (host-path хак `/repos/orchestrator` + `importlib.reload`), который
|
||||
давал ложный FAIL на каноническом host-запуске деплоера. Выбран вариант (а) из 02-trz §4,
|
||||
обоснован в ADR-001. Реализация чистая, defensive, полностью покрыта тестами; вся
|
||||
обязательная документация обновлена в том же PR. **APPROVED.**
|
||||
|
||||
Проверены 4 оси: соответствие ТЗ, соответствие ADR, качество кода, качество тестов — плюс
|
||||
обновление документации. Замечаний уровня P0/P1 нет.
|
||||
|
||||
## Соответствие ТЗ (02-trz / 03-acceptance-criteria)
|
||||
|
||||
- **TR-1 / AC-1** ✓ B6 получает known id из `GET /projects` живого инстанса (порт 8501) —
|
||||
источник отражает реестр процесса, реально обслуживающего webhooks; локальный импорт убран.
|
||||
- **TR-2** ✓ Контракт вердикта неизменен: PASS ⟺ `SANDBOX ∈ known ∧ PROD_ET ∉ known ∧
|
||||
PROD_ORCH ∉ known`; те же константы.
|
||||
- **TR-3** ✓ Формат `Results.add(label, passed, detail)` сохранён (`sandbox=…, prod-ET=…, prod-ORCH=…`).
|
||||
- **TR-4 / AC-1** ✓ Недоступность источника (network error / не-200 / нет ключа / битый тип) →
|
||||
детерминированный FAIL без необработанного исключения и без ложного PASS. Покрыто TC-07a–d.
|
||||
- **TR-5** ✓ Stdlib-only: B6 использует тот же `_get(...)`, что A/B4/B5/C.
|
||||
- **TR-6** ✓ Удалены `sys.path.insert(0, "/repos/orchestrator")` и `importlib.reload`;
|
||||
статический guard в TC-06.
|
||||
- **AC-2** ✓ `_evaluate_b6(known)` — чистая функция; оба исхода (clean→PASS, polluted→FAIL)
|
||||
покрыты юнитами без поднятия инстанса/docker (TC-01…TC-05).
|
||||
- **AC-3** ✓ `git diff` не трогает `src/projects.py`, `.env*`. Прод-логика — только additive
|
||||
read-only роут `GET /projects`; существующие роуты неизменны; блоки A/B4/B5/C функционально
|
||||
не тронуты (изменение `block_b(base, results)` — необходимая проброска base-url, не меняет
|
||||
логику остальных чеков).
|
||||
- **AC-4** ✓ `pytest tests/ -q` → 476 passed.
|
||||
- **AC-5** ✓ Документация обновлена (см. ниже).
|
||||
|
||||
## Соответствие ADR
|
||||
|
||||
- ADR-001 (per-work-item): реализация точно соответствует решению — вариант (а), эндпоинт с
|
||||
заявленной схемой ответа (`known_plane_project_ids` + `projects[{id,repo,prefix,name}]`,
|
||||
без секретов), B6 на HTTP, чистая `_evaluate_b6`, детерминированный FAIL.
|
||||
- ADR-0003 (staging-гейт `check_staging_status`): поведение гейта не меняется — повышается лишь
|
||||
достоверность одного чека suite. Нарушений нет.
|
||||
- Self-hosting: изменение additive/read-only, прод-поведение существующих роутов неизменно;
|
||||
доставка через штатный staging-гейт без внепланового рестарта прод-контейнера.
|
||||
|
||||
## Findings
|
||||
|
||||
### P0 — Blocker
|
||||
- нет
|
||||
|
||||
### P1 — Must fix
|
||||
- нет
|
||||
|
||||
### P2 — Should fix
|
||||
- нет
|
||||
|
||||
### P3 — Nice-to-have
|
||||
- `GET /projects` импортирует `known_plane_project_ids`/`PROJECTS` внутри функции (lazy import);
|
||||
стилистически — на уровне модуля было бы единообразнее, но текущий вариант корректен и
|
||||
безопасен (registry строится при импорте `src.projects`). Не блокирует.
|
||||
|
||||
## Документация
|
||||
|
||||
Обновлена полностью в том же PR, согласована с кодом:
|
||||
- `docs/architecture/README.md` — добавлена строка `GET /projects` в таблицу API; описана
|
||||
механика B6 (чтение реестра по HTTP) в секции про условный staging-гейт; футер отмечает ORCH-048.
|
||||
- `CHANGELOG.md` — запись в `[Unreleased] / Added` о новом эндпоинте и фиксе B6.
|
||||
- `docs/operations/STAGING_CHECK.md` — обновлены таблица блоков, врезка про инвариантность B6 к
|
||||
способу запуска и строка «Изолированность от прода».
|
||||
- ADR `docs/work-items/ORCH-048/06-adr/ADR-001-b6-registry-via-http-endpoint.md` — заведён,
|
||||
обосновывает выбор варианта (а) против (б)/(в).
|
||||
|
||||
Требование «изменён `src/` → обновлена документация» выполнено.
|
||||
Reference in New Issue
Block a user