<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Jakub Kornafel — Log (RU)</title>
    <link>https://jakubkornafel.com/log/ru/</link>
    <atom:link href="https://jakubkornafel.com/log/ru/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Что я строю, что сломалось и что из этого выдерживает проверку фактами.</description>
    <language>ru</language>
    <lastBuildDate>Thu, 27 Aug 2026 00:00:00 +0000</lastBuildDate>
    <item>
      <title>Ворота, которые не считают деньги, ничего не охраняют</title>
      <link>https://jakubkornafel.com/log/ru/gate-without-a-spend-ceiling/</link>
      <guid isPermaLink="true">https://jakubkornafel.com/log/ru/gate-without-a-spend-ceiling/</guid>
      <pubDate>Thu, 27 Aug 2026 00:00:00 +0000</pubDate>
      <category>Build</category>
      <description>Мой пайплайн умел сказать, хороша ли работа. Он не умел сказать, что этот ответ стоил четырёх часов и восьми провалившихся попыток.</description>
      <content:encoded><![CDATA[<p>В моём пайплайне стояли ворота, которыми я гордился. Критерии, пороги, рецензент, который не автор, вердикт, умеющий отказать.</p>

<p>А потом я задал им вопрос, на который они не ответили: <em>во что это обошлось?</em></p>

<p>Что артефакт достаточно хорош — это они знали. Сорок минут ушло на этот вердикт или четыре часа, двенадцать долларов или двести — понятия не имели. Чистое одобрение с первого захода они не отличали от прогона, который дополз до финиша на десятой попытке с той же нерешённой проблемой.</p>

<p>Это разные результаты. Работающая система — только один из них.</p>

<h3>Лимит, который ограничивает не то</h3>

<p>Лимиты итераций у меня были — не больше десяти циклов на фазу. Выглядело как контроль. Это не контроль. Лимит итераций ограничивает, сколько раз крутится цикл, а не сколько стоит один оборот, а у меня один раунд ревью разлетается на восемь верификаторов, работающих параллельно. Один этот шаг может стоить больше, чем все предыдущие фазы вместе, и ни один лимит этого не замечает.</p>

<p>Поэтому я завёл книгу расходов. Бюджет объявляется до старта. Проверяется на переходе между фазами и при каждом возврате назад, но никогда посреди работы. Пересечёшь границу, уже превысив потолок, — прогон встаёт с явным вердиктом, вместо того чтобы тихо доехать до конца и выставить вам счёт.</p>

<p>Сильнее всего я недооценил анализ маршрута. Он считает расход, который не продвинул прогон вперёд — всё, что ушло на попытки, закончившиеся возвратом, — и вылавливает повторяющиеся причины. Вот эта последняя цифра неприятная. Прогон, прошедший ворота с десятой одинаковой попытки, — это провалившийся прогон со значком «зачтено». В моих старых отчётах этого не было видно вообще.</p>

<h3>Почему это стоит больше, чем выглядит</h3>

<p>Есть мартовское исследование, из-за которого я заново передумал, что вообще стоит докладывать агенту.</p>

<p>Агенту, пишущему код, дали одну лишнюю вещь: карту того, какие тесты покрывают какой код, обычным текстовым файлом, который он мог прочитать. Регрессии — тесты, которые раньше проходили и перестали, — упали с 6,08% до 1,82%. Минус 70% от одного файла.</p>

<p>В том же исследовании была вторая ветка. Вместо карты агенту дали процедурные инструкции: работай от тестов, держись этой дисциплины. Регрессии выросли до 9,94%. Хуже, чем не делать ничего.</p>

<div class="pull">
  <span>Правило, которое я оставляю себе</span>
  <p>Давайте агенту контекст, а не процедуру. Указания, как себя вести, измеримо ухудшили дело. Сведения о том, как всё устроено на самом деле, улучшили его на 70%. Каждую инструкцию, которую хочется написать, я теперь сначала прогоняю через этот тест.</p>
</div>

<p>Поэтому бюджет и лежит в файле состояния, а не в промпте, просящем агента поаккуратнее с деньгами. Никто не бережёт цифру, которой не видит.</p>

<div class="cta">
  <p><b>Если вы гоняете агентов и не можете сказать, во что вам обошлась прошлая неделя</b>, у вас не автономная система — у вас растущий счёт. Я строю ту часть, которая умеет отказать. <a href="mailto:jakubkornafel@gmail.com">Напишите, что у вас за система и какой срок.</a></p>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Цифра, которую все повторяют, меряет не то</title>
      <link>https://jakubkornafel.com/log/ru/the-measurement-nobody-publishes/</link>
      <guid isPermaLink="true">https://jakubkornafel.com/log/ru/the-measurement-nobody-publishes/</guid>
      <pubDate>Thu, 27 Aug 2026 00:00:00 +0000</pubDate>
      <category>Note</category>
      <description>Поменяй harness — бенчмарк сдвинется на три пункта. Поменяй модель — на двадцать пять. Значит, harness почти ни при чём. Пока не посмотришь на то, чего бенчмарк не меряет вовсе.</description>
      <content:encoded><![CDATA[<p>На этой неделе мне задали честный вопрос: насколько хорошо собранный harness улучшает агента, который пишет код? Дай цифру.</p>

<p>Я пошёл за цифрами.</p>

<p>В публичных рейтингах иногда попадается одна и та же модель, запущенная под двумя разными harness. Разрыв — от трёх до восьми процентных пунктов. А оставьте harness в покое и подмените под ним модель, и результат сдвинется на двадцать пять.</p>

<p>Прочитайте только это, и вывод напишется сам: harness почти не важен, купите модель получше, идите домой.</p>

<h3>Вот только боимся мы совсем не этого</h3>

<p>Эти бенчмарки меряют одну задачу в одном контейнере, которая либо проходит, либо нет. Никто в продакшене не теряет сон из-за одной задачи в одном контейнере.</p>

<p>Сон отнимает другое. Система, которая падает раз в несколько дней. Результат, который во вторник уже не повторить. Вердикт, который потом никто не проверит. Прогон, который рапортует об успехе, а файл, где он якобы что-то поправил, попросту выдумал.</p>

<p>И вот на это — на устойчивость, воспроизводимость, проверяемость — публичного бенчмарка нет вообще. Ближайшая попытка, которую я нашёл, появилась три недели назад, а её собственный предзарегистрированный аудит вернулся без однозначного вывода.</p>

<p>Там, где цифры всё-таки есть, они немаленькие. Одно исследование срезало регрессии на 70%, подсунув агенту один файл с контекстом. Другое намерило падение доли проваленных задач на 9,5% после того, как к пайплайну добавили критика, проверяющего план до исполнения. И то и другое — изменения в harness. Ни то ни другое в рейтинге не появится.</p>

<div class="pull">
  <span>Честный ответ</span>
  <p>Цифры, которую вы хотите, пока нет. Цифры, которые есть, меряют другое. А в зазоре между ними и живут продакшен-системы.</p>
</div>

<p>Значит, пока что груз на вас. Мерьте то, что вас правда волнует: как часто падает система, сколько работы уходит в переделку, как часто вердикт выдерживает ревью. За вас этого никто не опубликует.</p>

<div class="cta">
  <p><b>Если у вас такой замер есть и выглядит он плохо</b>, я честно хотел бы на него посмотреть. Это ровно та задача, над которой я работаю. <a href="mailto:jakubkornafel@gmail.com">jakubkornafel@gmail.com</a></p>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Три недели мой собственный сайт мне врал</title>
      <link>https://jakubkornafel.com/log/ru/three-failed-deploys/</link>
      <guid isPermaLink="true">https://jakubkornafel.com/log/ru/three-failed-deploys/</guid>
      <pubDate>Thu, 27 Aug 2026 00:00:00 +0000</pubDate>
      <category>Note</category>
      <description>Три деплоя упали. Сайт как ни в чём не бывало отвечал двухсоткой. Я узнал об этом только потому, что искал совсем другое.</description>
      <content:encoded><![CDATA[<p>Я профессионально строю системы, которые умеют сказать человеку, что что-то пошло не так.</p>

<p>Мой собственный сайт три недели отдавал версию на два коммита назад, а я об этом не знал.</p>

<p>Как было дело. 6 августа я отправил две правки на подстраницу. Запустились три деплоя. Все три упали. Каждый записал длительность сборки в ноль миллисекунд и сообщение «Page build failed.» — ни подробностей, ни уведомления, ничего в почте.</p>

<p>Ноль миллисекунд значит, что сборка даже не стартовала, то есть дело было не в моём коде. Легло что-то выше.</p>

<p>А сайт? Сайт чувствовал себя прекрасно. HTTP 200, валидный сертификат, всё грузится. Потому что отдавалась последняя удачная сборка, ровно так же, как накануне. У аварии не было никакой видимой поверхности. Снаружи, из моего браузера, из чьего угодно — здоровый сайт.</p>

<p>Нашёл я это только потому, что ковырялся в совершенно другом месте и из любопытства заглянул в статус деплоев.</p>

<h3>Неприятная параллель</h3>

<p>Это ровно тот способ ломаться, против которого я целыми днями ставлю ворота. Просто пришёл он с той стороны, которую я не оборонял.</p>

<p>Агент рапортует об успехе. Тесты зелёные. Диф выглядит чисто. Всё на поверхности говорит, что работа сделана, и убедиться в обратном можно единственным способом: проверить то, чем не управляет тот, кто рапортует. Запустить настоящее приложение, спросить настоящее состояние, сравнить с тем, до чего оптимизирующая сторона не дотянется.</p>

<p>По отношению к агентам этот рефлекс у меня был. По отношению к собственному деплой-пайплайну — нет, и он двадцать один день тихо отдавал протухшее.</p>

<p>Починка, кстати, состояла в удалении, а не в добавлении. Сайт — чистый HTML, и всё равно каждый деплой прогонял его через шаблонизатор, который ему никогда не был нужен: 165 секунд на публикацию половины мегабайта. Один пустой файл спустя деплой стал обычным копированием файлов и занимает 19 секунд. Девять десятых времени уходило на шаг, единственным реальным вкладом которого была способность сломаться.</p>

<div class="pull">
  <span>Что я отсюда забираю</span>
  <p>Система, которая не умеет сказать, что упала, будет позволять вам верить в успех ровно столько, сколько вы ей позволите. Тишина — не статус. Если три недели никто не сообщал о проблеме, это утверждение, которое стоит проверить, а не повод расслабиться.</p>
</div>

<div class="cta">
  <p>Проверьте прямо сейчас последний удачный деплой той штуки, в которой уверены больше всего. Я подожду. Если результат вас удивит, <a href="mailto:jakubkornafel@gmail.com">напишите мне</a> — я такое коллекционирую.</p>
</div>]]></content:encoded>
    </item>
  </channel>
</rss>
