Files
orchestrator/docs/work-items/ORCH-043/12-review.md
claude-bot ba51aa17bc
All checks were successful
CI / test (push) Successful in 19s
CI / test (pull_request) Successful in 18s
reviewer(ET): auto-commit from reviewer run_id=185
2026-06-06 17:37:05 +00:00

60 lines
4.0 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-043
verdict: APPROVED
version: 1
---
# Review ORCH-043 — merge-gate + auto-rebase + re-test
## Summary
Реализован детерминированный (без LLM) merge-gate `check_branch_mergeable` на ребре
`deploy-staging → deploy`: догон ветки до актуального `origin/main` (`rebase` +
`push --force-with-lease` ТОЛЬКО ветки задачи), повторный прогон тестов в worktree
догнанной ветки и файловый merge-lease для сериализации слияний. Интеграция в
`stage_engine` (defer при busy-lock, rollback при конфликте/красном re-test с капом
`MAX_DEVELOPER_RETRIES`), release lease на `deploy→done` / rollback / PR-merged вебхуке.
Соответствие ТЗ (`02-trz.md`) и AC-1..AC-15 — полное. Реализация соответствует
`ADR-001-merge-gate.md` и глобальному `adr-0006`. Контракт never-raise соблюдён
во всех новых функциях, все git-операции изолированы в worktree (AC-8), `main`
никогда не пушится/форс-пушится (AC-7). Документация обновлена в этом же PR.
`pytest tests/ -q`**535 passed** (AC-15). Snapshot-реестр обновлён осознанно
(`_EXPECTED_QGS += check_branch_mergeable`, `_EXPECTED_TRANSITIONS` не тронут — AC-10).
Прод-инфра (`docker-compose*`, `.env`, `.gitea/`, `Dockerfile`) не затронута (AC-14).
## Findings
### P0 — Blocker
- (нет)
### P1 — Must fix
- (нет)
### P2 — Should fix
- [ ] **Двойное назначение `merge_lock_timeout_s` (300s).** Один и тот же тайм-аут
служит и порогом «лиз протух → реклейм» (crash-backstop), и фактическим окном
удержания лиза от гейта до мержа. Если deploy-деплоер по какой-то причине мержит
PR дольше 300s, ожидающая задача реклеймит лиз как stale и может пойти на слияние
параллельно — узкое окно, теоретически воспроизводящее гонку, которую закрывает
AC-5. На практике deployer мержит в начале запуска, окно мало; тайм-аут
конфигурируем. Рекомендация (не блокер): развести «возраст реклейма краша» и
«ожидаемое время удержания», либо добавить наблюдаемость (лог/алерт при
stale-реклейме непустого холдера).
- [ ] **Двойной `git fetch origin main`** — в `branch_is_behind_main` и затем в
`auto_rebase_onto_main` на пути «ветка отстаёт». Незначительная неэффективность,
не баг; можно переиспользовать результат первого fetch.
## Документация
Обновлено полностью, документация = golden source соблюдена (AC-13):
- `docs/architecture/README.md` — добавлен раздел «Merge-gate…», ветка откатов,
реестр QG (`check_branch_mergeable`), `STAGE_TRANSITIONS` корректно НЕ изменён.
- `CHANGELOG.md` — подробная запись ORCH-043.
- `.env.example` — все 7 новых `ORCH_MERGE_*` настроек с комментариями.
- ADR per-work-item `docs/work-items/ORCH-043/06-adr/ADR-001-merge-gate.md` (Proposed)
и глобальный `docs/architecture/adr/adr-0006-merge-gate.md` + строка в `adr/README.md`.
- Тесты: `test_merge_gate.py`, `test_qg_merge_gate.py`, `test_merge_gate_race.py`,
`test_stage_engine.py::TestMergeGate`, `test_config.py`, обновлён
`test_qg_registry_snapshot.py`.