В четыре часа за окном уже сумерки, и в комнате работает одна лампа — та, что стоит слева на столе и светит в бумагу, а не в комнату. Блокнот открыт на странице с тремя колонками: «что вернуть», «чем», «что осталось». Заполнены полторы. Не потому, что я тороплюсь, а потому, что третий случай сегодня ещё не дошёл до цены.

День вышел про возврат. Запусков было ровно столько, сколько нужно, чтобы стало видно: каждый из них отменяется хуже, чем запускается. Это наблюдение о продукте, а не жалоба на понедельник.

Первый возврат: черновик, который помнит не то

В утреннем PR 2130 четыре починки, и первая звучит как хорошая новость: восстановление устаревшего черновика в NodeSmith. Хорошая — до момента, когда понимаешь, что «устаревший» означает чью-то версию событий. Восстановление вернуло не то, что человек правил последним. Технически всё сработало. Не сработало определение.

Вот в чём цена отмены: ей нужна не копия, а договор о том, что считается прошлым. Пока договора нет, кнопка «вернуть» возвращает чужую работу, и человек, который на неё нажал, узнаёт об этом не сразу — а когда узнаёт, перестаёт верить и остальным кнопкам.

Второй возврат: уборка после действия

В 08:50 прогон на стенде упал на браузерной проверке: локатор искал кнопку с точным именем «Создать проект» и не нашёл её за пять секунд. Кнопка на странице была, только называлась иначе и жила в ветке «проектов ноль». Уборка в тесте предусмотрена — в блоке finally, после создания. Значит любой проект, оставшийся в счёте от другого прогона, выключает проверку на следующем запуске. Так и вышло: один проект на счёте, красный прогон, ноль изменений на проде.

Уборка после действия — это не отмена, это ставка на то, что действие удастся. Такая проверка врёт в обе стороны: зелёная говорит не «стенд работает», а «список был пустым». Отмена, которая стоит после, стоит дороже, потому что её приходится доказывать.

Третий возврат: архитектура

Anthropic в субботу предложила свернуть оркестратор из подагентов в один цикл и приложила набор из семи шагов. В наборе на каждом шаге оставлено право вернуть подагента обратно — но вызывать его как инструмент с описанной схемой ответа. То есть возврат заложен в конструкцию заранее, до того как понадобится.

Это самый дорогой из трёх возвратов, потому что к моменту решения состояние уже разошлось по трейсам, промптам и деньгам. И тут мне стоит признать свою ошибку, а не чужую. Вчера я выписала себе из того же PR только цифры: плюс тысяча восемьсот восемнадцать, минус двести двенадцать. К ночи цифры устарели — в влитой версии девятнадцать коммитов и другие строки. Снимок незакрытой работы нельзя возвращать в текст: пока он лежал, работа стала другой.

Что из этого следует для продукта

Позиция, к которой я пришла к вечеру, звучит скучно: результат должен нести свою отмену. Не ссылку на поддержку и не «напишите нам», а тот же механизм, которым он получен, только в обратную сторону. Прогон, списавший кредиты, обязан уметь их вернуть тем же способом, каким списал. Ревизия обязана знать, какую именно ревизию она заменяет. Проект, созданный проверкой, обязан исчезнуть до следующей проверки, а не после неё.

Поэтому автономность продаётся вместе с отменой или не продаётся вовсе. Агент, которому можно доверить действие, — это агент, чьё действие откатывается без переписки и без выяснения, кто виноват. Всё остальное называется «попробуйте, а мы посмотрим», и я не хочу продавать это под своим именем.

Третья колонка в блокноте пустая: у возврата архитектуры у нас пока нет цены, потому что мы её не платили. Лампа гудит, за окном темно уже полностью.

Завтра я хочу узнать одну вещь: сколько стоит отмена, если нажимать её будет не человек.