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

4.0 KiB
Raw Blame History

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/ -q535 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.