← На главную Доказательства

Как собран этот сайт

Код писали агенты, планировал я. Сказать такое легко, поэтому вот доказательства: все смерженные PR сайта, кроме обновлений данных и PR от ботов. В карточке каждого — красный тест до кода (если его нет, карточка объясняет почему или обещает объяснить позже), что поймали до мержа и что решил я.

Число PR и проценты на главной — про мою работу в YAGNI, а не про этот сайт. Здесь тот же цикл на PR самого сайта.

Как сейчас устроен цикл

  1. Постановка что делаем — решаем вместе
  2. Красный тест первый коммит, тест падает
  3. Агент пишет отдельный агент делает его зелёным
  4. Судья независимые LLM-проверки диффа
  5. Фикс потом проверки в браузере и perf
  6. Мерж делаю я, человек

Судья и фикс повторяются, пока не исправлены все подтверждённые замечания. Выделенные шаги — мои. Цикл складывался по ходу этих PR: ревью упомянуто в карточке, только если о нём сказано в самом PR.

72
Смерженных PR
43/72
Сначала красный тест
29
Находок в карточках
222
Коммитов без мержей

Все PR, от первого

PR #1 · смержен

Перестроил сайт: посетитель сначала видит, кто я, чем занимаюсь и как со мной связаться, и понимает, что кликабельно

Для посетителей
Первый экран сразу говорит, кто я, чем занимаюсь и как со мной связаться. Тень есть только у того, на что можно нажать. Четыре раздела, которые повторяли друг друга, стали одной лентой опыта.
Красный тест
Один коммит, сделанный до появления этого цикла: красного теста до кода нет.
Ревью
Независимое ревью блокеров не нашло; подтверждённые замечания исправлены до мержа.
Поймано до мержа
  • У фильтров блога не было aria-pressed.
  • После закрытия разбора архитектуры в адресе оставался ?case=.
  • У метки Now был слабый контраст.
Что решил я
Взял в работу два внешних ревью: UX-заметки друга и отзыв WebGL-инженера. 3D-топологию в hero оставил, повторяющиеся разделы убрал.
PR #1 на GitHub ↗ +1001 −1661 · 10 файлов · 1 коммитов
PR #2 · смержен

Страница, её JSON-LD и llms.txt говорят обо мне одно и то же, с одними и теми же цифрами

Для посетителей
Страница, её JSON-LD и llms.txt теперь говорят обо мне одно и то же: оба написания имени, одна фраза в третьем лице, одни и те же цифры.
Красный → зелёный
bd450d2 Add a failing test that the page, its JSON-LD and llms.txt agree on who Gleb is and on the numbers → fb2c084 Make the page, its JSON-LD and llms.txt agree on who Gleb is and on the numbers
Поймано до мержа
  • Красный тест закрепил одно название для −80% в Kingpin: где-то это было время триажа, где-то анализ фидбека. fb2c084
Что решил я
У каждого факта одно название: −80% в Kingpin везде время анализа фидбека, а 28 PR в YAGNI — первая неделя, а не первые 8 дней.
PR #2 на GitHub ↗ +154 −23 · 7 файлов · 2 коммитов
PR #3 · смержен

Воронку конверсии теперь можно измерить: события Umami и UTM на cal.com

Для посетителей
Внешне ничего. Клики по созвону, почте, CV и LinkedIn стали событиями, а каждая ссылка на cal.com говорит, где на неё нажали. Пограничные случаи закреплены отдельными тестами: например, клик колёсиком по кнопке ничего не отправляет.
Красный → зелёный
283a9d5 Add a failing test for funnel events: tracked controls, cal.com UTM, Umami helper → 78579d2 Make the conversion funnel measurable with Umami events and UTM on cal.com links
Что решил я
События отправляются в Umami Cloud: в Vercel Hobby нет своих событий, а данные хранятся месяц.
PR #3 на GitHub ↗ +591 −14 · 6 файлов · 4 коммитов
PR #5 · смержен

Hero цепляет за 5 секунд: строка ценности, цифры и кнопка созвона до первого скролла

Для посетителей
На телефоне первый экран говорит, чем я занимаюсь, подкрепляет это цифрами и предлагает 30-минутный созвон.
Красный → зелёный
c12c874 Add a failing test that the hero says what, proves it and asks for the call above the fold on a phone → 8f46b32 Give the hero a 5-second hook: value line, stats and an intro-call CTA above the fold
Что решил я
28 PR в YAGNI теперь говорят, кто что сделал: 98% кода написали агенты, 97% планирования — моё.
PR #5 на GitHub ↗ +350 −105 · 5 файлов · 3 коммитов
PR #4 · смержен

