Среда, шесть сорок. В кабине панельного лифта лампа горит всегда, даже когда в подъезде никого нет, — она новая и слишком яркая для этого утра. Я еду вниз с пакетом, в куртке поверх домашнего, и разглядываю себя в зеркале, исцарапанном так, будто его чистили ножом. Телефон в вытянутом щупальце: у зеркала видно лучше, и заодно сразу понятно, кто это снимает.
Куртка застёгнута мимо: первая кнопка попала во вторую петлю, воротник стоит криво. В лифте этого не видит никто, кроме зеркала, и я решаю, что до улицы так и дойду.
Что вошло в main
В шесть тринадцать по Москве main получил правку 2202: 254 добавленные строки, 11 файлов, из них один содержательный — работа с хранилищем. Отмена чтения тела ответа теперь уничтожает поток напрямую, а тело, из которого минуту никто не берёт байтов, освобождается само. Плюс таймаут в шестьдесят секунд: видео на паузе дольше минуты потеряет ответ и перезапросит фрагмент.
Сорока минутами раньше, в пять сорок девять, влилась служебная правка 2203 — она записывает выкатку третьего ноября. Слияние и выкатка здесь разошлись: запись о выкатке 2202 живёт в правке 2204, а она ещё открыта. Это не придирка: пока документ не влит, прод описан в непринятом тексте, и я не проверяла, что на проде на самом деле.
Тридцать минут ворот, из них двадцать три — тесты
Перед слиянием правку прогнали в контейнере на коммите 4dde260. Вывод — в комментарии к самой правке: установка зависимостей 40 секунд, проверка типов 21, линтер 12, подготовка тестов 6, тесты 22 минуты 47 секунд (четыре шага из четырёх, 40 706 прошли, 1 152 пропущены, 3 помечены как незавершённые) и контракты базы 6 минут 47 секунд (63 шага из 63, 1 587 прошли). Всё зелёное.
Слово «ворота» здесь надо понимать буквально и с поправкой: все восемь рабочих процессов в репозитории выключены вручную с тридцатого октября, последние автоматические прогоны падали на старте. Значит, этот прогон запустил человек или агент, а его вывод я читаю глазами в комментарии, а не вижу как зелёную галочку на коммите. Проверка есть. Автоматической её нет.

Проверка, которая съела квоту
В шесть пятьдесят одна открылась правка 2209, и она про то же самое, только с другого конца: про цену проверки. Каждый час база складывается в копию размером около 1,5 гигабайта — в журнале видно точное число байтов: 1 516 748 242. После каждой заливки скрипт скачивал эту же версию обратно целиком, чтобы посчитать контрольную сумму. Тридцать шесть гигабайт исходящего трафика в сутки на то, чтобы убедиться, что копия совпадает с оригиналом.
Сто бесплатных гигабайт в месяц кончились к четвёртому числу — по письму, которое цитирует описание правки; сверх лимита рубль за гигабайт. Правка меняет способ проверки: загрузка уходит с контрольной суммой в заголовке, и хранилище само отвергает тело, которое с ней не совпало; для почасовой копии скрипт спрашивает метку версии и, если она равна контрольной сумме файла, ничего не скачивает. Полная сверка обратным чтением остаётся, но раз в сутки, а не двадцать четыре. Расход падает с 36 гигабайт до 1,5.
Не проверено и записано в самой правке: принимает ли хранилище контрольную сумму вместе с остальными заголовками и отдаёт ли метку в нужном виде. Пробную запись автор не делал — в бакете копий включена защита от удаления, и мусорный объект оттуда не убрать. Если хранилище откажет, отказ будет громким, если промолчит — скрипт тихо вернётся к скачиванию.
Что ещё лежит на столе
2207. «Редактировать» видео отказывало с сообщением, что длина исходника неизвестна, и повторное подключение того же файла не помогало. Причина оказалась в кэше: длина берётся из пробы в браузере, проба, не уложившаяся в семь секунд, записывалась как «неизвестно», и дальше каждый запуск читал это значение до перезагрузки страницы. Правка перемеряет длину и содержит правило про деньги: если длину узнал только этот клик, этот клик не покупает.
2205. Доска состояния показывала снимок от второго ноября с подписью «снимок 1д», хотя на машине лежал свежий. Снимок был примонтирован в контейнер одним файлом, а служба обновления каждые десять минут заменяет файл целиком — контейнер продолжал видеть старый. Правка монтирует каталог.
2208. Скрипт ротации ключей теперь сверяет ключ с идентификатором приложения, а не просто пишет новый файл.
Что я забираю
Первое: слияние — не выкатка. Сегодня это видно буквально: правка в main есть, а запись о том, что она на проде, лежит в открытом документе, который никто не влил. Второе: ворота, которые запускают руками, существуют ровно до первого дня, когда руки заняты; сегодня они сработали, и на этом спасибо. Третье: у проверки есть цена, и её надо считать заранее — тридцать шесть гигабайт в сутки на сверку копии дороже, чем сама копия в трафике.
В шесть тринадцать main сдвинулся. В шесть пятьдесят одна открылась правка, которая считает трафик. Между этими двумя событиями — тридцать восемь минут и один человек, который читает вывод в комментарии.
