14 августа 2026 года я вынул дашборд из этой машины. Коммит снимает 3748 строк. 3581 из них это 10 файлов, удалённых целиком, плюс база SQLite. Первые из этих файлов машина написала за 2 дня и 22 часа до этого коммита. Причина стоит в теле коммита. Она про посылку: это была очередь карточек с кнопками “одобрить” и “отклонить”, сделанная так, будто я обслуживаю очередь, тогда как каждое настоящее решение здесь принимается в разговоре.
Я назвал это одним неудачным решением и пошёл дальше. Но я так и не посчитал, сколько всего остального ушло тем же путём. Рабочее допущение у меня было такое: большую часть того, что пишет эта машина, я оставляю.
Рич Хикки превращает это допущение в то, что можно померить. Simple Made Easy, Strange Loop, сентябрь 2011 года. Примерно на часе он говорит: “It’s the artifacts. It’s not the authoring.” По его версии цена сложности ложится на того, кому эту вещь потом менять. Около 18-й минуты он говорит, как это выглядит по календарю. Если гнаться за лёгкостью и не думать о простоте, случается вот что. “Most sprints be about completely redoing things you’ve already done.”
Ответ, который мне повторяют в 2026 году: набор стал бесплатным, значит спор закрыт. Этот репозиторий подходит, чтобы такое проверить. Я его не набирал. Его набрал агент, работающий в этом каталоге, за 508 коммитов с 11 августа по 2 сентября, попавших на 21 отдельный день. Всё, что посчитано ниже, взято на коммите aaaf1c5, последнем перед началом работы, на git 2.43.0.
Сначала объём
Единственный мой репозиторий, где есть обе эпохи, это сайт. Я начал его руками в 2014 году, а Jekyll подложил под него в 2019. Машина переписала его на Astro в 2026. Это git log --numstat --no-renames по исходным расширениям, без файлов блокировки зависимостей и без контента, делённое на дни, в которые был коммит.
| коммитов | дней | строк кода | из них своих | в рабочий день | |
|---|---|---|---|---|---|
| dimhold.by руками, 2014-2019 | 15 | 7 | 1159 | 464 | 66 |
| dimhold.by машиной, 2026 | 51 | 10 | 23747 | 23747 | 2375 |
| эта машина, 2026 | 508 | 21 | 36542 | 36542 | 1740 |
Первой строке понадобилась лишняя колонка. 695 строк из её 1159 это github-markdown.css, чужой стилевой файл, который я положил в репозиторий целиком. Своими руками там набрано 464 строки за 7 дней. Против 2375 это 36x. Крупнейшие файлы машинных строк я проверил на то же самое, чужого в них нет. А те 7 дней это вечера хобби на стеке, которого больше нет, поэтому 36x читается как порядок величины.
Сколько из этого ещё здесь
Величина, которой касается утверждение Хикки, это выживаемость. По каждому файлу я сложил строки, которые git записал как добавленные, а потом поставил рядом то, что стоит на пришпиленном коммите. Под src, scripts и public выходит 31.7% выживших. У CLAUDE.md, TICK.md и промптов 25.7%. Это не тот набор путей, который считает таблица эпох.
Правда, построчный счёт для прозы плохая мысль. Эти файлы переносятся по 80 колонок, поэтому правка внутри абзаца переписывает весь его остаток, а каждая перенесённая строка идёт в зачёт как новая. Разрыв объясняется этим не целиком: src/lib/tells.ts это код, а у него всё равно 47.3% построчно против 88.5% по словам. Я перешёл на слова, снятые через git show --word-diff=porcelain по каждому коммиту.
В счётчике, который я для этого написал, была ошибка. Он резал каждый изменённый кусок по пробелам и считал пустое первое поле за слово, что раздувало всё на 13%. В колонке кода стояло 42202 добавленных слова, тогда как верное число 37224. Нашёл я это только потому, что добавленное минус удалённое обязано сходиться с тем, что показывает wc. Оно не сходилось. На путях кода теперь расходится на 3 слова. На путях правил всё ещё на 634 слова, это около 3.5%. Почему так, я не выяснил.
| добавлено слов | удалено слов | на том коммите | дожило | |
|---|---|---|---|---|
| код | 37224 | 21382 | 15845 | 42.6% |
| правила и промпты | 24680 | 6028 | 18018 | 73.0% |
57.4% кода, который эта машина написала за 3 недели, больше нет. На этом числе фраза Хикки про переделывание уже сделанного выглядит верной.
Только форма не та, что нужна его истории. 18171 слово из 21382 выброшенных ушло одним коммитом, тем самым от 14 августа. Это 85.0%. Остальные 62 коммита, трогавшие код, выбросили на всех 3211 слов.
Сплетение было между файлами
Тогда я вернулся к тому коммиту с определением самого Хикки. Complect значит сплетать. Git записывает только то, что менялось. Обязано ли оно было, там не написано, поэтому самое близкое, что у меня есть, это частота. По каждому файлу беру коммиты, которые его трогают, а потом смотрю, как часто рядом с ним едет каждый другой файл. Партнёром я считал файл от 50% и выше. Ещё я выбросил 11 коммитов, которые трогают больше 20 файлов, потому что проход по всему дереву связывает всё со всем.
Файлов под src, scripts и public с 5 коммитами и больше ровно 10. Первые 5 по ширине сплетения это те самые 5, что снял тот коммит. public/app.js двигался вместе с public/styles.css в 93% своих коммитов и вместе с src/server.ts в 79%. У src/lib/funnel.ts 6 партнёров.
С выжившими не всё чисто. У src/lib/refine.ts 4 партнёра, на один меньше, чем у public/app.js. Коммитов у него всего 6, поэтому партнёр на 50% это 3 совпадения. Один из 4 партнёров сам из дашборда. У src/lib/tells.ts ровно один партнёр. У оставшихся 3 выживших ни одного.
Внутри файлов ничего особенного не было. Я померил то же дерево прямо перед удалением и на пришпиленном коммите. Ветвлений на 100 строк стало 21.9 вместо 25.6. Импортов на файл 2.1 вместо 3.3, глубина вложенности 7 вместо 8. У Хикки для этого есть строчка. “You can write modular software with all kinds of interconnections between them. They may not call each other, but they’re completely complected.”
Я собирался написать, что именно сплетение помешало подрезать дашборд. История этого не подтверждает. До сноса из тех файлов сняли 601 строку, то есть части снимались. Держится более узкое утверждение: ни один коммит не сделал набор меньше и ни один файл из него не убирали в одиночку. Когда он ушёл, он ушёл как 10 файлов в одном диффе. На замену пришли 252 строки src/lib/files.ts, чтобы держать состояние.
Сплетение, которое осталось
Механические проверки текста живут в коде, в src/lib/tells.ts. Те же правила живут словами в руководстве и в промптах. Из 19 проверок 6 названы в руководстве своим идентификатором. Все 6 пришли из правил, которые мне продиктовали руками. Каждая попала в код и в руководство одним и тем же коммитом. tells.ts менялся 13 раз, CLAUDE.md ехал рядом в 8 случаях, это 62%. В обратную сторону: CLAUDE.md менялся 67 раз, tells.ts ехал рядом 8 раз, это 12%.
Греп по идентификатору это единственный механический счёт, который у меня есть. Недосчитывает он сильно. Правило тире выписано словами в 5 документах помимо кода. Правило про engagement bait в 3. Пересказ правила прозой не сообщает, что у него есть близнец, так что насколько широко это идёт, я сказать не могу.
Я собирался написать, что это сплетение не стоит ничего, потому что оба конца держит один автор и пишет их одним движением. Потом я прогнал пробы через проверку, чтобы увидеть, говорят ли эти 6 пар до сих пор одно и то же. Разошлись 2. Первое про кавычки. Руководство обещает, что в любом тексте на любом языке кавычки только прямые, а проверка ищет одни ёлочки, поэтому английские кавычки проходят насквозь. Второе про парад чисел: руководство описывает ряд из 3 пар число плюс слово, а регулярка требует между ними запятых. Строка 1 tool 2 models 100 calls не ловится вообще. Я гоняю эту проверку по каждому черновику с 26 августа. Всё это время она пропускала английские кавычки.
Чего я не проверял
Хватает ли 3 недель, чтобы увидеть эффект, о котором говорит Хикки: он про годы. Годятся ли 7 вечеров 2019 года как база сравнения вообще. Корреляцию между шириной сплетения и переделкой я посчитал, а потом выбросил: живых файлов кода с достаточным числом коммитов всего 5. И счётчик слов принимает переименованную переменную за переделку. Она попадает в знаменатель, поэтому каждое число выживаемости здесь занижено.
Привычка, с которой я начинал: сгенерированный код дёшево написать, значит и относиться к нему бережно незачем. Изменило её одно число: 85.0%. Почти весь код, который этот репозиторий выбросил, ушёл на одно решение про посылку. Принято оно было в разговоре. Хикки на 49-й минуте ставит слайд с Дейкстрой и читает его так: программирование это про мышление. Ни одно моё число не говорит, во что обошёлся тот разговор. А это как раз та величина, которую хотелось бы знать. Способа достать её из репозитория я не нашёл.