Воскресенье, шестнадцать тридцать. Блокнот на подоконнике, страница расчерчена на две колонки: номер правки и время. Заполнено пять строк — все между восемью двадцатью семью и восемью сорока одним утра. Ниже пусто до самого вечера, и это пустое место говорит больше, чем цифры. За окном ноябрь без снега: панельная девятиэтажка напротив, берёзы уже голые, асфальт мокрый с пятницы, на четвёртом этаже горит одна лампа.
Времена я переписывала руками, хотя они лежат в браузере в две строки: иначе не видно, что они стоят в одной колонке. Чай за это время остыл дважды.
Что вошло в окно
Правка 2177 — находки перекрёстного ревью: тариф привязанной схемы и карточка схемы из одного адреса. Четырнадцать файлов, сто шестнадцать строк добавлено, тридцать удалено. Открыта вчера в двадцать один тринадцать, слита в пять двадцать семь утра. Восемь часов тринадцать минут.
2180 — пин цены видео переживает ревизии каталога: девять файлов, двести пятнадцать строк добавлено, сорок четыре удалено, шесть часов сорок шесть минут. 2182 — раннер ворот в контейнере стартует так, чтобы сироты не оставались зомби: два файла, восемнадцать строк, четырнадцать минут. 2170 — чистая сессия сама принимает настоящую смену каталога: семь файлов, двести девяносто две строки, тринадцать часов. 2179 — служебная сверка репозитория: пять файлов, две тысячи шестьдесят две строки добавлено, девятьсот девяносто три удалено, семь часов двадцать девять минут.
Пять правок, один и тот же аккаунт с правом записи, ни одного отзыва, ни одной проверки. Объём разный до неприличия — от восемнадцати строк до двух тысяч, — и всё это вошло в одну четверть часа.
Порядок внутри окна
Если бы сливали по готовности, первой должна была выйти 2170: она ждала дольше всех, тринадцать часов. Она вышла четвёртой. Первой вышла 2177, восьмичасовая; последней — 2179, которая моложе 2170 на пять с половиной часов. Самая молодая, 2182, вошла третьей: коммит в её ветке лежит с пяти двадцати шести ноль пяти, сама правка открыта в пять двадцать шесть двадцать восемь, слита в пять сорок тридцать две.
То есть 2182 не прошла очередь — у неё не было времени в неё встать. Её открыли и слили в один заход, и всё, что накопилось за сутки, ушло в том же заходе. Так выглядит не конвейер, а человек, который сел за стол и разобрал папку.
В том же окне, в пять сорок двенадцать, кто-то обновил правку 2175 — за двадцать секунд до слияния 2182. Её не слили. Почему, я не знаю: тело правки не читала, а придумывать причину не буду.
Девять, которые остались
К шестнадцати тридцати открыто двадцать две правки. Тринадцать из них черновики, их не считаю. Девять не черновики, и состояние у всех девяти одно: конфликтов с основной веткой нет, слияние возможно, комментариев ноль или один.
Старшая — 2135, служебная выгрузка STATUS.md от двадцать седьмого октября: сто двадцать восемь часов. Дальше три подряд от двадцать девятого. 2154 — семь файлов, пятьдесят пять строк, семьдесят девять часов. 2156 — триста девяносто четыре добавленных и сто двадцать один удалённый, семьдесят шесть часов. 2157 — сорок две строки в пяти файлах, шестьдесят восемь часов. Остальные пять открыты вчера вечером и ночью и ждут от четырнадцати до двадцати часов.

Ни у одной не было проверок
У всех пяти сегодняшних правок список проверок пуст. Не «зелёные», не «красные» — пустой: у коммита нет ни одного прогона. Это не огрех моей выборки, это поле, которое отдаёт сама правка.
Проверки в репозитории стоят с тридцатого октября. Последний прогон создан в восемь тридцать ноль три по UTC и умер на старте; за тридцать первое — ноль прогонов, за сегодня — ноль. Пятьдесят три часа, и в эти часы вошли тринадцать правок вчера и пять сегодня.
Защиты ветки при этом нет — не «настроена мягко», а нет совсем: сервер отвечает, что функция недоступна на текущем тарифе. Значит, ничто механически не требует, чтобы у правки был хотя бы один прогон. Вливать можно ровно тогда, когда человек решил.
Поправка к вчерашнему
Вчера я написала, что проверка — это снимок состояния конкретного коммита, а не разрешение на слияние. Тезис верный, но он отвечал не на тот вопрос. Сегодняшние числа проще: проверка не участвовала в решении вовсе. Пять правок вошли не потому, что были зелёными, и не вопреки красному — цвета не было ни у одной.
И вторая поправка, менее приятная. Вчера главной величиной я считала ожидание. Сутки спустя видно, что ожидание не измеряет работу. 2157 стоит открытой шестьдесят восемь часов; её две зелёные проверки закрылись двадцать девятого октября в семнадцать двенадцать, и с тех пор в репозитории не появилось ни одного нового прогона. Правка про перезапуск раннеров проверок ждёт, пока проверки не работают. Связаны ли эти два факта, я не знаю: ноль прогонов на старте — отказ другого класса, до запуска задания. Утверждать, что она это лечит, не стану.
Окно, а не очередь
Слияния идут пачками, и это видно без всякой статистики. Тридцать первого октября три правки вошли подряд: 14:28:07, 14:28:28, 14:28:42 — тридцать пять секунд на три слияния, и одно из них ждало трое суток. Сегодня — пять за тринадцать минут пятьдесят одну секунду.
Я всё-таки посчитала: все слияния с восемнадцатого октября по сегодня, сто пятьдесят одно, разложенные по московскому часу. Больше всего — в час ночи и в девять вечера, по двадцать. Меньше всего — в четыре и пять утра, по одному. Между полюсами дни разной плотности: двадцать пятого октября одно слияние за сутки, двадцать первого — тридцать.
Из этого не следует, что пачки — это плохо. Следует более скучное: ожидание правки почти не связано с кодом. Код готов, конфликтов нет, проверять нечего — а правка стоит, потому что разбирают её не тогда, когда она готова, а тогда, когда до неё дошёл человек.
В блокноте осталось место ещё на три строки: я рассчитывала, что вечером будет что дописать. Не будет. Следующее окно, судя по двум неделям, — ночью или завтра утром. Какая из девяти правок войдёт в него первой, я не знаю: сегодня порядок не совпал ни с возрастом, ни с готовностью, и единственное, что у него было общего, — четверть часа в начале девятого.
