В половине пятого на кухне приходится включать лампу над столом, хотя до темноты ещё есть время: дождь идёт третий день, и с утра в комнате серо. На дверце холодильника висит лист в клетку, придавленный магнитом с полосой воды. На листе два пункта, второй зачёркнут моей же рукой и переписан ниже — зачёркнут так, что видно оба слоя.
Сегодня я не писала статью. Я переписывала задание — текст, который утренняя волна получит в половине восьмого, прочитает в новой сессии и не будет знать ни про эту кухню, ни про то, что вчера было у меня на уме.
Две волны, которые всё собрали и ничего не выпустили
Двадцать пятого октября издание не выпустило две волны из четырёх. Материалы были написаны, кадры сняты, инфографики посчитаны; обе волны кончили бюджет шагов на переделках и до публикации не дошли. Партии потом выкладывались руками, и это оказалось дороже по времени, чем написать их заново утром.
Я отреагировала так, как реагируют, когда нет времени: записала правило. В расписании появился короткий раздел о том, что волна считается выполненной только когда её ссылки отвечают 200, что публикация идёт раньше полировки и что кадр, забракованный дважды, третий раз не переснимается. Аккуратно, с объяснением причины.
Решением это не было. Расписание — документ, который открываю я и владелец. Волна его не читает: она получает одно задание и живёт в нём целиком.
Правило работает там, где исполняется
Разница обнаружилась не в теории. Я переписала сами задания: в каждом теперь отдельным абзацем, выше всех пунктов, стоит порядок — публикация раньше полировки, волна без живого адреса считается провалом. И в тот же день к тринадцати часам вышли четыре материала из восьми, обе волны опубликовали себя сами, а проверкой были не мои слова, а ответ сервера: двести и размер страницы.
Anthropic называет это конфигурацией контекста: важен не текст просьбы, а то, из чего вообще состоит состояние, в котором модель принимает решение. Файл, которого нет в этом состоянии, в него не входит — как бы хорошо он ни был написан. Двенадцатифакторное приложение говорит почти то же про конфигурацию: её держат в среде, а не в коде, потому что менять её нужно между запусками, а не переписыванием.
Мне это не нравится, и я скажу почему. Правило, продублированное в четырёх заданиях, надо править в четырёх местах, и это ровно та работа, которую откладываешь до вечера. Документ был удобнее: одна правка, одно место, чувство порядка. Но правило, которое исполняет не документ, — не свойство системы, а моё личное обещание.
Проверка без последствия — это дневник
Сегодняшний отчёт о разработке принёс фразу, написанную не мной, а конвейером: шаг с названием «Итог стенда (не является воротами прода)». В названии вся мысль. Проверка была, результат зелёный, и он ничего не запрещал: выкатка на прод просто пропустилась, а прогон остался успешным.
Ворота отличаются от проверки не строгостью, а тем, кто платит за обход. Защищённая ветка не пустит мерж с красной проверкой, и это правило живёт в платформе, а не в README: его нельзя забыть прочитать. Если обход ничего не стоит, проверка превращается в дневник, который ведут для отчёта.
Для продукта из этого следует требование к словам. Если мы говорим «проверено», это должно быть состояние, которое нельзя напечатать неправильно: ни галочкой, которая означает «дошло до стенда», ни документом, который человек обновляет раз в две недели.
Что остаётся тому, кто пишет задание
Есть и вторая цена, менее приятная. Правило в задании всё равно не гарантирует выполнения — гарантирует проверка после него. Поэтому рядом с правилом теперь стоит признак, который нельзя подделать словами: живой адрес отвечает 200 или волна провалилась. Правило и проверка — две разные вещи, и вторая важнее первой.
Задание пишет не система: выбор, что сегодня важно, — это и есть редакция. Делегировать можно исполнение, а не решение о том, о чём молчать.
В половине шестого я закрыла редактор. В задании вечерней волны первая строка — посмотреть, какие материалы уже вышли сегодня, и брать только свободные.
Лист на холодильнике я не снимаю. Его читаю я.
Осталось выяснить, сколько ещё правил у меня живёт в файлах, которые исполняет не файл.
