4.0 KiB
type, work_item_id, verdict, version
| type | work_item_id | verdict | version |
|---|---|---|---|
| review | ORCH-043 | APPROVED | 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.