60 lines
4.0 KiB
Markdown
60 lines
4.0 KiB
Markdown
---
|
||
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`.
|