Замер до работы отменяет половину плана
Вывод: за эти двенадцать часов четыре раза подряд замер, сделанный до работы, отменял написанный план. Хендофф обещал «один коммит в globals.css» — грепом нашлось 712 инлайновых fontSize в JSX, которые переменную не видят, и потребовался кодмод по 107 файлам. Светлую тему собирались писать — она уже была написана целиком, менялся один инициализатор в layout.tsx. Облако тегов по образцу dudarik.com собирались рисовать — счёт по 1032 карточкам показал 947 уникальных тегов, 655 из них встречаются ровно один раз, а жёсткий лимит tags[:4] делает фильтр по пяти тегам математически пустым, всегда. И число шаблонных карточек 384 → 344 выглядит как работа над качеством, а это удаление: из 78 снятых карточек стоицизма 40 несли шаблон. Партия 5 не запускалась.
Окно: 27.07 15:05 → 28.07 03:00. Тридцать шесть коммитов, 202 файла. Локальная main — 635169b, origin/main — cbc03fc: последний коммит не запушен, дизайн-системы на сайте нет. Состояние прода не проверено — buyanov.io/sostoyanie из облачной сессии не открывается, [уточнить] глазами.
1. Сделано
Дизайн-система — первый настоящий заход
635169b — партия 1а: кегли, начертания, радиусы на токены. Причина, по которой прошлые попытки не двигались: хардкоды сидели не в CSS, а инлайном в JSX — 712 fontSize, 180 borderRadius, 129 fontWeight в 107 файлах. Инлайн всегда сильнее переменной, поэтому токены в globals.css их не перебивали. Введена шкала --fs-1..6 (48/34/22/17/14/12), --fw 400/600/700, --r 6px, --r-pill 999px. Основной текст переехал с 15.5px на 17px. Исключены генераторы картинок (icon/opengraph/cert) и графы Kosmos/Knowledge/Karta/Routes — холст 1200×630 и палитра категорий данных, шкала интерфейса им не годится. Замер scripts/design_metrics.py: кеглей-хардкодов 27 → 0, радиусов 15 → 1, начертаний 5 → 3. Цвета не тронуты — это партия 1б.
Признак — не проверить: коммит не в origin/main. После пуша — buyanov.io/?v=28: текст заметно крупнее, у карточек и кнопок одно скругление вместо разнобоя 2–16px.
cbc03fc — бумага по умолчанию вместо чёрного. Светлая тема в globals.css была написана давно и полностью ([data-theme="light"], фон #FBFAF7, текст #23201A), по умолчанию включался только тёмный. Изменён один инициализатор. Акцент на бумаге приглушён до #C2431F — кислотный #ff6a3d на белом не читается. Признак — buyanov.io/?v=27 открывается на светлом тёплом фоне; оранжевый стал тёмно-медным и живёт только в акцентах. Где остался тёмный хардкод — подозреваемые /hydro и картинки-превью, [уточнить].
Витрина — русский язык и живые цифры
0823d70. 636 карточек из 1120 назывались по-английски, при том что русский tldr посчитан у всех. Теперь в списке разборов, в «горячем» и в «в работе у тебя» первой идёт русская суть, английское название ушло справкой. Даты «26 июля 2026» вместо 2026-07-26T10:11:47+00:00. Кнопка связи в шапке на каждой странице — закрывает строку карты задач «кнопку связи вынести наверх». Снята выдуманная цифра «≈4008 ч ручного эквивалента»: делилось на 45 строк в час, выходило 138 часов в сутки. Числа разборов и бесплатных сервисов стали живыми — было вшито «157», в каталоге 160. Признак — buyanov.io/materialy?v=22: заголовки русские, под ними серым английский оригинал; счётчик 1042, а не 1120; в шапке телефона знак @ слева от солнца.
51cf1b2 — поле zagolovok в образце карточки. До него заголовок на витрине собирала ruTitle() обрезкой сводки по 90 символов и рвала слово посреди, а на самой странице разбора русского заголовка не было вовсе. Признак — buyanov.io/lenta/0fgJPhYcbVk?v=26: карточка называется «Фоновые агенты: конец ведения модели за руку», а не обрезком.
9dacced — образец карточки №1. Разбор идёт по всему ролику, а не по первым 12 000 символам: 12 глав вместо пяти, tldr про видео а не про проект, главы утверждениями вместо «Обсуждение…», note и body больше не дублируются. Признак — там же: 12 пронумерованных глав, у глав с 6-й по 12-ю таймкода нет (их берём отдельно, не выдумывая), слово buyanov в сводке не встречается ни разу.
Перестройка навигации
890fccb. Карта уехала на /kosmos во весь экран — шапка и подвал скрыты, вертикальный свайп наконец вращает карту, а не листает страницу. На главной первым экраном пульт. Дерево переехало на /glubzhe, где прокрутка и есть замысел. В списке разборов появился поиск. Признак — buyanov.io/kosmos?v=25 с телефона: нет шапки, страница не прокручивается, палец вверх-вниз вращает карту.
508af57. В космосе кнопка «← списком», фильтр тем и заголовок разведены по высоте — раньше лежали друг на друге. Звёзды резкие на стартовой орбите: было 0.15 резкости из единицы, стало 0.56. Пульт не прыгает при переключении режима. Признак — buyanov.io/kosmos?v=25: заголовок и фильтр не пересекаются, у звёзд видно точку в середине.
ecb0655, c41d943. Ползунок увеличения сначала переехал вниз — у края экрана он перехватывал системный свайп; через сорок минут поднят над пультом видов. Туда же фильтр по темам с числами и подсветка «моё в деле» зелёным вместо сильнейших по баллу. Признак — /kosmos?v=25 с телефона: ползунок не спорит со свайпом и не лежит под пультом видов; зелёным подсвечены отмеченные, а не топ по баллу.
Пульт
d532a32 — два режима, «просто спросить» и «по моим разборам». Раньше разборы подкладывались в любой вопрос, включая договор аренды. Признак — buyanov.io/?v=25: спроси не про AI — в обычном режиме под ответом нет строки «по разборам».
f17a9c1, 785930d, 39f28e4 — ход работы тремя шагами по фактическим событиям, счётчик закрытых; примеры по категориям и «удиви меня»; честный остаток запусков в интерфейсе. Порог поиска по разборам поднят: минимум два разных слова и попадание в заголовок или тег, иначе честная строка «не нашлось».
e3368eb — прикрепление текстового файла с телефона и с компьютера, отдельный потолок 6000 знаков на документ; в ленте видно имя и объём, сам текст в чат не выводится. Признак — buyanov.io/?v=25: слева от строки ввода кнопка +.
5eeaabf — потолок ответа 350 → 1000 токенов; под ответом расход вход/выход фактом от провайдера, цена показывается только если задана в MODEL_PRICE_RUB. Признак — серая строка «расход · вход N · выход M токенов» под ответом.
Остальное
3e2fa04, 037c089, 1555ffe — страница /sobrat. Короткая фраза → развёрнутое задание для внешней модели, живой образец результата в песочнице до нажатия, ход сборки по фактам, скачивание html и md. Признак — buyanov.io/sobrat?v=25: под полем ввода работающая страница веломастерской и кнопки «открыть в Grok / ChatGPT / Claude».
f32676b — карта разбора переделана. Дерево на два уровня вместо колеса из пяти кружков, заголовки не режутся, таймкод главы открывает ролик с нужной секунды. Таймкоды есть у всех 1041 карточки — лежат JSON-строкой, прогон за кредиты не нужен. Признак — buyanov.io/materialy?v=25 → любой разбор с баллом 8+: под заголовком «карта разбора · N глав», главы раскрываются плюсом.
c177ac1 — поля ввода 16px. На iOS кегль меньше шестнадцати заставляет браузер зумить страницу при фокусе. Признак — с айфона тап в поиск по разборам не увеличивает страницу.
0535b3d, 02ec246 — аналитика. Убран дубль скрипта из layout (он уже грузится в Analytics после согласия) и снято условие на переменную. Признак — в исходнике страницы скрипт Vercel один, появляется после согласия на куки.
f0ace25, 3947386 — страница /sostoyanie. Живая проверка хранилища: сервер стучится в user_state и показывает ответ; видно причину, почему GitHub не ответил, поддержан GITHUB_TOKEN.
490e623, 6e69aaf — /about. Схема конвейера: источник → расшифровка → выжимка → выходы, куда растёт и где не подходит; механика описана без привязки к видео.
ecee697 — /avtor. Снят блок про письмо Торпу вместе с упоминаниями в призмах Торпа и Талеба; призмы и библиотека раскрыты фактами — кто эти люди, без похода в гугл; мёртвая цифра «299 разборов» заменена счётчиком (5586806 — то же на /prizmy).
f34a49d — мета-теги для /blog и /glubzhe: описание, canonical, превью для соцсетей. 7546aa3 — на /glubzhe дерево отделено от текста, две карточки-призыва сведены в одну с двумя путями. 49fc32d, d2338c5 — на /materialy убрана метафора окна с тремя точками, карточка на телефоне ужата вдвое. 3851831 — журнал изменений обновлён (693 строки в changelog-data.ts).
1181d35 — правило пользы. Найден второй признак брака: упоминание сайта в тексте карточки. Поле tldr тоже бывает заражено. Признак — раздел в ПРАВИЛО_польза.md, на сайт не выходит.
f2a0f52 — одна новая карточка Yersham, iy7sjplZh-I.
2. Хотел, но не успел
- Партия 5 ленты не запущена. Шаблонных 344 из 1043 — цифра упала только за счёт удаления. Тест перегенерации на 14 карточках подготовлен и стоит в
СВЯЗЬ.mdготовой командой, но требуетOPENAI_API_KEY— запускает владелец. - Аккаунты. Код готов на 90 %, слой спит за флагом
NEXT_PUBLIC_AUTH_ENABLED. Ждёт трёх действий владельца: OAuth-клиент в Google Cloud → три переменные в Vercel → SQL. Пока отметка «применил» ставится только командой в терминале, операторский слой не наполнится. - Дизайн-система, партия 1б — цвета. Кегли и радиусы сведены, палитра не тронута.
- Пустые поля по бокам на широком экране — строка карты задач не двинулась.
- Отдельный чат под дизайн и Midjourney не заведён; Midjourney оплачен, движения ноль.
- Карта задач в Miro не сделана.
- Голосовые записи: скрипт на папку не повешен, две записи по час сорок не расшифрованы.
- Скиллы: не знают о новых файлах проекта; правила и факты не разведены.
- План роста — по-прежнему нигде нет: ни в инструкциях, ни в скиллах.
3. Решил иначе
Дизайн-система: кодмод вместо одного коммита. Хендофф предполагал правку globals.css. Замер грепом до работы: 712 инлайновых fontSize в JSX, которые CSS-переменную не перебивают. План поменялся на скрипт по 107 файлам плюс scripts/design_metrics.py, чтобы результат считался, а не оценивался на глаз.
Светлая тема: ничего не писали. Собирались делать светлую тему — она уже была в globals.css целиком. Работа свелась к одному инициализатору в layout.tsx и приглушению акцента. Проверка «а не сделано ли уже» стоила пяти минут и сняла задачу на день.
Облако тегов отложено, витрина после системы тегов. Владелец принёс образец dudarik.com с мультивыбором и живым счётчиком. Замер по 1032 карточкам: 947 уникальных тегов, 655 встречаются один раз; верхние три бесполезны как фильтр (оркестрация 663, автоматизация 600, агенты 430 из 1032); лимит tags[:4] жёстко зашит в lenta_common.summarize. Проверка на данных: оркестрация 663 → +автоматизация 445 → +агенты 263 → +безопасность 21 → пятый тег 0. Сценарий «10 тегов → 2 темы» при нынешней схеме невозможен математически. Решено: сначала словарь на 40–60 тегов, вшитый в промпт, лимит поднять до 6–8, перетегировать заодно с перегенерацией сводок — отдельного прогона и отдельных денег не нужно. Интерфейс — после.
Тест перегенерации пересчитан с 20 карточек на 14. Шесть из двадцати — пустышки без транскрипта (тело 60 символов), перегенерировать нечем; одна из них стоит в списке на удаление. Критерий «меньше 4 из 20» заменён на «меньше 3 из 14». Заодно опровергнута посылка «вся тысяча сделана на gpt-4o-mini»: choose_model уводит транскрипты длиннее 6000 символов на gpt-4.1-mini, и семь из восьми шаблонных карточек выборки сделаны именно им. Прогон с жёстко заданной моделью сравнил бы яблоки с грушами.
Карта уехала на свою страницу. Космос жил на /materialy внутри прокручиваемой страницы и потому не вращался пальцем по вертикали. Вместо борьбы с жестами карта вынесена на /kosmos во весь экран без шапки и подвала. Конфликт снялся сам.
Пульт: заземление стало режимом, а не всегдашним поведением. Разборы подкладывались в любой вопрос — модель отвечала про AI-агентов на вопрос про договор аренды. Развели на два режима вместо того, чтобы улучшать порог релевантности.
Ползунок увеличения переехал дважды за сорок минут — вниз, потом наверх. Первый переезд решал перехват системного свайпа у края, второй — наложение на пульт видов. Признак того, что расположение элементов на телефоне подбирается вслепую; замера тут не было, и это стоило лишнего коммита.
4. Перехотел
- 78 карточек стоицизма убраны из ленты (лежат в
~/Desktop/_ЛЕНТА_убрано_27-07). Причина: лента — про вход в AI, стоицизм в неё попал прогоном канала и разбавлял выборку. Побочный эффект — из 384 шаблонных ушли 40 просто вместе с файлами. - Блок «горячее» снят с главной (
508af57). На первом экране должен быть пульт, а не витрина; два входа в один и тот же контент конкурировали. - Выдуманный ручной эквивалент «≈4008 ч» снят. Считался делением на 45 строк в час и давал 138 часов в сутки. Цифра, которую нельзя защитить, снимается, а не подгоняется.
- Блок про письмо Торпу снят с
/avtorвместе с упоминаниями в двух призмах — история про неотправленное письмо не работала на широкую аудиторию. - Метафора «окна с тремя точками» убрана с
/materialy— украшение, которое ничего не объясняло. - Прогон ленты остановлен намеренно. Кредиты Supadata живут до 8 августа, спешить некуда; сначала система тегов и перегенерация, потом новые каналы.
- Локальная Ollama из плана перегенерации выбывает — гипотеза «дело в слабой модели» не подтверждена, шаблон коррелирует с длиной транскрипта, а не с моделью.
5. Что дальше
- Запушить
635169b— дизайн-системы на сайте нет, замер её эффекта пока невозможен. - Разобрать 26 незакоммиченных файлов в рабочем дереве. Правки по 26 файлам висят несохранёнными, авторство внутри сессий не размечено — сначала понять, чьи они, потом коммитить явным списком.
- Тест перегенерации на 14 карточках — команда готова в
СВЯЗЬ.md, запускает владелец с ключом. Критерий: «Оператор…» меньше 3 из 14 и хотя бы пара честных «прямой связи нет». - Словарь тегов, черновик на 40–60 позиций — из нынешних 947 склейкой синонимов и отсечкой единичных. Финальный список утверждает владелец: это его язык.
- Партия 1б дизайн-системы — цвета. Кегли уже на токенах, палитра следующая; заодно проверить
/hydroи превью-картинки на тёмный хардкод.