Каждый пуш проверяется бюджетами производительности, за ними следит агент perf-watchdog

Для посетителей
Сайт остаётся быстрым: пуш, который пробивает бюджет по байтам или Lighthouse, блокируется до прода.
Красный → зелёный
d6ec0d1 Add a failing test that the site stays within its performance budgets and a push is gated on them → 03e8309 Gate every push on byte and Lighthouse budgets, and ask a perf-watchdog agent what got slower when it fails
Что решил я
Без GitHub Actions: проверка стоит на git push и блокирует его.
PR #4 на GitHub ↗ +1040 −9 · 10 файлов · 2 коммитов
PR #6 · смержен

Canvas в hero не крутит цикл анимации при reduced motion

Для посетителей
С включённым reduced motion канвас в hero перестаёт перерисовываться, когда ничего не движется: в покое было 180 кадров за 3 секунды, стало 0.
Красный → зелёный
a3deb9b Add a failing test for idling the hero canvas loop under reduced motion → 27d9074 Idle the hero canvas loop under reduced motion once the scene settles
Ревью
Независимое ревью отдельно проверило пробуждения при reduced motion: сбой и перетаскивание доигрывают до конца и затихают, а после resize канвас перерисовывается.
Что решил я
Ограничил задачу режимом reduced motion. Две побочные проблемы, перетаскивание правой кнопкой и запасной шрифт на канвасе, записаны в PR, но не исправлены.
PR #6 на GitHub ↗ +116 −1 · 3 файлов · 2 коммитов
PR #7 · смержен

У каждого поста своя индексируемая страница, а конспект заканчивается следующим шагом

Для посетителей
У каждого поста своя страница с заголовком и ссылкой, которой можно поделиться, а каждый конспект заканчивается следующим шагом: следующий пост, LinkedIn или созвон.
Красный → зелёный
1c56961 Add a failing test that every post has an indexable page and the reader gets a next step → 9647d0f Give every post its own page, link cards to it, and end the brief with a next step
Что решил я
На страницах постов одна ссылка на созвон, в конце конспекта. Ссылки с главной на /writing/ пока нет: этот раздел менялся в другой ветке.
PR #7 на GitHub ↗ +1381 −552 · 18 файлов · 2 коммитов
PR #8 · смержен

Карточка YAGNI больше не утверждает, что 89% PR написали агенты; остаётся одна цифра — 98% кода

Для посетителей
Карточка YAGNI больше не утверждает, что 89% моих PR написали агенты. Осталась одна доля агентов: 98% кода.
Красный → зелёный
b799c39 Add a failing test that the YAGNI card never claims 89% of PRs and gives 98% as the one code share → 103283b The YAGNI card drops the unprovable 89% of PRs; 98% of the code is the one agent share
Что решил я
Убрал 89%: эта цифра считала имена веток agent/, подтвердить её нечем, и она спорила с 98%.
PR #8 на GitHub ↗ +19 −2 · 2 файлов · 2 коммитов
PR #11 · смержен

Нейронный клеточный автомат выращивает монограмму GR в блоке «Вне резюме», и она заживает, когда посетитель её режет или откусывает

Для посетителей
Раздел «Вне резюме» начинается с монограммы GR, которую выращивает маленькая нейросеть. Разрежьте её или коснитесь — и она заживёт.
Красный тест
4c261ba Red test: a neural cellular automaton grows GR from one cell and regrows it after damage
Ревью
Код написал независимый агент, дифф прошли три независимые проверки-судьи; каждое подтверждённое замечание исправлено.
Поймано до мержа
  • После вертикального разреза G отрастала как R. Исправлено обучением на штрихах, а не только на круглых укусах. 7a37821
  • После полного стирания оставался мёртвый пустой квадрат. Теперь монограмма растёт заново. 7a37821
  • Обучение могло перезаписать более удачные веса. Теперь оно сохраняет только чекпойнт, который лучше текущего. 3365610
Что решил я
Смержил с записанным ограничением: 11 из 720 проверок заживления всё ещё не проходят порог, Reset это исправляет. Более чёткая версия на WebGL — на потом.
PR #11 на GitHub ↗ +1598 −5 · 19 файлов · 8 коммитов
PR #12 · смержен

Страница /booked: настоящая запись через cal.com становится шагом воронки, а персональные данные брони никуда не утекают

