Маршрутизация и одобрение пул-реквестов решают задачу, которая обычно решается людьми вручную: кому это ревьюить и можно ли принять без обсуждения. Система назначает ревьюеров по владению кодом и истории изменений и может сама одобрять изменения низкого риска по заданным критериям. Границу стоит зафиксировать сразу: это не полноценный обзор кода, а маршрутизация с ограниченным правом пропускать очевидное. Спутать эти две вещи легко, потому что внешне результат один и тот же - у пул-реквеста появляется одобрение.
Решение опирается на несколько сигналов: находки автоматического обзора, результаты проверки безопасности, оценку риска и файлы политики в самом репозитории. Именно последнее делает механизм пригодным для больших команд - политика лежит рядом с кодом, версионируется вместе с ним и проходит обычное ревью, а не живёт в настройках, о которых знают двое. Изменение правил становится обычным изменением: его видно в истории, о нём можно спорить в комментариях и его можно откатить.
Поиск политики устроен строго. Для каждого изменённого файла система ищет файл с точным именем в его каталоге и выше по дереву; ближайший имеет приоритет. Имя в другом регистре, резервная копия или похожее написание игнорируются - и это важная деталь: политика, названная почти правильно, не действует и никак об этом не сообщает. Ошибка проявится не сообщением, а тишиной: правила, которые вы считали действующими, просто не участвуют в решении. Верхнеуровневая маршрутизация живёт в отдельном каталоге в виде списка с продуктами, границами и политиками.
Самая интересная часть механизма - защита от самоослабления. Если пул-реквест меняет саму политику одобрения или маршрутизации, система не применяет новую версию к этому же изменению: берётся версия из базовой ветки либо требуется человек. Иначе достаточно было бы одной строки в политике, чтобы разрешить себе всё остальное - и это был бы самый короткий путь мимо любых требований. А при неоднозначной специфичности применяется более строгая инструкция, тот же принцип, что и с запретами в разрешениях: сомнение решается в сторону ограничения.
Отсюда практическая рекомендация про потолок автоматического одобрения. Его держат низким и явно объявляют защищённые области, где человек нужен всегда: авторизация, платежи, инфраструктура, миграции данных и сами файлы политики. Всё остальное можно постепенно отпускать по мере накопления статистики, но не наоборот - начинать с широкого автоматического одобрения и сужать его по инцидентам дороже и дольше, потому что за это время команда успевает привыкнуть к отсутствию ревью.
Качество маршрутизации целиком зависит от качества данных о владении. Система смотрит, кто владеет кодом и кто его менял, и в здоровом репозитории этого достаточно. Но история стареет: люди уходят, компоненты передают, а есть файлы, которые за год трогали двадцать человек по одной строке. В таких местах маршрутизация начинает назначать формально верных, но бесполезных ревьюеров - тех, кто когда-то поправил отступы. Лечится это не настройками агента, а тем же, чем всегда: явными владельцами у каталогов и честной картой ответственности, которую кто-то поддерживает.
У потолка одобрения должна быть обратная связь, иначе он остаётся угадыванием. Измерять стоит не число автоматических одобрений, а их последствия: сколько таких изменений потом откатили, поправили следом или разобрали на инциденте. Эта доля и есть честная калибровка порога. Если она близка к нулю несколько месяцев подряд, порог можно осторожно поднять. Если растёт - его снижают, не дожидаясь обсуждения, потому что каждое ошибочное автоматическое одобрение стоит дороже одного пропущенного ревью: оно ещё и убеждает команду, что смотреть незачем.
Есть и организационная сторона, которую нельзя решить настройками. Автоматическое одобрение снимает с людей рутину, но переносит ответственность на критерии: теперь качество ревью определяется тем, насколько точно вы описали, что считается низким риском. Это работа, которую придётся делать и поддерживать, и она не разовая, потому что состав репозитория меняется: появляются новые каталоги, к которым никакая политика ещё не относится.
Инженерный вывод простой: маршрутизация полезна там, где команда большая и владение кодом размыто. Она экономит не столько ревью, сколько поиск того, кто должен ревьюить, - а это и есть основная задержка в жизни пул-реквеста. Автоматическое одобрение - отдельное решение с собственным потолком, и его вводят после того, как маршрутизация уже работает предсказуемо.
Типичные провалы предсказуемы. Назвать файл политики почти правильно и не понять, почему он не действует. Поставить высокий потолок автоматического одобрения на старте. Не объявить защищённые области и получить автоматическое согласие там, где нужен человек. Не смотреть на последствия автоматических одобрений и оставить порог без обратной связи. И считать маршрутизацию заменой обзора кода.
Потолок автоматического одобрения
[ ] низкий порог риска, а не удобный
[ ] находки обзора и проверки безопасности учитываются как сигналы
[ ] защищённые области всегда требуют человека:
авторизация, платежи, инфраструктура, миграции данных, файлы политики
[ ] изменение политики не ослабляет требования того же пул-реквеста