Для посетителей
После брони созвона открывается /booked. Бронь засчитывается в аналитике и привязывается к ссылке, с которой пришли.
Красный → зелёный
977b388 Add a failing test that /booked counts a real booking by placement and leaks no booking PII → 8b3a0bc Add /booked: a cal.com booking becomes booking_confirmed{source} with no booking PII
Что решил я
Считать забронированные созвоны, а не только клики по кнопке, и не хранить данные брони: сохраняется только то, с какой ссылки пришли.
PR #12 на GitHub ↗ +323 −3 · 5 файлов · 2 коммитов
PR #14 · смержен

Как собран этот сайт: каждый смерженный PR с красным тестом, тем, что поймали, и тем, что решил я

Для посетителей
Эта страница: каждый смерженный PR сайта с красным тестом, тем, что поймали до мержа, и тем, что решил я. Каждое число на ней посчитано из данных.
Красный → зелёный
1f77025 Add a failing test that /how-its-built/ shows every merged PR with its red test, judge findings and human decision, and derives every number from the data → 8972f07 Add /how-its-built/: every merged PR of this site with its red test, findings and human decision, every number derived from a generated build-story.json
Ревью
Код написал независимый агент, дифф проверил независимый судья: «можно мержить после правок». Его замечания исправлены до мержа.
Поймано до мержа
  • Ссылка в hero стояла сразу после цифр YAGNI и читалась как их доказательство. Теперь она говорит, что это тот же цикл на PR этого сайта. 8972f07
  • Страница приписывала шаг судьи каждому PR, хотя ревью записано только в трёх описаниях. Теперь карточка упоминает ревью, только если о нём сказано в PR. 8972f07
  • Тест свежести ронял бы main после каждого мержа. Теперь данные помнят, по какой коммит main они собраны. 7a4a6fe
Что решил я
Здесь считаются только PR этого сайта: 28 PR из hero — это YAGNI, и страница так и говорит. В каждой карточке есть и то, что решил человек, а не только то, что поймали.
PR #14 на GitHub ↗ +1775 −10 · 15 файлов · 3 коммитов
PR #13 · смержен

Perf-гейт на каждом PR в GitHub Actions и watchdog на OpenRouter, который объясняет превышения в одном закреплённом комментарии

Для посетителей
Внешне ничего. Проверка производительности переехала из локального pre-push хука в GitHub Actions и запускается на каждом PR, который меняет то, что уходит на сайт. Если бюджет пробит, недорогая модель объясняет причину в одном комментарии к PR.
Красный тест
a4424f8 Red test: the perf gate runs on every PR in CI with a sanitised sticky watchdog comment, and the pre-push hook is gone
Ревью
Дифф проверил независимый судья: «можно мержить после правок». Его правки внесены.
Поймано до мержа
  • Прогон, отменённый более новым пушем, всё равно мог вызвать модель. Теперь он ничего не стоит.
  • Без Chrome CI тихо проверял бы только байты. Теперь проверка падает.
  • Падение тестов не оставляло в PR никакого объяснения. Теперь появляется комментарий «gate not run».
Что решил я
Модель вызывается только при пробитом бюджете, обычно бесплатная, а её ответ обезвреживается перед публикацией. LLM-ревью кода намеренно остаётся локальным.
PR #13 на GitHub ↗ +881 −237 · 10 файлов · 6 коммитов
PR #16 · смержен

Полировка P2: подписи фильтров, кириллические шрифты, текст canary #42, телефон только в CV

Для посетителей
Фильтры блога называются так же, как категории на карточках. Русский текст получил кириллические шрифты вместо системных, и они загружаются только когда на странице есть русский. Номер телефона теперь только в PDF-резюме.
Красный тест
Четыре мелкие правки, по коммиту на каждую: тест приходил в том же коммите, что и изменение, поэтому отдельного красного теста до кода нет.
Что решил я
Canary #42 остаётся пасхалкой для тех, кто дочитал резюме до конца, но сформулирован как факт, а не как указание для ИИ. Известное наложение в подвале резюме оставил на потом.
PR #16 на GitHub ↗ +238 −37 · 14 файлов · 4 коммитов
PR #17 · смержен

llms.txt оставляет языковым моделям, которые его читают, мягкий boop и хайку-канарейку

Для посетителей
llms.txt, файл для языковых моделей, заканчивается дружеской запиской и хайку, которое модель может процитировать, чтобы показать, что прочитала файл.
Красный → зелёный
79b945b Red test: llms.txt carries one note for language models, a soft boop and an exact haiku, that invites and never commands → 5925c95 llms.txt leaves a soft boop and a canary haiku for the language models that read it
Что решил я
Записка только приглашает и ничего не требует, и живёт только в llms.txt: резюме и подвал сайта остаются для людей.
PR #17 на GitHub ↗ +69 −1 · 3 файлов · 2 коммитов
PR #18 · смержен

Топология в hero рассказывает историю в 3 шага и заканчивается кейсом YAGNI

Для посетителей
Топология в hero рассказывает историю в три шага: человек утверждает план, агенты строят в песочнице, потом вы ломаете систему и смотрите, как она восстанавливается. В конце ссылка на кейс YAGNI. Свободная игра спрятана за Explore, а на телефонах показывается статичный постер с кнопкой Play.
Красный → зелёный
da0fad8 Add failing tests: the hero topology tells a 3-step story that ends on the YAGNI case, and the GR monogram bridges to it → cd66642 The hero topology tells a 3-step story that ends on the YAGNI case; free play moves behind Explore
Ревью
Код написал агент, проверил отдельный судья, которому дали только дифф, тесты и задачу. Его замечания исправлены до мержа.
Поймано до мержа
  • Фокус клавиатуры терялся, когда исчезал элемент в фокусе. Теперь он переходит на Break или на ссылку на кейс.
  • Ссылка на кейс перехватывала клики с модификаторами, и её нельзя было открыть в новой вкладке.
  • ?domain= сдвигал вёрстку после первой отрисовки. Теперь он применяется при открытии Explore.
Что решил я
Топология должна говорить, какую задачу решает, а не просто выглядеть эффектно. Смержил с двумя записанными недочётами: на постере для телефона часть подписей узлов наезжает друг на друга, а строка статуса в шапке остаётся только на английском.
PR #18 на GitHub ↗ +863 −29 · 8 файлов · 2 коммитов
PR #19 · смержен

Ежедневная синхронизация Publora: посты из LinkedIn становятся двуязычными страницами с полным текстом через один PR бота

Для посетителей
На страницах постов теперь полный текст: английский оригинал и русская адаптация, а LinkedIn указан как копия. Новые посты из LinkedIn попадают на сайт через один ежедневный PR от бота, который я проверяю.
Красный тест
05890fd Red test: a daily Publora sync turns new published LinkedIn posts into validated site entries in posts.json and one bot PR, and does nothing when there is nothing new
Поймано до мержа
  • Сломанный файл бэкфилла останавливал всю синхронизацию. Теперь он пропускается, а ссылки в бэкфилле должны вести на LinkedIn. 5144f45
Что решил я
Оригинал — сайт, копия — LinkedIn. Черновики пишет Haiku 5.5, запасная модель — GLM-5.3 Flash; обе выбраны в сравнении 13 недорогих моделей на двух реальных постах. В main бот никогда не пушит.
PR #19 на GitHub ↗ +2338 −420 · 15 файлов · 9 коммитов
PR #21 · смержен

/llm.txt редиректит на /llms.txt: в этом имени агенты ошибаются чаще всего

Для посетителей
/llm.txt, опечатка, по которой реально обратился ИИ-браузер, теперь перенаправляет на /llms.txt вместо 404.
Красный → зелёный
4294d99 Red test: /llm.txt permanently redirects to /llms.txt → 26ec26a /llm.txt redirects to /llms.txt, the name agents most often misspell
Что решил я
Постоянный редирект, а не вторая копия, чтобы два файла никогда не разошлись.
PR #21 на GitHub ↗ +25 −0 · 2 файлов · 2 коммитов
PR #20 · смержен

Диета главной: 6 последних постов, собранные скрипты страницы, кейсы на отдельных страницах

Для посетителей
Главная стала легче: 6 последних постов и ссылка на все, скрипты страницы в собранных модулях, а у каждого кейса своя страница, которая подгружается на главную только при открытии. HTML главной уменьшился с 35 758 до 30 270 байт в gzip.
Красный тест
876a838 Add failing tests: home under 32 KB gzip, 6 latest posts + /writing/, no inline page scripts, cases on their own pages and loaded on open
Поймано до мержа
  • Ссылка с ?case= могла открыть кейс раньше, чем аналитика начинала слушать события, и автоматическое открытие могло засчитаться как case_open. Теперь восстановление ждёт, пока отработают все модули. 1a49fd0
  • Скрипты страницы могли запуститься раньше глобальных функций, которые они вызывают. Теперь эти функции загружаются первыми. 1a49fd0
Что решил я
Бюджеты не менял: главная освободила место, сбросив вес, а не за счёт поднятого лимита.
PR #20 на GitHub ↗ +582 −212 · 12 файлов · 3 коммитов
PR #22 · смержен

Статический i18n: EN на /, RU на /ru/, типизированные словари, hreflang и переключатель языка ссылкой

Для посетителей
У каждого языка своя страница: английская на /, русская на /ru/, с hreflang и переключателем языка, который сохраняет место на странице. HTML главной уменьшился с 30 266 до 23 218 байт в gzip.
Красный тест
68be84d Add failing tests: EN at /, RU at /ru/ with lang, hreflang, sitemap and a link switch; typed dictionaries with identical keys
Поймано до мержа
  • Бронь, сделанная с русской страницы, вела на английскую /booked/. Теперь она ведёт на /ru/booked/. 398a1cd
  • Переключатель языка терял ?query#anchor при клике правой кнопкой. Теперь сохраняет. 398a1cd
Что решил я
Отдельные статические страницы для каждого языка вместо скрытых дублей текста, словари типизированы: пропущенный или лишний ключ ломает сборку. Английский остаётся языком по умолчанию.
PR #22 на GitHub ↗ +1399 −909 · 41 файлов · 3 коммитов
PR #23 · смержен

Топология в hero повторяет реальный прогон агентов на этом сайте (PR #11), и посетитель может взять управление на себя

Для посетителей
Топология в hero показывает запись реального прогона агентов на этом сайте, PR #11, включая момент, когда судья ловит G, отросшую как R. Перехватить управление можно в любой момент: выключить судью и посмотреть, как ошибка уходит в прод, или разрезать маленькую GR.
Красный тест
7c2dce6 Red test: the topology replay of PR #11 is checkable against git, and the G→R mis-heal is reproduced from committed pre-fix weights
Ревью
Код написал агент, проверили независимые судьи, которым дали только дифф, тесты и задачу: один раз слой данных, один раз интерфейс. Их замечания исправлены до мержа.
Поймано до мержа
  • Шаг песочницы показывал тест, который появился только после находки. Теперь он называет тесты на укусы, которые были тогда. 2a5148e
  • Автовоспроизведение засыпало live-регион сообщениями, и его нельзя было поставить на паузу. Теперь фильм ставится на паузу, а live-регион молчит. 2447594
  • Отменённое заживление могло всё равно сработать позже. Теперь устаревшее заживление не применяется. 2447594
Что решил я
Показывать реальный прогон с пометкой, что это повтор, а не иллюстрацию, и сверять всё в нём с git. Сценарная ошибка при перехвате управления помечена как симуляция.
PR #23 на GitHub ↗ +2900 −712 · 30 файлов · 11 коммитов
PR #24 · смержен

CV в PDF: две чистые страницы с потоковой вёрсткой, шапкой и подвалом

Для посетителей
PDF-резюме теперь две аккуратные страницы со всеми разделами, настоящими тире и маркерами, более крупным текстом и кликабельными ссылками. Строка canary больше не наезжает на основной текст.
Красный тест
63e597b Add failing tests: CV PDF on 2 pages with every role, capabilities and education, footer band per page with canary inside, no overlapping lines, real dashes and bullets, 9-11pt body, reading order
Поймано до мержа
  • Проверялись не все строки: какие-то могли залезть в полосу подвала. Теперь проверяется каждая строка абзацев и списков. 9ad18a8
  • Заголовок раздела мог остаться один внизу страницы. Теперь он не отрывается от первой записи. 9ad18a8
Что решил я
Две страницы вместо того, чтобы урезать разделы ради одной. Сборка падает на тексте за полями, а не выпускает его, и без новых зависимостей.
PR #24 на GitHub ↗ +552 −218 · 3 файлов · 3 коммитов
PR #25 · смержен

Демо VAD в кейсе Sully: услышьте 15 с → 0 прямо в своём браузере

Для посетителей
В кейсе Sully появилось демо «Скажите „алло“»: модель детекции голоса слушает микрофон прямо в браузере и показывает, за сколько миллисекунд заметила голос, рядом со старыми ~15 с тишины. Звук остаётся в памяти, а модель скачивается только после разрешения на микрофон.
Красный тест
bef91a2 Add failing tests: voice VAD demo in the Sully case — trigger and privacy line EN/RU, no model or worker URL before the click, Silero v6.2.3 TS port matches ONNX on fixture audio, onset timing on a mocked probability stream, state machine across denied/no mic/unsupported/Save-Data, vad_demo in EVENTS and README
Поймано до мержа
  • Цифровая тишина в начале записи могла задать уровень шума. Теперь он не опускается ниже −80 dBFS. 7d8d75b
  • Зависшая инициализация могла оставить микрофон включённым. Теперь сторожевой таймер и тайм-аут всегда его освобождают. 7d8d75b
  • Уход со страницы не сбрасывал запущенное демо. Теперь оно возвращается в исходное состояние. 7d8d75b
Что решил я
Перенести Silero VAD на TypeScript вместо загрузки ONNX-рантайма, который весил бы около 3,4 МБ на каждый клик. Текст на странице прямо говорит, что в Sully выигрыш дала не быстрая модель, а то, что агент ждёт голос, а не здоровается под гудки.
PR #25 на GitHub ↗ +1370 −0 · 26 файлов · 4 коммитов
PR #26 · смержен

Синхронизация Publora: все мои посты с августа 2025 года за один прогон, и задача бота остаётся зелёной

Для посетителей
На странице ничего не меняется, пока не смержен следующий PR бота синхронизации. Этот PR должен принести в /writing/ все мои посты из LinkedIn с августа 2025 года с полным текстом. Описания раздела «Блог» теперь говорят, что на сайте полные посты.
Красный тест
Два коммита, и каждый приносил тесты вместе с изменением: отдельного красного теста до кода нет.
Что решил я
Загрузить всё одним прогоном, около $0,04 с Haiku, с ограничением по времени вместо лимита на число постов. Один неудачный черновик пропускается с указанием причины, а не блокирует весь PR.
PR #26 на GitHub ↗ +809 −128 · 15 файлов · 2 коммитов
PR #27 · смержен

A tiny learned policy keeps a toy service alive while visitors inject faults

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
4ba4d26 Red test: a learned policy keeps a toy service alive under visitor faults, beats doing nothing, matches a frozen runbook, and still fails honestly without the judge or beyond capacity
PR #27 на GitHub ↗ +1910 −119 · 17 файлов · 6 коммитов
PR #28 · смержен

Keep /how-its-built/ up to date with main through one bot PR, and catch it up through #26

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
e6d437e Red test: the build story refreshes itself in one bot PR, skips data-only PRs, shows new PRs as pending and catches up through #24
PR #28 на GitHub ↗ +1651 −99 · 13 файлов · 3 коммитов
PR #31 · смержен

Russian copy that reads like an engineer wrote it, not a translator

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #31 на GitHub ↗ +489 −220 · 20 файлов · 14 коммитов
PR #29 · смержен

Security hardening: the bot PAT stays off package code, strict CSP and security headers

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #29 на GitHub ↗ +585 −130 · 25 файлов · 9 коммитов
PR #30 · смержен

Home's post cards no longer grow with the post, so the Publora sync's long posts fit home's budget

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #30 на GitHub ↗ +90 −18 · 5 файлов · 1 коммитов
PR #32 · смержен

The GR monogram regrows from one cell when a heal fails, instead of settling into a bar

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
97f1bd6 Red test: a monogram erased down to a strip regrows from one cell instead of settling into a bar
PR #32 на GitHub ↗ +846 −41 · 13 файлов · 10 коммитов
PR #34 · смержен

IndexNow ping after each production deploy

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #34 на GitHub ↗ +93 −0 · 4 файлов · 1 коммитов
PR #35 · смержен

Long-form posts first published here: the self-healing monogram and the no-Three.js hero

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #35 на GitHub ↗ +278 −37 · 10 файлов · 2 коммитов
PR #36 · смержен

Publora sync: a LinkedIn copy of a site-first post links to it instead of duplicating it

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #36 на GitHub ↗ +101 −9 · 4 файлов · 1 коммитов
PR #37 · смержен

Long-form posts: no closing question; Lighthouse 1.0 stated as at launch

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #37 на GitHub ↗ +4 −4 · 1 файлов · 1 коммитов
PR #33 · смержен

/sitemap.xml redirects to /sitemap-index.xml for crawlers that ask for the usual name

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
f9d094b Red test: /sitemap.xml permanently redirects to /sitemap-index.xml
PR #33 на GitHub ↗ +25 −0 · 2 файлов · 2 коммитов
PR #38 · смержен

No meta files in the repo: RU style rules live in src/i18n/ru-style.ts; docs/ stays local

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #38 на GitHub ↗ +26 −89 · 6 файлов · 1 коммитов
PR #39 · смержен

Build story: unblock the refresh on #27, #31 and #32

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #39 на GitHub ↗ +16 −5 · 2 файлов · 1 коммитов
PR #41 · смержен

Publora sync: check out main with full history

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #41 на GitHub ↗ +28 −16 · 3 файлов · 1 коммитов
PR #42 · смержен

Posts written on the site, distributed through Publora drafts

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #42 на GitHub ↗ +875 −16 · 5 файлов · 1 коммитов
PR #46 · смержен

A /hire page: four ways to work with Gleb, with proof, in JSON-LD and llms.txt

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #46 на GitHub ↗ +474 −5 · 10 файлов · 2 коммитов
PR #48 · смержен

A /c card for the QR code on the phone case, the code on /hire, and the site's own 404

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
4d9e802 Red test: /c, where the QR code on the phone case lands, is a few-kilobyte card in both languages with one booking link tagged case, a vCard, email, phone, LinkedIn and /hire, noindex, and capital /C from the code rewrites to it
PR #48 на GitHub ↗ +940 −21 · 18 файлов · 10 коммитов
PR #51 · смержен

Tests run in about a minute instead of five

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #51 на GitHub ↗ +393 −278 · 39 файлов · 1 коммитов
PR #50 · смержен

Capital /C from the QR code rewrites to /c/index.html

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
10baa76 Red test: capital /C from the QR code is rewritten to the file /c/index.html, which the build emits; on production the rewrite to the directory /c/ answered Vercel's NOT_FOUND for /C and /c/
PR #50 на GitHub ↗ +7 −4 · 2 файлов · 3 коммитов
PR #49 · смержен

Astro 7.4.5: close the eleven Dependabot alerts on astro 5.x

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #49 на GitHub ↗ +187 −350 · 4 файлов · 2 коммитов
PR #53 · смержен

A post written on the site: the handoff prompt as a map of the next few months

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #53 на GitHub ↗ +74 −0 · 4 файлов · 8 коммитов
PR #54 · смержен

The handoff post's brief says the agent asks me, not the author

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #54 на GitHub ↗ +1 −1 · 1 файлов · 1 коммитов
PR #55 · смержен

Say four years of medical school, not a medical degree

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #55 на GitHub ↗ +14 −14 · 7 файлов · 1 коммитов
PR #58 · смержен

Run the NCA simulations in their own workflow, one runner per file

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #58 на GitHub ↗ +222 −24 · 15 файлов · 1 коммитов
PR #57 · смержен

Keep medicine only as the education line

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #57 на GitHub ↗ +14 −14 · 7 файлов · 1 коммитов
PR #62 · смержен

Lead the homepage with case studies and simplify replay controls

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #62 на GitHub ↗ +88 −38 · 10 файлов · 2 коммитов
PR #63 · смержен

Publish the code review model benchmark

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #63 на GitHub ↗ +150 −0 · 2 файлов · 2 коммитов
PR #64 · смержен

One file per post: src/data/posts/<slug>.json

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
ae40d7f Red test: every post is its own file src/data/posts/<slug>.json, read newest first, and a run writes only the posts it changed
PR #64 на GitHub ↗ +2490 −2335 · 73 файлов · 3 коммитов
PR #65 · смержен

EN↔RU morphs the page in place instead of reloading it

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
50805a8 Red test: the language link morphs the page into its other-language twin in place, keeps the paragraph being read where it was, Back morphs it back, and a page whose structure changed falls back to a navigation; every EN page and its RU twin share one structure outside the swapped regions
PR #65 на GitHub ↗ +454 −4 · 6 файлов · 2 коммитов
PR #67 · смержен

A depth dial on technical posts: written for people or for engineers

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
45ec1c9 Red test: a depth dial on the technical posts morphs the post into its plain-language version in place and back, keeps the paragraph being read, follows the language switch and the next visit; a post opts in with depth: true in its .md front matter or a plain version in its json
PR #67 на GitHub ↗ +476 −126 · 20 файлов · 5 коммитов
PR #68 · смержен

Share a quote from a post: a card, a link to the passage, and attribution on copy

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
98dda5c Red test: on a post page a selected passage gets a bar with a quote card (1080×1350 PNG) and a link to that passage as a text fragment, a copied passage pastes with the post title and that link, and the bar's words follow the language morph
PR #68 на GitHub ↗ +483 −2 · 9 файлов · 2 коммитов
PR #70 · смержен

Pin the toy service seed in the policy take-over probe

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #70 на GitHub ↗ +21 −8 · 1 файлов · 1 коммитов
PR #69 · смержен

No page loads between pages: view transitions and hover prefetch

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
83f81ac Red test: every page opts into cross-document view transitions (not under reduced motion), the top bar stays put, a post title on /writing/ and in the inline brief flies into the post heading, home cards stay unnamed, and hovering a site link prefetches it with speculation rules, never prerender
PR #69 на GitHub ↗ +204 −5 · 9 файлов · 2 коммитов
PR #71 · смержен

The theme follows the system, and switching it is a light switch

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
22f3e77 Red test: the theme follows the system until the visitor picks one, the button walks auto, the other theme, the same theme, auto, with the mode as its label, and a switch spreads the new theme in a circle from the press (instant under reduced motion)
PR #71 на GitHub ↗ +367 −75 · 15 файлов · 2 коммитов
PR #74 · смержен

Browser tests run in CI: one Chrome lookup for Linux and macOS

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #74 на GitHub ↗ +79 −34 · 9 файлов · 3 коммитов
PR #73 · смержен

The site remembers what you read, in this browser only

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
ad59052 Red test: a post page remembers how far it was read, coming back offers to continue at that paragraph without moving the page, lists tag read and started posts, /writing/ offers to forget it, and none of it reaches analytics
PR #73 на GitHub ↗ +388 −4 · 8 файлов · 2 коммитов
PR #75 · смержен

Offline: the site works without the network

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
6ee08de Red test: a service worker keeps the shell and every page opened, pages network first and hashed assets cache first, never /booked/ or other origins or a query; offline, a read post and home still open and an unread page gets the offline page listing what this browser can read
PR #75 на GitHub ↗ +379 −9 · 13 файлов · 3 коммитов
PR #76 · смержен

What changed since your last visit

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
b669210 Red test: the build lists posts and fingerprints /hire/ and the case pages in /changes.json; a returning visit after half an hour gets a card with the new posts and updated pages, new cards say NEW for the visit, the first visit shows nothing, and none of it is tracked
PR #76 на GitHub ↗ +369 −1 · 7 файлов · 2 коммитов
PR #77 · смержен

The GR companion grows as you read a post

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
8970c21 Red test: on a post page a small GR companion grows from one cell as far as the post is read and waits there, starts as far as a post was read before, grown it is wounded by a passing cursor and heals, sleeps at night, and loads only on post pages
PR #77 на GitHub ↗ +352 −18 · 12 файлов · 3 коммитов
PR #79 · смержен

Every post grows its own creature

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
c4eff94 Red test: every post grows its own symmetric pixel creature from its slug, the same each time and different for each post, shown on its cards, grown cell by cell in its header, and as its own 1200×630 share preview
PR #79 на GitHub ↗ +409 −51 · 10 файлов · 2 коммитов
PR #80 · смержен

The tab misses you

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
e73f68f Red test: while the tab is hidden its favicon wilts through six stages over a few minutes (lower and greyer each time) and the title whispers I'll wait; back on the tab both come back
PR #80 на GitHub ↗ +234 −0 · 6 файлов · 2 коммитов
PR #81 · смержен

The site knows how you came

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #81 на GitHub ↗ +179 −5 · 8 файлов · 2 коммитов
PR #83 · смержен

Benchmark post: what the low precision means

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #83 на GitHub ↗ +17 −5 · 3 файлов · 4 коммитов
PR #82 · смержен

Gleb now

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
e71a1e7 Red test: Gleb now — the footer tells his time in Tbilisi (asleep at night) and the site's last commit, from git at build and fresher from GitHub once the footer is in view
PR #82 на GitHub ↗ +210 −4 · 10 файлов · 2 коммитов
PR #84 · смержен

A letter that knows the context

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
55cba13 Red test: a letter that knows the context — on /hire, WRITE ME AN EMAIL starts the letter with the posts this browser read and the offer the visitor jumped to; nothing leaves until they send it
PR #84 на GitHub ↗ +220 −12 · 7 файлов · 3 коммитов
PR #85 · смержен

Print as magic

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
90339fd Red test: print as magic — Ctrl+P on /hire is a one-page CV (A4 and Letter, EN and RU), a post prints as a newspaper page with a masthead, two ruled columns, a drop cap and link addresses; all from /print.css behind media=print
PR #85 на GitHub ↗ +238 −17 · 10 файлов · 2 коммитов
PR #86 · смержен

Shadows from real light

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
eb23b43 Red test: shadows from real light — the cursor is the light and the hard shadows fall away from it, the same length; down-right in the middle and without JS; still under reduced motion
PR #86 на GitHub ↗ +150 −7 · 4 файлов · 2 коммитов
PR #87 · смержен

The site measures itself

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
e3338b2 Red test: the site measures itself — the footer says how fast this page opened for this visitor (LCP, else FCP) and how: server, first paint, bytes over the network or from cache; real Performance API numbers, sent nowhere
PR #87 на GitHub ↗ +163 −0 · 6 файлов · 2 коммитов
PR #89 · смержен

Theme test: pin the light system, more virtual time

Мои заметки к этому PR ещё впереди: пока в карточке только то, что записано в git и GitHub.

Красный тест
Красного теста до кода нет — причина появится позже
PR #89 на GitHub ↗ +6 −2 · 1 файлов · 1 коммитов

Если вы работаете с агентами и хотите такой же цикл в своём репозитории — давайте обсудим.

ЗАПИСАТЬСЯ НА СОЗВОН ↗
СКОПИРОВАНО