<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://androman.pro/wp-content/themes/androman/assets/feed.xsl?ver=0.10.2" type="text/xsl"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ANDROMAN.PRO</title>
	<atom:link href="https://androman.pro/feed/" rel="self" type="application/rss+xml" />
	<link>https://androman.pro</link>
	<description>Роман Андриянов — 1С-архитектор. Инженерная практика, открытые ИИ-инструменты, статьи и эксперименты с кодом. · build 0.10.2</description>
	<lastBuildDate>Fri, 30 Oct 2026 16:16:15 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Motivelium: сделай красиво. Теперь чуть левее)</title>
		<link>https://androman.pro/2026/10/30/motivelium-sdelay-krasivo-teper-chut-levee/</link>
					<comments>https://androman.pro/2026/10/30/motivelium-sdelay-krasivo-teper-chut-levee/#respond</comments>
		
		<dc:creator><![CDATA[Androman.pro]]></dc:creator>
		<pubDate>Thu, 29 Oct 2026 21:00:00 +0000</pubDate>
				<category><![CDATA[дев-лог]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[видео]]></category>
		<guid isPermaLink="false">https://androman.pro/2026/10/30/motivelium-sdelay-krasivo-teper-chut-levee/</guid>

					<description><![CDATA[После Гранки — Motivelium: ИИ собирает видео через MCP, а человек смотрит примерку, доводит детали и может всё отменить. Первая бета для Windows.]]></description>
										<content:encoded><![CDATA[<p>После Гранки пора показать ещё одну мастерскую. Называется Motivelium. С ней получилась примерно та же история: хотел доделать ролик, а потом внезапно обсуждаю установщик, английский интерфейс и лицензии на шейдеры. Как я ни берусь за что-то — выходит новый продукт)))</p>
<p>Гранка занимается текстом. Здесь исходный материал — замысел будущего видео: что показать, в каком порядке, где зритель должен засмеяться, а где хотя бы перестать зевать.</p>
<p>Сначала — ролик. Мастерская снимает собственную презентацию, а статья про неё готовится в Гранке. Прекрасный повод снова не закончить ничего вовремя)))</p>
<p><video aria-label="Motivelium: ИИ собирает, ты доводишь — 52 секунды" controls="" playsinline="" preload="metadata" src="https://androman.pro/wp-content/uploads/2026/10/65a2a4ecff26f0d79b88909be0622f27e4d92ab333b1a548df95ba710884c9bd.mp4" style="display:block;width:100%;max-width:100%;height:auto;"></video></p>
<h2>Я хотел попросить ИИ сделать ролик</h2>
<p>Эксперименты с программным видео меня затянули. Просишь ИИ написать анимацию, открываешь результат в браузере, смотришь и объясняешь, что поправить. Можно получить и летающего дракона, и разборное устройство, и буквы, которые собираются из обрезков.</p>
<p>Потом начинаются небольшие уточнения. Заголовок уполз. Камера пролетела сквозь предмет. Бас решил, что он здесь главный. Модель уверена, что всё красиво.</p>
<p>Мне хотелось видеть результат до очередного рендера и иметь возможность самому подвинуть объект. А ещё — чтобы ИИ мог продолжить работу с проектом после моих правок, не переписывая заново весь ролик.</p>
<p>Из этого и вырос Motivelium. Задумка у него AI-first: основную сборку можно поручить агенту. Человек задаёт направление, смотрит примерку и доводит детали в студии.</p>
<h2>Агенту выдали инструменты</h2>
<p>В Motivelium есть MCP. Это подключение, через которое внешний ИИ работает с проектом: создаёт сцены, ищет эффекты, меняет объекты, получает настоящие кадры и готовит варианты правок.</p>
<p>Модель выбирает сам пользователь в своём ИИ-клиенте. Мост не обращается к моей подписке и не знает моих ключей. Во встроенной панели есть отдельный вариант работы с GLM, но для внешнего MCP он не требуется.</p>
<p>На проверке я дал GLM задачу собрать двенадцатисекундный ролик из шаблона. Читать исходники запретили: вся нужная справка должна приходить через MCP.</p>
<p>Он нашёл шаблон, поменял текст и фотографию, добавил появление заголовка, запросил три кадра примерки. Потом применил изменения, проверил отмену и повтор и получил MP4 со звуком и ZIP проекта. Между делом пару раз забыл передать идентификатор проекта. Приложение объяснило, чего не хватает; со второй попытки вспомнил)))</p>
<p><img decoding="async" alt="Редактируемый проект после работы ИИ" src="https://androman.pro/wp-content/uploads/2026/10/1c34a1873a0fe7a05f51399b158047428f8ef0910f918593c2c0e0d6ed68e37d.png"></p>
<p><em>Проект после работы агента. Текст, изображения, камера и эффекты доступны в студии.</em></p>
<p>Это был небольшой проверочный ролик. Художественное руководство я бы ему целиком пока не отдавал: GLM сам заметил, что длинный заголовок заходит на фотографию, и решил оставить. Поэтому смотреть примерку всё равно полезно.</p>
<h2>Потом я пришёл с небольшой правкой</h2>
<p>В студии можно выбрать объект прямо на холсте, передвинуть его, изменить размер, порядок слоёв или текст. Для анимации есть ключи: в одном кадре объект здесь, в другом там. Промежуточное движение рассчитывается между ними.</p>
<p>Правки ИИ сначала живут отдельно. Можно посмотреть предложенный вариант, сравнить его с текущим и применить. Если не понравилось — отменить. Ручные изменения попадают в ту же историю.</p>
<p><img decoding="async" alt="Сравнение двух версий в Motivelium" src="https://androman.pro/wp-content/uploads/2026/10/1c5f6e2c3a20b4a6a6cad67e32f61d20398187f0ce3fe6b77d253f719d01058c.png"></p>
<p><em>У модели своя версия прекрасного. У меня есть сравнение и отмена.</em></p>
<p>Для самого начала есть раскадровка: замысел, ключевые кадры, заметки о камере и звуке. Мы до неё дошли после нескольких роликов, которые бодро анимировали не очень понятную мысль. Теперь стараюсь сначала разобраться, что именно показываем.</p>
<p>В каталогах есть живые превью эффектов, переходов и готовых сочетаний. Можно примерить эффект к объекту, посмотреть его в движении и только потом добавлять в проект. Некоторые приёмы требуют двух сцен или отдельного состояния рендера; приложение берёт эту часть на себя.</p>
<h2>Что уже можно покрутить</h2>
<p>Во встроенных примерах есть разряд в предметной 3D-сцене, движение и морфинг букв, разборка машины и бумажный коллаж. Пример можно просто посмотреть или создать свою копию и разобрать её на части. Шаблоны позволяют быстрее дойти до собственного текста, картинок и музыки.</p>
<p><img decoding="async" alt="Примеры с разными приёмами" src="https://androman.pro/wp-content/uploads/2026/10/52adc2c6ab19cb696ff2af0665c4ee55aaa6727124c083294a6c1e55d1affd3c.png"></p>
<p><em>Буквы, металл, камера и бумага. Всё это можно открыть и поправить.</em></p>
<p>Интерфейс, справка, четыре примера и три шаблона доступны на русском и английском. Есть тёмная тема. Переключение языка меню не переводит ваши надписи в ролике — с ними приложение само ничего не делает.</p>
<p>Готовое видео выгружается в MP4 со звуком. Для продолжения работы на другом компьютере есть ZIP с проектом и ресурсами. Обычные видеоклипы как редактируемые слои пока не импортируются: сейчас я использую мастерскую для анимированных презентаций, заставок и роликов о проектах.</p>
<p>Выложил первую бету — <strong>0.2.0-beta.1</strong>. Для Windows есть установщик и переносимый комплект. Node и библиотеки внутри; Chrome, FFmpeg и FFprobe для экспорта нужно установить отдельно. Проверка компонентов находится в настройках.</p>
<p><a href="https://github.com/andromanpro/motivelium">Исходники Motivelium</a> · <a href="https://github.com/andromanpro/motivelium/releases/tag/v0.2.0-beta.1">Выпуски для Windows</a></p>
<h2>А теперь — руками</h2>
<p>Собрал ещё и практический урок — 4 минуты 52 секунды. На примере студии «УЗЕЛ» показываем задание ИИ через MCP, примерку эффекта, ручные правки и ключи. В конце получаем MP4 и проверяем перенос проекта через ZIP.</p>
<p>Озвучку сделали в два голоса. Пока один объясняет, второй напоминает, что бас тоже иногда надо приструнить)))</p>
<p><video aria-label="Motivelium: практический урок — ИИ собирает, мы доводим, 4 минуты 52 секунды" controls="" playsinline="" preload="metadata" src="https://androman.pro/wp-content/uploads/2026/10/084675964ec66fbc3ba2c6ffb75372f3b6d9cb2bfe8be783ce5345875f93c069.mp4" style="display:block;width:100%;max-width:100%;height:auto;"></video></p>
<p>Статью готовлю в Гранке, видеопрезентацию — в Motivelium. Общий урок тоже готов: от задания ИИ до ручной шлифовки и готового файла.</p>
<p>Осталось не сделать для этого ещё одно приложение)))</p>


<p style="margin-top:1em;font-family:monospace;font-size:0.9em;">→ <a href="https://androman.pro/2026/10/30/motivelium-sdelay-krasivo-teper-chut-levee/">открыть на androman.pro</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://androman.pro/2026/10/30/motivelium-sdelay-krasivo-teper-chut-levee/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://androman.pro/wp-content/uploads/2026/10/65a2a4ecff26f0d79b88909be0622f27e4d92ab333b1a548df95ba710884c9bd.mp4" length="24431972" type="video/mp4" />
<enclosure url="https://androman.pro/wp-content/uploads/2026/10/084675964ec66fbc3ba2c6ffb75372f3b6d9cb2bfe8be783ce5345875f93c069.mp4" length="36541499" type="video/mp4" />

			</item>
		<item>
		<title>Гранка: не трогай мои скобочки</title>
		<link>https://androman.pro/2026/10/27/granka-ne-trogay-moi-skobochki/</link>
					<comments>https://androman.pro/2026/10/27/granka-ne-trogay-moi-skobochki/#respond</comments>
		
		<dc:creator><![CDATA[Androman.pro]]></dc:creator>
		<pubDate>Mon, 26 Oct 2026 21:00:00 +0000</pubDate>
				<category><![CDATA[дев-лог]]></category>
		<guid isPermaLink="false">https://androman.pro/2026/10/27/granka-ne-trogay-moi-skobochki/</guid>

					<description><![CDATA[Как я собрал редактор для собственных статей: замечания ИИ, мои аллергены, приправы текста, история версий и подготовка публикаций.]]></description>
										<content:encoded><![CDATA[<p>Скобочек в текст насыплю, как дед ногтей, а Гранка на меня гонит)))</p>
<p><video aria-label="Гранка: от абзаца до публикации — ролик 33 секунды" controls="" playsinline="" preload="metadata" src="https://androman.pro/wp-content/uploads/2026/10/195939a79493a3e3b8b3e279cd5b509adf7f8331b2c6ed99b4314a89aeb98403.mp4" style="display:block;width:100%;max-width:100%;height:auto;"></video></p>
<p><em>Ролик про Гранку — перед статьёй про Гранку. Внутри ещё будет эта статья)))</em></p>
<p>Гранка — локальный редактор статей с замечаниями ИИ, историей правок и подготовкой публикаций. Я использую её для своих текстов: читаю предложения редактора, принимаю удачные, спорю с остальными. Иногда проще самому переписать предложение, чем ещё раз объяснять машине, что мне в нём не нравится.</p>
<p>Эту статью тоже редактируем в Гранке. На скриншоте ниже — статья про Гранку, а внутри неё ещё один скриншот этой же статьи. Осталось написать статью про то, как я делал скриншоты статьи про Гранку, но давайте уже что-нибудь выпустим — самоудовлетворение затянулось)))</p>
<p><img decoding="async" alt="Статья в Гранке со скриншотом самой себя" src="https://androman.pro/wp-content/uploads/2026/10/6fb5c88d39d64afdf89e4ed9cad68e05bba4135d82b6c2bb129fe056aa25625b.png"></p>
<p><em>Статья про Гранку в Гранке, внутри — ещё один скриншот той же статьи. Один виток рекурсии)))</em></p>
<h2>Мои аллергены</h2>
<p>У кодекса (ИИ-помощника Codex) отдельная любовь к «честности»: «честно про…», «честные ограничения», «хотя бы честно». Эти вводки он умудряется пихать в каждый абзац. Меня уже само слово начинает раздражать. Если у инструмента есть ограничение, напиши, какое. Объявление о честности можно пропустить.</p>
<p>Ещё я прошу убирать декоративные противопоставления вроде «уже в релизе, а не в обещаниях», бесконечные «грабли» в рассказах об ошибках и туманные заголовки. В журнале есть и запрет добавлять идиомы для оживления текста: редактор вставлял обороты, которых я не говорил, а фразы из совместных черновиков потом принимал за мой голос.</p>
<p>Такие вещи я называю аллергенами. Это мои предпочтения, которые я хочу объяснить редактору. Живое «честно говоря» внутри авторской фразы или противопоставление двух реальных вариантов может остаться. Каждое замечание всё равно приходится читать по месту.</p>
<p>Скобки, разговорные фразы и шутки тоже хочется сохранить. Иначе после вычитки получаешь грамотный текст, который сам бы так не написал.</p>
<h2>Как я разбираю правки</h2>
<p>В Гранке замечание привязано к точной цитате. Можно выбрать предложенную замену, написать свою или оставить исходник и объяснить причину отказа. Текст меняется после команды «Применить решения».</p>
<p>Кнопка «В аллергены» добавляет оборот и пояснение в личный журнал. Гранка учитывает эти записи при следующих проверках.</p>
<p>Причины отказа сохраняются. В следующие проверки попадают личные правила и подходящие примеры прошлых решений. Повторяющиеся замечания можно разобрать пакетом.</p>
<p>На проверочном наборе можно сравнить ответы модели с моими прошлыми решениями: сохранить фрагмент, изменить его или избежать уже отвергнутого варианта. Смысл новых замен по-прежнему оцениваю сам.</p>
<p>Правила и примеры попадают в запрос к модели. Её веса при этом не меняются. Результат я проверяю по сравнению версий.</p>
<p>Длинную статью можно разобрать целиком. Гранка сначала собирает карту текста, потом готовит замечания и отдельно их перепроверяет. Так проще заметить, что мысль потерялась между разделами или один и тот же вывод повторяется в трёх местах. Несколько проходов модели всё равно могут дружно ошибиться, так что читать результат приходится мне.</p>
<h2>Иронии — щедро</h2>
<p>Потом у редактора появились приправы: ирония, пошлые шутки, метафоры и аллегории. С дозировкой. Флакон можно перетащить на конкретный абзац; выделение и вся статья тоже доступны. Удачную смесь можно сохранить своим рецептом.</p>
<p>В истории этой статьи уже есть версия «приправы · Пошлые шутки». Четырнадцатая. Мне явно требовался собственный редактор, чтобы наконец организовать этот процесс)))</p>
<p><img decoding="async" alt="Приправы текста в новой тёмной мастерской Гранки" src="https://androman.pro/wp-content/uploads/2026/10/02b55e520aadcaee50dca71e13890b66b223b8977d626bb03d3843e125d93fe0.png"></p>
<p><em>Ирония, пошлые шутки, метафоры и аллегории. Дозировка задаётся отдельно.</em></p>
<p>После обработки появляются варианты к точным цитатам. Я выбираю понравившиеся, при необходимости дописываю свой и применяю решения. Новая версия остаётся в истории вместе с исходной. Налить во все флаконы по максимуму программа позволяет. За последствия пока отвечаю сам.</p>
<h2>Где я это испортил</h2>
<p>Гранка открывает Markdown-файл и создаёт рядом разметку с версиями, замечаниями и решениями. Сохранённые правки живут в этой истории; текущий текст можно скачать отдельным Markdown-файлом. Можно читать оформленный текст, перейти к исходнику или открыть сравнение и увидеть, что именно изменилось.</p>
<p><img decoding="async" alt="Сравнение двух версий учебной статьи" src="https://androman.pro/wp-content/uploads/2026/10/2d029f563fa441e31c64432bcfd9c633341c5e817887b39c457302567999dcdd.png"></p>
<p><em>Сравнение на учебной статье: видно, что добавилось после сохранения.</em></p>
<p>Сохранение создаёт новую версию. В «Истории» можно открыть любое сохранение, сравнить его с другим и вернуть старый текст в работу. При возврате появляется ещё одна версия; более поздние тоже сохраняются. Теперь можно найти, на какой именно «небольшой правке» исчезла нужная фраза, и забрать её обратно.</p>
<p><img decoding="async" alt="История версий на учебной статье" src="https://androman.pro/wp-content/uploads/2026/10/58bdd121207991625af66f382ce0aea4c4b572fb3a74842d1aedd5253c80de1b.png"></p>
<p>Если переключить статью с несохранёнными правками, Гранка предложит сохранить их, перейти без сохранения или остаться. Файл и папку теперь можно выбрать обычными кнопками в библиотеке. До публичного выпуска пришлось доделать и это: ввод полного пути вручную почему-то нравился автору программы больше, чем её пользователю. Даже когда это один человек.</p>
<p>К тексту можно добавлять картинки и обложку, а к выделенному фрагменту — голосовую заметку. Распознавание голоса требует отдельной настройки; для обычной работы с текстом оно не нужно.</p>
<h2>ИИМетр</h2>
<p>ИИМетр сравнивает текст с авторским корпусом — подборкой моих старых текстов. Он сопоставляет длину предложений и абзацев, пунктуацию и частоты служебных слов. Отдельно подсвечивает обороты из своего словаря.</p>
<p>Он не определяет, кто написал статью, и не выдаёт «процент ИИ». Без авторского корпуса итоговой числовой оценки вообще нет. Даже с корпусом результат остаётся поводом перечитать текст: мои старые статьи тоже не обязаны быть образцом хорошего письма.</p>
<h2>Календарь, сайт и телеграм</h2>
<p>В календаре можно разложить материалы по датам и посмотреть, что ещё осталось сделать. Назначенная дата сама по себе ничего не публикует.</p>
<p><img decoding="async" alt="Календарь Гранки на учебном материале" src="https://androman.pro/wp-content/uploads/2026/10/c36da11bac03e629eb21f6c49e4b5bb2d873910bfcf2505b570c7d94b0987d20.png"></p>
<p><em>Календарь на учебном материале. Назначенная дата сама ничего не отправляет.</em></p>
<p>Для своего WordPress я использую перенос через предпросмотр, стейдж и прод. Гранка сохраняет снимок статьи и проверяет переходы между окружениями. Перед обновлением она сверяет страницу: если текст отдельно поменяли в WordPress, сначала нужно разобраться с расхождением.</p>
<p>Свой сайт можно подключить в настройках Гранки. Для одного WordPress достаточно адреса и SSH-доступа с WP-CLI. Мой NAS, стейдж и Git для этого не нужны; промежуточные площадки и копию в репозитории можно включить отдельно.</p>
<p><img decoding="async" alt="Подключение своего WordPress в Гранке" src="https://androman.pro/wp-content/uploads/2026/10/954a5f1eb2085a8cb6e61a32e3fccbe13d78eadb3418de8bd817d699306b1b78.png"></p>
<p><em>Пример для одного сайта. Настройки и доступы у каждого свои.</em></p>
<p>В телеграм можно подготовить короткий анонс с картинками или видео. Вложения переставляются, лишнее убирается до отправки. Есть и режим статьи с медиа между абзацами; у него свой черновик, поэтому короткий анонс сохраняется отдельно.</p>
<p>После отправки через Гранку можно выбрать «Обновить опубликованный пост» и сохранить прежнюю ссылку. «Создать новый» — отдельное действие. Одновременная отправка из двух окон одного профиля блокируется.</p>
<p>Перед отправкой Гранка показывает подготовленный текст и материалы. Сайт и телеграм требуют настройки под свой WordPress, бота и канал. Расставленная в календаре дата ничего сама не отправляет.</p>
<p><img decoding="async" alt="Предпросмотр Telegram на учебной статье" src="https://androman.pro/wp-content/uploads/2026/10/4fdc3fe62ad2e11939f71393925f2c564e7a5d846f19dbe665ea1ce09f48c6e8.png"></p>
<p><em>Учебный предпросмотр Telegram. К анонсу этой статьи подготовлен новый ролик.</em></p>
<p>Эту статью и пост к ней тоже готовлю здесь. Заодно засунул в статью ролик про Гранку. В ролике опять Гранка и эта статья. Кто-нибудь, заберите у меня возможность вкладывать картинки друг в друга)))</p>
<h2>Как запустить</h2>
<p><a href="https://github.com/andromanpro/granka">Гранка лежит на гитхабе</a>. В <a href="https://github.com/andromanpro/granka/releases/tag/v1.4.0">выпуске 1.4.0</a> есть установщик и переносимый архив для Windows 10/11. Python и Codex входят в поставку, отдельно ставить Python и Node.js не нужно.</p>
<p>Тёмная мастерская и скобочки входят в Windows-поставку. В меню есть справка с актуальными картинками — можно сначала посмотреть, куда нажимать, а потом уже нажимать)))</p>
<p>Лицензия MIT: можно пользоваться, дорабатывать и применять в коммерческой работе с сохранением уведомления об авторских правах.</p>
<p>Перед первым публичным выпуском Гранки я посмотрел на номер версии и спросил:</p>
<blockquote>
<p>И почему она 4 версии уже?</p>
</blockquote>
<p>Внутренняя нумерация успела уйти в 4.x, пока я собирался показать редактор людям. Для гитхаба вернули 1.0.0. Теперь можно спокойно начинать с первой версии, имея за плечами несколько четвёртых)</p>
<p>Ставишь программу, открываешь Гранку из «Пуска» и выбираешь <strong>Статьи → Открыть файл…</strong>. Для знакомства в поставке есть учебная статья с готовыми замечаниями. Переносимый архив можно распаковать и запустить через <code>Granka.exe</code>.</p>
<p>Установщик пока без цифровой подписи, поэтому Windows может показать неизвестного издателя. Исходники и контрольные суммы лежат рядом с готовыми файлами. Для запуска из исходников нужна отдельная установка зависимостей; инструкция есть в README.</p>
<p>Редактировать можно без подключения ИИ. Для замечаний модели есть команда «Пуск → Гранка → Войти в ChatGPT». Codex использует доступ твоего аккаунта; сама установка подписку не выдаёт. Отдельно можно настроить OpenRouter со своим ключом и оплатой запросов. При проверке выбранному сервису передаются текст, правила и примеры решений.</p>
<p>Ошибки и неудобства можно приносить в <a href="https://github.com/andromanpro/granka/issues">issues</a>.</p>
<p>Мне самому пора полностью перейти на Гранку. Но я пока по привычке строчу замечания напрямую агенту. Даже этот абзац попросил добавить в чате)))</p>


<p style="margin-top:1em;font-family:monospace;font-size:0.9em;">→ <a href="https://androman.pro/2026/10/27/granka-ne-trogay-moi-skobochki/">открыть на androman.pro</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://androman.pro/2026/10/27/granka-ne-trogay-moi-skobochki/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://androman.pro/wp-content/uploads/2026/10/195939a79493a3e3b8b3e279cd5b509adf7f8331b2c6ed99b4314a89aeb98403.mp4" length="29912133" type="video/mp4" />

			</item>
		<item>
		<title>Месяц без Клода</title>
		<link>https://androman.pro/2026/10/23/mesyats-bez-kloda/</link>
					<comments>https://androman.pro/2026/10/23/mesyats-bez-kloda/#respond</comments>
		
		<dc:creator><![CDATA[Androman.pro]]></dc:creator>
		<pubDate>Thu, 22 Oct 2026 21:00:00 +0000</pubDate>
				<category><![CDATA[жизнь]]></category>
		<category><![CDATA[ИИ-разработка]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[GPT]]></category>
		<category><![CDATA[vibe-coding]]></category>
		<guid isPermaLink="false">https://androman.pro/2026/10/23/mesyats-bez-kloda/</guid>

					<description><![CDATA[25 сентября меня забанили в Клоде. Сначала казалось, что вайбкодерская карьера закончилась. Почти через месяц — ну что ж, вполне жить можно.]]></description>
										<content:encoded><![CDATA[<p>Почти ровно месяц назад, 25 сентября, меня забанили в Клоде. Мигнул VPN, засветилось местоположение — и привет, письмо счастья) Апелляция ничего не дала, что было ожидаемо.</p>
<p><img decoding="async" alt="Окончательный отказ восстановить аккаунт Claude" src="https://androman.pro/wp-content/uploads/2026/10/fd7bb58f35fd9d4060f2c7df4d0cba9d15a24b93a09e6197a1589c4da7998751.png"></p>
<p>С Клодом мы работали долго и плотно. Но стоило мне на секунду показаться без защиты — отношения закончились.</p>
<p>Первая мысль: всё, конец моей вайбкодерской карьере. С начала года я вообще не пишу код руками. Придумываю, что должно получиться, обсуждаю с агентами, проверяю, ругаюсь, переделываю. Клод в этом хозяйстве занимал достаточно большое место, чтобы его внезапное исчезновение испортило мне настроение.</p>
<p>Обидно ещё и потому, что уже привык. Знаешь, чего от него ждать, где нужно уточнить задачу, а где можно оставить работать. Вокруг этого успело вырасти немало привычек. И тут тебе сообщают: всё, доступ закрыт, решение окончательное. Можешь забрать вещи.</p>
<p>Начал метаться в поисках достойного заменителя.</p>
<h2>Зайки не порадовали</h2>
<p>Взял подписку на GLM от заек, Z.AI. Очень уж его хвалили.</p>
<p>По первым ощущениям — на год назад вернулся. Те же тупые отмазки, лень, пропущенные блоки и говнокод. Задачу вроде понял, ответ написал, а потом выясняется, что кусок работы остался у него в воображении. Я прям в уныние впал.</p>
<p>После привычного Клода особенно тяжело снова разбираться, почему помощник бодро отчитался, но до результата так и не дошёл. Начинаешь сомневаться уже в собственной затее: может, я слишком привык к хорошему и теперь всё будет вот так?</p>
<p>Но оставался кодекс. Он у меня и раньше был в работе, просто роли в связке были другие. Во многих вещах он мне нравился меньше Клода, зато качества хватало, чтобы продолжать разработку.</p>
<p>В общем, перестроил процессы. Точнее — сменил роли в своей обвязке. Попробовал Гермеса и DSH, посмотрел, кому какие задачи отдавать. Пришлось заново привыкать к тому, как помощник понимает задачу и где его нужно дожимать.</p>
<p>Ну что ж, вполне жить можно.</p>
<h2>Карьера пока подождёт заканчиваться</h2>
<p>За это время ИИкона продолжила развиваться, публично вышли <a href="https://github.com/andromanpro/granka">Гранка</a> и <a href="https://github.com/andromanpro/make-it-zbs">Make it ZBS</a>, появилась открытая альфа <a href="https://github.com/andromanpro/motivelium">Motivelium</a> — моей среды для создания видео. На сайте вышла <a href="https://androman.pro/2026/10/16/iikona-iz-konnektora-v-sistemu/">статья про ИИкону</a>. Ещё <a href="https://infostart.ru/1c/articles/2585691/">новая статья вышла на Инфостарте</a>, только вперёд её не подняли — так среди февральских и болтается.</p>
<p>Часть этих вещей я начал задолго до бана. Но работа над ними продолжилась, до выпусков дошло. Иронию подготовки этой статьи в собственном редакторе тоже оценил.</p>
<p>Сказать, что ничего не потерял и мгновенно стал счастливее, я не могу. Были переделки и разборы ошибок, от которых хочется выключить комп. Иногда кажется, что уже всё проверили, а потом обычное действие пользователя находит ещё один способ сломать твою программу.</p>
<p>С другой стороны, при Клоде тоже приходилось проверять и переделывать. Просто к его заскокам я уже привык, а к новым ещё приходится подбирать подход.</p>
<p>По готовым результатам сильной просадки я не вижу. Больше всего досталось привычному комфорту. В начале было ощущение, что остался без инструмента, которым уже научился работать, а вокруг предлагают ещё десяток и каждый обещают лучше прежнего. Только мне в этот момент нужно продолжать свои проекты, а знакомиться с очередным помощником уже не очень хочется.</p>
<p>Постепенно отпустило. Кодекс работает, GLM тоже пока не вычеркнул. Разбираюсь, где он полезен, хотя первое впечатление от подписки было так себе. Вайбкодерская карьера, похоже, пока продолжается.</p>
<p>Главное &#8212; не размер инструмента, а умение им пользоваться.</p>
<p>Хотя к инструменту всё равно есть вопросы)</p>
<p>А антропику можно пожелать счастья и скорейшего разорения. За такое отношение к пользователям.</p>


<p style="margin-top:1em;font-family:monospace;font-size:0.9em;">→ <a href="https://androman.pro/2026/10/23/mesyats-bez-kloda/">открыть на androman.pro</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://androman.pro/2026/10/23/mesyats-bez-kloda/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Я всё ещё называю ИИкону коннектором</title>
		<link>https://androman.pro/2026/10/16/iikona-iz-konnektora-v-sistemu/</link>
					<comments>https://androman.pro/2026/10/16/iikona-iz-konnektora-v-sistemu/#respond</comments>
		
		<dc:creator><![CDATA[Androman.pro]]></dc:creator>
		<pubDate>Thu, 15 Oct 2026 21:00:00 +0000</pubDate>
				<category><![CDATA[1С]]></category>
		<category><![CDATA[ИИ]]></category>
		<category><![CDATA[ИИ-агенты]]></category>
		<category><![CDATA[ИИкона]]></category>
		<category><![CDATA[интеграции]]></category>
		<category><![CDATA[разработка]]></category>
		<guid isPermaLink="false">https://androman.pro/2026/10/16/iikona-iz-konnektora-v-sistemu/</guid>

					<description><![CDATA[ИИкона работает с несколькими базами и личными подписками ChatGPT и GLM. Контекст перед отправкой, инструменты, база знаний и расходы в чате 1С.]]></description>
										<content:encoded><![CDATA[<p>Я по привычке всё ещё называю ИИкону коннектором. Между тем у неё уже есть база знаний, инструменты и мониторинг. Проект давно перерос первое название, хотя прежний вызов из своего кода работает как раньше.</p>
<p>Кому лень читать — вот видео на минуту. Дальше — текст, скриншоты и подробности.</p>
<figure class="iikona-video" style="margin:1.5rem 0;">
<div style="position:relative;width:100%;padding-top:56.25%;">
    <iframe src="https://rutube.ru/play/embed/5410b22a5c690c6e4236edd8cdb55184/?p=oqbAy8NsqcSyTbozQpBUXg" title="ИИкона для 1С: знания, инструменты и мониторинг за минуту" loading="lazy" allow="fullscreen; picture-in-picture" allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;"></iframe>
  </div><figcaption>Обзор снят на версии 1.7.1. Новые возможности описаны в тексте ниже. <a href="https://rutube.ru/video/private/5410b22a5c690c6e4236edd8cdb55184/?p=oqbAy8NsqcSyTbozQpBUXg" target="_blank" rel="noopener noreferrer">Открыть видео на RuTube</a>.</figcaption></figure>
<p>Начиналось всё с общего входа к языковым моделям из 1С. Теперь можно спросить эксперта о структуре своей базы, дать ему поиск по инструкциям, собрать повторяющиеся ошибки в дашборд. Внешние агенты тоже могут обращаться к 1С через MCP.</p>
<p>Для первого запроса по-прежнему достаточно расширения и настроенной модели. Вокруг проекта появились Qdrant, LiteLLM, Natasha, Kroki и мосты для внешних инструментов. Всё это подключается по задаче. Необязательной инфраструктуры я, как выяснилось, могу построить сколько угодно.</p>
<h2>Модель может посмотреть, что есть в базе</h2>
<p>С флажком «Использовать инструменты» модель получает дерево метаданных, структуру объекта, сведения о конфигурации и запрос данных на чтение в пределах прав пользователя. Для каждой модели можно выбрать разрешённый набор: например, оставить метаданные и выключить чтение данных. Отдельный сервер для этих четырёх инструментов не нужен.</p>
<p><img decoding="async" alt="Выбор разрешённых инструментов в карточке модели" src="https://androman.pro/wp-content/uploads/2026/10/iikona-model-tools-1-8.png"></p>
<p><em>На учебной модели разрешено только дерево объектов конфигурации.</em></p>
<p>Вот два примера из демонстрационной базы БСП. DeepSeek через OpenRouter сначала проверил, каким реквизитом связаны номенклатура и её виды, какого типа цена и страна происхождения. В ответе — реквизит <code>ВидНоменклатуры</code>, числовая цена и ссылка на справочник стран. На это понадобились два вызова инструментов.</p>
<p><img decoding="async" alt="Эксперт проверяет связь справочников и типы реквизитов в демонстрационной базе" src="https://androman.pro/wp-content/uploads/2026/10/chat-metadata.png"></p>
<p>Потом я попросил посчитать непомеченные элементы трёх справочников. Получились ноль элементов номенклатуры, два вида и одна страна. Числа сверены прямым чтением базы. Причину отсутствия товаров по этим данным определить нельзя — в вопросе я отдельно попросил её не придумывать.</p>
<p><img decoding="async" alt="Эксперт считает элементы справочников: 0, 2 и 1; три вызова инструментов" src="https://androman.pro/wp-content/uploads/2026/10/chat-data.png"></p>
<p>Это снимки настоящего клиента 1С после запросов к модели. На другой базе будут другие числа. Время и расход токенов тоже относятся к этим конкретным обращениям.</p>
<p>Механика здесь такая: модель просит вызвать инструмент, 1С возвращает результат, модель решает, что делать дальше. В запрос включаются выбранные история, вложения и знания эксперта. По умолчанию разбор ограничен пятью раундами и десятью вызовами инструментов; в карточке модели можно задать свои пределы, в том числе объём результата и всего диалога. Большие списки метаданных агент получает частями. Каждое «пусть ещё подумает» превращается в новый запрос.</p>
<p>Если инструмент не смог обратиться к выбранной базе, чат показывает отдельное сообщение с названием источника. Оно остаётся, даже если модель не упомянула отказ. Служебные команды, которые модель ошибочно вернула обычным текстом, не исполняются и не выдаются за успешный ответ.</p>
<p>Для внешнего агента есть отдельный <a href="https://github.com/andromanpro/1c-ai-connector-guide/tree/v1.8.7/mcp-сервер">MCP-сервер</a>. Через него к базе может обратиться клод или другой MCP-клиент. Для подключения настраиваются отдельная учётная запись и права. Встроенный контроль персональных данных ИИконы этот маршрут не охватывает.</p>
<h2>Один чат и несколько баз</h2>
<p>Теперь в чате можно выбрать несколько баз 1С. В центральной ИИконе администратор задаёт подключения и выдаёт доступ пользователям или группам. Для каждого вызова агент выбирает источник из отмеченного списка. Чтение выполняется с правами учётной записи, под которой настроен вход в целевую базу.</p>
<p>Есть служебный вход и личные реквизиты каждого пользователя. Пароли хранятся через БСП и не передаются модели. В подключённых базах нужны расширение ИИконы и публикация её HTTP-сервиса. <a href="https://github.com/andromanpro/1c-ai-connector-guide/tree/v1.8.7/подключения-баз">Порядок настройки</a> вынесен в руководство.</p>
<p><img decoding="async" alt="Карточка подключения к другой базе" src="https://androman.pro/wp-content/uploads/2026/10/iikona-connections-1-8.png"></p>
<p><em>Учебное подключение со служебным входом. Адрес и пользователь относятся к проверочному HTTP-источнику.</em></p>
<h2>А какой текст мы вообще дали модели?</h2>
<p>В чате есть настройки состава запроса: можно исключить историю, знания эксперта или вложения и задать размер истории. На вкладке «Перед отправкой» видны получатель, вопрос, инструкция, сообщения и инструменты — после контроля персональных данных.</p>
<p><img decoding="async" alt="Подготовленный запрос перед отправкой модели" src="https://androman.pro/wp-content/uploads/2026/10/iikona-before-send-1-8.png"></p>
<p><em>Просмотр подготовленного запроса в проверочной базе, без отправки чат-модели.</em></p>
<p>Обычное обновление просмотра не обращается к модели или инструментам. Для предварительного поиска справки есть отдельная команда «Подобрать знания»: она может вызвать модель эмбеддингов. После отправки в журнале диалога можно посмотреть раунды, инструменты, сохранённый контекст после обработки персональных данных, ответы и ошибки. Прежние записи журнала остаются после начала нового диалога.</p>
<p>Прежде чем ругать модель за ответ, полезно посмотреть, какой текст мы ей подложили. Для этого поиск по знаниям можно проверить отдельно, без чата: задать вопрос, увидеть найденные фрагменты, открыть источник.</p>
<p>Сами документы хранятся в 1С. Из них получаются фрагменты и эмбеддинги — числовое представление текста для поиска по смыслу. Найденные фрагменты добавляются к вопросу. Так эксперт получает ваши инструкции и регламенты, на которые может опереться в ответе.</p>
<p>Встроенный поиск работает без отдельного сервиса. Когда знаний много, можно подключить <a href="https://github.com/qdrant/qdrant">Qdrant</a>. В замере от 11 октября на пяти тысячах синтетических векторов путь через 1С занимал около 19 секунд со встроенным поиском и около 25 миллисекунд с Qdrant. В точном режиме первая десятка результатов совпала с полным перебором.</p>
<p>В эти числа не входят получение эмбеддинга вопроса и ответ модели. Качество ответов по настоящим документам и нагрузку множества пользователей этот замер тоже не проверяет. <a href="https://github.com/andromanpro/1c-ai-connector-guide/blob/v1.7.1/rag/measurements-2026-10-11.md">Условия и исходные измерения</a> оставил в руководстве.</p>
<p>Перед внешней отправкой текст проверяется на персональные данные. Можно заменять находки подстановками или останавливать запрос. Можно дополнительно подключить <a href="https://github.com/andromanpro/1c-ai-connector-ner-shim">сервис на Natasha</a>, который ищет имена, организации и адреса. Возможны пропуски и ложные срабатывания; содержимое вложений этот контроль не читает. Для документов отдельно задаётся, куда разрешено отправлять их фрагменты.</p>
<h2>Подключения и расходы</h2>
<p>В ИИконе появились личные подключения ChatGPT и GLM Coding Plan. Для ChatGPT используется вход Sign in with ChatGPT, для GLM — профиль поддерживаемого клиента. История, инструменты и контроль персональных данных остаются в общем маршруте 1С.</p>
<p>Рядом с сервером 1С запускается личный адаптер из комплекта выпуска. Текущий вариант рассчитан на Windows, один компьютер с сервером 1С, текст и результаты инструментов. Подключение персональное; общий кеш для него отключён. <a href="https://github.com/andromanpro/1c-ai-connector-guide/blob/v1.8.7/настройка-моделей/подписочные-подключения.md">Инструкция</a> описывает оба способа входа и их условия.</p>
<p>Для обычных API-подключений можно задать цены входных и выходных токенов и кеша провайдера. Под ответом чата появится оценка в выбранной валюте по всем раундам, включая финальный. Она хранится отдельно от суммы, которую вернул провайдер. Если для расчёта не хватает статистики, сумма не показывается; неизвестная цена подписки не превращается в ноль. Автоматической остановки по денежному бюджету пока нет.</p>
<h2>Ошибка в телеграме — ещё не диагноз</h2>
<p>Мониторинг собирает ошибки журнала регистрации, объединяет повторы и отдаёт их модели на разбор. В дашборде видны повторяющиеся ошибки, координаты в коде и расходы на ИИ. Разборы можно отправлять в телеграм.</p>
<p>В одном из примеров на стенде произошёл сетевой сбой при обращении к Telegram API. Модель предложила проверить доступ в интернет, блокировки и прокси. Причину она не установила; текст ошибки и варианты проверки собрались в одном сообщении.</p>
<p>Чтобы разбирать ошибку с кодом, подключил <a href="https://github.com/Dach-Coin/rlm-tools-bsl">rlm-tools-bsl</a> автора Dach-Coin. Нашёл его в <a href="https://openyellow.org">OpenYellow</a>. Анализатор строит индекс по выгрузке конфигурации и возвращает метод по строке из стека вместе с графом вызовов. Я сделал HTTP-мост к ИИконе. Модели можно передать один метод с окружением, без целого модуля.</p>
<p>Если оставить мониторинг включённым во время тестов, можно получить очень обстоятельный разбор ошибки, которую сам же специально вызвал. С уведомлением в телеграм.</p>
<h2>В моей базе всё работало&hellip;</h2>
<p>С начала 2026 года я вообще не пишу код руками. ИИкону развиваю вместе с агентами: они пишут код, а я придумываю, что должно получиться, и выстраиваю проверки.</p>
<p>Однажды пользователь попробовал поставить расширение в свою базу. Оказалось, в расширение попали три заимствованных объекта из базы разработки. За это отвечаю я. Проверка применимости не пускала его ни на какую базу, кроме демо БСП. Тесты гонялись в той же демо-базе и этого не поймали.</p>
<p>Теперь установка проверяется снаружи базы разработки: скрипт поднимает чистую базу, ставит собранное расширение и проверяет сохранность прежних данных, старый API и доступ с разными правами.</p>
<p>Руководство тоже пришлось сверять с настоящими формами. Пока писал, нашёл и исправил восемь ошибок: от формы эксперта, где нельзя было выбрать категории знаний, до регламентов очистки, которые ни разу не запускались. Каждое «теперь нажмите» заставляет ИИ проверить, что нажать действительно можно.</p>
<p>Для выпуска 1.8.7 прошёл 1081 основной автотест: 1054 серверных и 27 проверок управляемого клиента, без ошибок и пропусков. Дополнительно восемь сценариев выполнили под пятью профилями доступа — все 40 выполнений прошли. SonarQube завершился без открытых замечаний.</p>
<p>Обмен с моделью в регрессионном прогоне проверял локальный HTTP-сервер. История, вложения, несколько раундов с инструментами, отказы источников и восстановление подстановок вошли в проверки. <a href="https://github.com/andromanpro/1c-ai-connector-tests/tree/v1.8.7/verification/1.8.7">Состав прогона, отчёты и границы проверки</a> лежат рядом с тестами.</p>
<p>Проверки запускаются после пачки правок; сборка, тесты и отчёты выпуска привязаны к одному срезу исходников. Живьём я гоняю OpenAI-совместимые подключения; остальные форматы проверены по документации и тестами. Нагрузку в сотни пользователей я пока не проверял.</p>
<p>Самое смешное — сначала просто накидываешь ИИ идеи по ходу разговора, а спустя какое-то время узнаёшь, что у этого занятия уже есть название — рамблинг.</p>
<h2>Что лежит рядом с коннектором</h2>
<p><a href="https://github.com/andromanpro/1c-ai-connector/releases/latest">ИИкона и готовое расширение</a> доступны бесплатно под MIT. <a href="https://github.com/andromanpro/1c-ai-connector-guide">Руководство</a> и <a href="https://github.com/andromanpro/1c-ai-connector-tests">автотесты</a> разложены по отдельным репозиториям. Полная техническая версия с настройками и скриншотами подготовлена для <a href="https://infostart.ru/1c/articles/2585691/">Инфостарта</a>.</p>
<p>Для первого запуска нужны платформа 8.3.27 и новее, БСП 3.1.10 и новее и подключение к модели. Дополнительные сервисы ставятся по мере надобности. Порядок установки и обновления есть в руководстве.</p>
<p>Свой набор инструментов для каждой модели уже настраивается в карточке. Дальше хочу расширить встроенный список. А ещё на базе ИИконы возвращаю к жизни свой старый тренажёр подготовки к сертификации 1С, с которого она, по сути, и началась. Тогда ему не хватало базы знаний. Теперь она есть.</p>


<p style="margin-top:1em;font-family:monospace;font-size:0.9em;">→ <a href="https://androman.pro/2026/10/16/iikona-iz-konnektora-v-sistemu/">открыть на androman.pro</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://androman.pro/2026/10/16/iikona-iz-konnektora-v-sistemu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ИИскра: стартовый набор ИИ-разработки в 1С</title>
		<link>https://androman.pro/2026/09/16/iiskra-startovyy-nabor-ii-razrabotki-v-1s/</link>
					<comments>https://androman.pro/2026/09/16/iiskra-startovyy-nabor-ii-razrabotki-v-1s/#respond</comments>
		
		<dc:creator><![CDATA[Androman.pro]]></dc:creator>
		<pubDate>Tue, 15 Sep 2026 21:00:00 +0000</pubDate>
				<category><![CDATA[1С]]></category>
		<category><![CDATA[ИИ]]></category>
		<category><![CDATA[ИИ-агенты]]></category>
		<category><![CDATA[ИИскра]]></category>
		<category><![CDATA[разработка]]></category>
		<guid isPermaLink="false">https://androman.pro/2026/09/16/iiskra-startovyy-nabor-ii-razrabotki-v-1s/</guid>

					<description><![CDATA[Стартовый набор для работы с ИИ-агентами в 1С: настройка окружения, правила, проверки и границы применения.]]></description>
										<content:encoded><![CDATA[<p>Давно не выпускал статей, хотя накопилось изрядное количество. Вся проблема в ИИ &#8212; черновики статей даже после правок под мой стиль выглядят весьма ИИшно, это немного удручает. Хотя, похоже, такой стиль вполне прижился, потому что инфа первична, а подача отходит на второй план. Ну, в общем, я целый инструмент под себя сделал для причесывания статей, но о нем будет позже, а пока хотел поделиться своими наработками, которые я собираю уже почти год. Имя придумал ИИ &#8212; но не так чтобы оно было особенно оригинальное)</p>
<p>Я выложил на гитхаб <strong>ИИскру</strong> — стартовый набор для 1С-разработчика, который начинает работать с ИИ-агентами. С двумя «И», потому что ИИ.</p>
<p><a href="https://github.com/andromanpro/1c-ai-dev-starterpack">Репозиторий ИИскры на GitHub</a>. MIT, ранняя версия.</p>
<h2>Проблема, из которой всё выросло</h2>
<p>С 1С у опытного разработчика всё знакомо, а с агентом поначалу не совсем понятно. Он что-то поправил, сказал «готово» — и дальше верь на слово. Инструмент напиздунькал — и ты в неловкой ситуации. Каждой новой сессии заново пересказываешь весь контекст.</p>
<p>Я всё это прошёл сам, и не по одному разу. Целый цикл постмортемов (заставлял ИИ описывать свои косяки) — про то, как ИИ снёс мне выгрузку, выдумал репозиторий, отрапортовал, что ошибок нет, хотя при первом же ручном прогоне они вываливались как говно из чемодана фокусника, обещавшего кролика. Из этих историй и выросла ИИскра: контур, в котором ошибку агента ловят до приёмки.</p>
<p><img decoding="async" alt="Робот-фокусник объявляет «Готово», а из чемодана сыплются баги. Кролик тоже не впечатлён." src="https://androman.pro/wp-content/uploads/2026/09/6dfc9c65dda959f9eab574c23da7d98d9d73c66ac4093ef4d066dafd85ede7dc.png"></p>
<h2>Что это за херня?</h2>
<p>Внутри — сценарии установки контура (агент исполняет их сам по команде «настрой окружение»), правила для агента, стенд приёмки, шаблоны, навыки и <a href="https://github.com/andromanpro/1c-ai-dev-starterpack/blob/main/docs/README.md">вики для человека</a>. <a href="https://github.com/andromanpro/1c-ai-dev-starterpack/blob/main/docs/%D0%B1%D1%8B%D1%81%D1%82%D1%80%D1%8B%D0%B9-%D1%81%D1%82%D0%B0%D1%80%D1%82.md">План старта</a>: за 15 минут подключить агента и выполнить первую безопасную задачу — анализ, без правок. За час-полтора — внести первое проверенное изменение. За неделю — наладить свой повседневный цикл.</p>
<p>Это не библиотека операций над файлами 1С — выгрузки, формы и макеты берутся из <a href="https://github.com/andromanpro/1c-ai-dev-starterpack/blob/main/docs/%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA-%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2.md">соседних проектов</a>, на них есть ссылки. ИИскра отвечает на два других вопроса: с чего начать и как убедиться, что агент не соврал.</p>
<p>Первая задача — всегда анализ, без правок. Потому что правки без анализа — это прямой путь в ад!</p>
<h2>Три принципа, на которых оно стоит</h2>
<p><strong>Инструмент, который врёт, — это задача, а не препятствие.</strong> Дефект инструмента чиним через ИИ прямо в исходнике и отдаём исправление в исходный проект, а не строим костыль вокруг. Я так живу с <a href="https://github.com/andromanpro/codepilot1c-edt">codepilot</a>: он баговый — я его чиню тем же ИИ, которым пилю 1С, пересобираю, ставлю. </p>
<p><strong>Проверка вынесена из агента наружу.</strong> Три способа проверки: вторая модель, автоматика (тесты, АПК, Sonar) и глаза человека в тестовой базе. Правило, которое надо помнить, ненадёжно — надёжен шлагбаум, который срабатывает до действия. Память дырявая у обоих.</p>
<p><img decoding="async" alt="После разрешения автора агент вносит изменение. Результат проверяют вторая модель, автоматика и человек; дефект возвращает работу на исправление." src="https://androman.pro/wp-content/uploads/2026/09/148f79d587fb33390d96bd1e03f3b5734e62d3065e1f03bbad3b3f7b91b5b6e6.png"></p>
<p><strong>Контекст живёт в файлах.</strong> Заготовки для начала сессий, реестры, правила. Поэтому рабочее сообщение агенту сжимается до «путь + продолжаем» или «цитата + давай», а не до пересказа проекта на двадцать строк.</p>
<p><img decoding="async" alt="Программист снова передаёт папку проекта агенту с золотой рыбкой вместо памяти." src="https://androman.pro/wp-content/uploads/2026/09/2b6a83b472cfd2daf0fcef8c5fcd15a215a2e2f94f3a20f0e0907625062a2df2.png"></p>
<p><em>Новая сессия. Знакомимся с проектом. Опять.</em></p>
<h2>Чем оно отличается от соседей</h2>
<p>Наборы правил для 1С-агентов уже есть, и есть хорошие — я их читал, когда собирал свой. Но там правила: как писать код, как оформлять. Я собрал другое — <strong>приёмку и шлагбаумы</strong>: стенда с намеренно битым модулем, проверок на заведомо ошибочных примерах и испытаний моделей я у соседей не нашёл.</p>
<p>В ИИскре <a href="https://github.com/andromanpro/1c-ai-dev-starterpack/tree/main/%D1%81%D1%82%D0%B5%D0%BD%D0%B4">стенд</a> — это модуль с заложенными дефектами и проверка с самотестом. Пока дефекты не исправлены, проверка обязана выдавать ошибку. Есть методика, чтобы проверить, подходит ли модель для этого контура. По ней я испытал Haiku и DeepSeek, <a href="https://github.com/andromanpro/1c-ai-dev-starterpack/tree/main/%D0%B8%D1%81%D0%BF%D1%8B%D1%82%D0%B0%D0%BD%D0%B8%D1%8F-%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B5%D0%B9">протоколы</a> — в наборе. Если у тебя не флагман, есть отдельный профиль «слабая модель». И <a href="https://github.com/andromanpro/1c-ai-dev-starterpack/blob/main/docs/%D0%BA%D0%B0%D1%80%D1%82%D0%BE%D1%87%D0%BA%D0%B8-%D0%B4%D0%B5%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B9.md">карточки типичных ошибок</a>: антипаттерн → симптомы → шлагбаум, со ссылками на проверки из набора.</p>
<p>И это не гарантия — внешний аудит уже нашёл у меня проверку, которую можно было обойти вложенным циклом: она проверяла структуру кода, а не его смысл. Починил. Так что сами проверки тоже приходится проверять — иначе на исправление их ошибок потом уйдёт куча времени.</p>
<p><img decoding="async" alt="На модуле с заложенными дефектами проверка должна найти ошибку, а после исправления — пройти. Зелёный результат на сломанном модуле означает пропуск дефекта." src="https://androman.pro/wp-content/uploads/2026/09/742b095935330658e89c65adc5d131f7f91f79a58c2ec3a245e0588859e434d3.png"></p>
<h2>Когда НЕ надо брать</h2>
<ul>
<li>Хочешь полный автопилот — не сюда. Набор держится на подтверждениях человека: первая задача анализ, правки после «да», продуктив запрещён правилом. Агенту, который сам решает и сам коммитит, ИИскра будет мешать на каждом шаге.</li>
<li>Закрытый контур без внешней модели — тоже мимо. Нужна агентская среда с подпиской или ключом.</li>
<li>Нужен полный контур на другой ОС — не сюда. Быстрый старт кроссплатформенный, но полный контур (EDT, codepilot, проверки) написан под винду.</li>
</ul>
<p>Главная яма новичка — начать в обычном чате. Нужна среда, где агент реально работает с файлами проекта — клод-код (в том числе внутри Claude Desktop), Cursor и подобные. Обычное окно чата не видит файлы твоего проекта: новичок вставляет туда README, получает пересказ вместо работающего контура — и решает, что набор не работает.</p>
<h2>Что дальше</h2>
<p>Статус — ранняя версия. Собрано и проверено мной и агентами, читательской обкатки ещё не было. Споткнулись, не сошлось, непонятно — <a href="https://github.com/andromanpro/1c-ai-dev-starterpack/issues">заводите issue</a>: это ровно та обратная связь, которой сейчас не хватает.</p>
<p>Берите, ломайте, пишите, что не так.</p>


<p style="margin-top:1em;font-family:monospace;font-size:0.9em;">→ <a href="https://androman.pro/2026/09/16/iiskra-startovyy-nabor-ii-razrabotki-v-1s/">открыть на androman.pro</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://androman.pro/2026/09/16/iiskra-startovyy-nabor-ii-razrabotki-v-1s/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Светофор вайбкодинга</title>
		<link>https://androman.pro/2026/07/01/svetofor-vaibkodinga/</link>
					<comments>https://androman.pro/2026/07/01/svetofor-vaibkodinga/#respond</comments>
		
		<dc:creator><![CDATA[Androman.pro]]></dc:creator>
		<pubDate>Tue, 30 Jun 2026 21:00:00 +0000</pubDate>
				<category><![CDATA[дев-лог]]></category>
		<category><![CDATA[ИИ-разработка]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[GyverLamp]]></category>
		<category><![CDATA[vibe-coding]]></category>
		<category><![CDATA[WLED]]></category>
		<category><![CDATA[хард-дебаг]]></category>
		<guid isPermaLink="false">https://androman.pro/2026/07/01/svetofor-vaibkodinga/</guid>

					<description><![CDATA[Жёлтый — значит клод упёрся и ждёт меня. Можно отвести взгляд от терминала: лампа сама позовёт, когда я нужен.]]></description>
										<content:encoded><![CDATA[<p>Накопилось много чего для публикации. Но я всё откладывал, потому что подозреваю, что публика ждёт от меня проектов на 1С, например новый релиз ИИконы, поэтому хотел закончить её. Но от 1С меня уже тошнит, хватает задач и на работе, поэтому отвлекаюсь прокрастинацией, то есть побочными проектами для души. Недавно посмотрел, как чувак сделал реальный светофор сбоку экрана, который показывает текущий статус работы ИИ. Подумал — чем я хуже, полезная же вещь, тем более у меня завалялась лампа Гайвера — прикольная штука, если её включать) Но я её больше года не включал — в общем, решил приобщить её к своей работе&hellip;</p>
<h2>Главный цвет — тот, который зовёт</h2>
<p>На словах проект звучит почти глупо: лампа меняет цвет, когда клод-код что-то делает. Ну да, ещё одна мигалка на столе, спасибо, очень не хватало.</p>
<p>Но смысл оказался не в том, что синий означает работу.</p>
<p>Смысл в <strong>жёлтом</strong>.</p>
<p>Жёлтый — это когда я нужен. Клод просит разрешение на команду или задаёт вопрос и стоит. Не просто красиво светится — буквально зовёт меня обратно.</p>
<p>Для меня это важнее, чем кажется. Я могу отвернуться от терминала, залезть в другую задачу, провалиться в свой 1С-шный колодец, и лампа боковым зрением скажет: Роман, подойди, без тебя дальше не поедем.</p>
<p>Раскладка получилась такая: синий — агент копает, жёлтый — ждёт меня, зелёный — затих и можно не смотреть, красный — что-то умерло.</p>
<p><img decoding="async" alt="Лампа в работе: синий → жёлтый → зелёный" src="https://androman.pro/wp-content/uploads/2026/07/lampa-status-colors.gif"></p>
<p>Технически там вообще без магии. Клод-код умеет дёргать хуки на событиях. Хук запускает маленький Python-скрипт, тот отправляет один HTTP-запрос в лампу и заканчивает работу.</p>
<p>Никакой вечной службы рядом я не держал. Хватило команды, которая просыпается на секунду.</p>
<h2>Мне нужен был светофор, а не дискотека</h2>
<p>Сначала я полез смотреть, что вообще можно залить в лампу Гайвера.</p>
<p>Родные и околородные прошивки там бодрые: эффекты, будильники, рассветы, огоньки, вся эта красота для нормальных людей. Проблема в том, что мне не нужна красота. Мне нужен тупой цвет по сети.</p>
<p>В гайверовских форках я не нашёл удобного способа командовать ровным цветом снаружи. Может, он там где-то и был, но после нескольких заходов я понял, что опять иду чинить не свою задачу.</p>
<p>Взял WLED.</p>
<p>Он шьётся из браузера, умеет пресеты, нормально принимает команды по HTTP и не делает вид, что лампа обязательно должна изображать северное сияние. Для моего светофора этого хватало.</p>
<p>Дальше началась возня с кабелями.</p>
<h2>Micro-USB как проверка характера</h2>
<p>Я воткнул лампу в компьютер. COM-порт не появился.</p>
<p>И тут была не одна причина, а сразу две. Очень удобно, когда железо не просто ломается, а устраивает тебе маленький квест.</p>
<p>Первая — кабели. Воткнул один, поменял на второй — оба «только зарядка»: с виду нормальные micro-USB, а внутри нет линий данных. Подошёл только третий. Таких кабелей у меня хватает, чтобы убить вечер, но недостаточно, чтобы сразу понять подвох.</p>
<p>Вторая — мост CP2102. Windows сама драйвер не поставила, поэтому даже с рабочим кабелем счастья сразу не случилось. Поставил руками — порт появился.</p>
<p>Вот так и выглядит хард-дебаг без романтики: пара врущих кабелей и не вставший драйвер. Прошивка в этот момент вообще ни при чём.</p>
<h2>Роутер был слишком умный</h2>
<p>WLED прошился. Лампа подняла свою точку доступа. Я скормил ей домашний WiFi — и она не вошла в сеть.</p>
<p>Клод бодро начал копать в сторону «ты, наверное, выбрал не ту сеть». А у меня где-то в памяти чесалось другое.</p>
<blockquote>
<p>вроде бы я читал что лучше разделить, по-моему именно в этом ошибка</p>
</blockquote>
<p>И да, тут я оказался прав.</p>
<p>ESP8266 умеет только 2.4 ГГц <code>b/g/n</code>. А Redmi у меня держал 2.4 ГГц в Wi-Fi 6, то есть <code>ax</code>, плюс 2.4 и 5 ГГц жили под одним именем через band-steering. Для современных устройств удобно. Для старого чипа — каша, в которой он просто молчит.</p>
<p>Разделил диапазоны. Включил у Xiaomi «режим совместимости Wi-Fi 5» — по факту он гасит <code>ax</code>. После этого 2.4 стала обычной <code>802.11n</code>, и лампа зашла в сеть с первого раза.</p>
<p>Я угадал, а клод копал не туда. Не удержался, потребовал признания:</p>
<blockquote>
<p>ну вот скажи мне «ты как всегда прав»))) а я тебе же говорил)</p>
</blockquote>
<h2>Пины не надо угадывать</h2>
<p>После WLED всплыла сенсорная кнопка на макушке. Лампа физически её имела, но прошивка не знала, где она висит.</p>
<p>Можно было тыкать пины наугад или лезть смотреть на самой плате, куда идёт провод. Но проще оказалось открыть исходник Гайвера на гитхабе и прочитать.</p>
<p>Там лежало <code>BTN_PIN D2</code>. Заодно там же нашлись параметры матрицы: 16×16, GRB, зигзаг.</p>
<h2>Зелёный оказался болтуном</h2>
<p>Когда лампа уже светилась, я повесил хуки клод-кода на пресеты и решил, что дело почти закрыто.</p>
<p>Потом запустил агента на фоновую работу: клод думает, а лампа зелёная.</p>
<blockquote>
<p>вот ты сейчас думаешь, а лампа зелёная — что-то не так работает</p>
</blockquote>
<p>Вот тут стало ясно, что цветом по событию не отделаешься.</p>
<p>Я сначала повесил зелёный на <code>Stop</code>. Звучит логично: ход закончился, значит можно зеленеть. Только у клод-кода <code>Stop</code> — это не «всё готово». Это конец текущего хода. Агент мог отдать работу в фон, сам вернуться в ожидание, а лампа уже сообщала мне: расслабься, всё спокойно.</p>
<p>Враньё.</p>
<p>Я убрал <code>Stop</code> из зелёного сценария. Теперь зелёный приходит от простоя: отдельное событие срабатывает примерно после минуты тишины, когда сессия реально не дёргается и не ждёт моего ответа.</p>
<p>Да, зелёный стал не мгновенным. Зато он начал означать нормальную вещь: можно не смотреть — сессия затихла и меня не дёргает.</p>
<h2>Одна лампа, много желающих</h2>
<p>Потом я сам себе усложнил жизнь, потому что гоняю несколько сессий клод-кода одновременно.</p>
<p>Одна сессия ждёт моего разрешения и просит жёлтый. Вторая в этот момент работает и ставит синий. Если просто слать цвета в лампу, побеждает последний запрос. А последний запрос — не всегда самый важный.</p>
<p>Пропустить синий не страшно. Пропустить жёлтый — это весь смысл проекта выбросить.</p>
<p>Я сделал арбитра. Лампа больше не верит каждой сессии по отдельности, а смотрит на общее состояние. Если хоть одна сессия ждёт меня, жёлтый залипает, пока я её не разблокирую. Синий или зелёный из другой вкладки его не перекрасят.</p>
<p>Поймал это почти сразу, вживую. Смотрю на лампу, внутренне уже начинаю ругаться, потом сам себя останавливаю:</p>
<blockquote>
<p>а не, я вижу, есть активная сессия</p>
</blockquote>
<p>И да, лампа была права. Во второй сессии клод ещё работал.</p>
<p>Обидно: железка следит за сессиями внимательнее меня.</p>
<h2>Аудит ударил туда, где смешнее всего</h2>
<p>Когда репозиторий был уже более-менее собран, я отдал его на ИИ-аудит. Пять агентов под разными углами: код, безопасность, документация — каждый своё.</p>
<p>И четыре из пяти независимо ткнули в одно и то же.</p>
<p>В публичном репозитории лежал ровно тот баг, который я у себя уже починил: <code>Stop → зелёный</code>.</p>
<p>То самое ложное «готово». То самое место, где лампа врала, пока клод ещё работал. У меня на столе это уже было исправлено, а в README и примерах конфига — нет.</p>
<p>Чинил живой экземпляр, а публиковал по памяти. Тупо.</p>
<p>Теперь перед публикацией просто сверяю репо с тем, что реально крутится у меня на столе.</p>
<p>Заодно аудит поймал более тихую мину. <code>.gitignore</code> в публичном репо не закрывал мой локальный файл с реальным IP и заметками. До утечки не дошло, но шёл я к этому уверенно: ещё один ленивый <code>git add</code>, и привет.</p>
<p>Исправил. Хорошо, что аудит это поймал.</p>
<h2>Кто кого тут заменил</h2>
<p>Код и инструкция лежат тут: <a href="https://github.com/andromanpro/claude-code-status-lamp">github.com/andromanpro/claude-code-status-lamp</a>.</p>
<p>На столе теперь стоит лампа, которая знает, когда я нужен. Маленький антигиперфокусный прибор: можно отвести взгляд от терминала и не бояться, что агент тихо ждёт разрешения уже двадцать минут.</p>
<p>Кода я не написал ни строчки — уже полгода за меня это делает ИИ. Да и всю отладку разрулила машина, от драйвера до ложного зелёного.</p>
<p>Мне осталось перебрать три кабеля руками и держать одну чёткую цель, пока лампа не заработает так, как я задумал.</p>
<p>Кто кого заменил — каждый решит сам.</p>
<p>P.S. И да, этот пост он тоже написал сам. Я только вычёркивал строчки, где текст звучал слишком по-ИИшному)</p>


<p style="margin-top:1em;font-family:monospace;font-size:0.9em;">→ <a href="https://androman.pro/2026/07/01/svetofor-vaibkodinga/">открыть на androman.pro</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://androman.pro/2026/07/01/svetofor-vaibkodinga/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Я хотел CI для тестов 1С. Получил шесть граблей и одну DeepSeek-галлюцинацию</title>
		<link>https://androman.pro/2026/05/14/ci-1c-za-den/</link>
					<comments>https://androman.pro/2026/05/14/ci-1c-za-den/#respond</comments>
		
		<dc:creator><![CDATA[Androman.pro]]></dc:creator>
		<pubDate>Wed, 13 May 2026 21:00:00 +0000</pubDate>
				<category><![CDATA[1С]]></category>
		<category><![CDATA[дев-лог]]></category>
		<category><![CDATA[ИИ-разработка]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Allure]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[Gitea]]></category>
		<category><![CDATA[YAxUnit]]></category>
		<guid isPermaLink="false">https://androman.pro/2026/05/14/ci-1c-za-den/</guid>

					<description><![CDATA[За вечер собрал автоматический прогон для 72 тестов 1С — Gitea Actions, Allure, Telegram. Расскажу про шесть граблей и одну галлюцинацию DeepSeek.]]></description>
										<content:encoded><![CDATA[<p>Заметил, что общаясь с Клодом и другими моделями, перенимая их лексикон, всё труднее общаться с живыми людьми. То есть говорить нормальными человеческими фразами, а не промптами, напичканными профессиональным жаргоном. ИИ сильно ускоряет мою производительность, но цена этому — нарастающая асоциальность.</p>
<p>С другой стороны это похоже на ещё одну игру в жанре «ИТ-стратегия», которую я так хочу пройти. Не знаю, какие уровни будут дальше, но вчера я, похоже, взял ещё один уровень. Наконец-то разобрался с одним из элементов CI/CD — автотестами и графическими отчётами к ним.</p>
<p>Ниже в основном творчество Клода, я попросил его писать попроще, потому что для меня тоже многие слова не то чтобы каждый день на языке. У меня теперь разработка так устроена — в основном это приключения на вечер в стиле Рика и Морти, на 20 минут вошли и вышли, которые перетекают в очередную эпопею. Я не проходил курсов, не считаю каждый токен, предварительно выстраивая всю архитектуру на бумажке — я просто чётко (а иногда не очень) формулирую свою задачу и контролирую, чтобы в процессе реализации Клод не ушёл в очень уж густые дебри.</p>
<p>А ещё он меня похвалил, когда кружил вокруг одной проблемы около часа, перепробовал всё и пытался меня отговорить от фичи. Я ему сказал, что не привык сдаваться, и дал небольшую подсказку — через минуту готовое решение было у меня на экране. Никогда бы не подумал, что буду хвалиться тем, что меня похвалила машина.</p>
<hr>
<p>У меня в <a href="https://github.com/andromanpro/1c-ai-connector">ИИконе</a> — это открытое расширение к 1С для интеграции с LLM, над которым плотно сижу с весны — 72 теста YAxUnit. Прогон на полминуты руками, считаю прошедшие и упавшие глазами по длинному JSON. К утру следующего дня вместо этого работал зелёный автопрогон по каждому коммиту в Gitea, дашборд Allure на NAS с историей и Telegram-бот, который ругается, когда тесты падают.</p>
<p>Финальная картинка: <strong>72/72 PASSED, около 29 секунд</strong> от коммита до отчёта в Allure.</p>
<p>По дороге наступил на шесть граблей и одну галлюцинацию DeepSeek.</p>
<h2>Что было до</h2>
<p>Тесты разнесены по 14 общим модулям. YAxUnit умеет писать отчёт в формате JUnit XML — а это как английский для систем прогона: понимают почти все.</p>
<p>До этого прогон выглядел так. Я открывал Claude Code, говорил «прогони тесты». Запускался MCP-инструмент <code>run_module_tests</code>, который под капотом дёргает <code>1cv8.exe ENTERPRISE /C "RunUnitTests=config.json"</code>. На выходе — JSON, в нём список модулей, для каждого — список тестов с результатами.</p>
<p>Я смотрел на JSON и решал, доволен ли я.</p>
<p>Иногда — открывал HTML-отчёт, который YAxUnit любезно генерирует рядом. Иногда — нет. Часто — забывал, что прогонял утром, и не помнил, был ли тогда красный или зелёный.</p>
<p>Не то чтобы это было больно. Просто очевидно бестолково, если задумываться. <strong>Нет истории прогонов. Нет графика по неделям. Нет процента успешных тестов в динамике.</strong> Каждый прогон — снимок, который я тут же забываю.</p>
<p>И ещё — задним числом я не помнил, <strong>что я последний раз сломал</strong>. Если сегодня 70 из 72, а вчера было 72 из 72 — где регрессия? Какой тест начал падать? Когда? Чтобы это понимать, надо вести историю. А чтобы вести историю — надо чтобы прогон жил не в моей голове.</p>
<p>Вот, собственно, и решил.</p>
<h2>Из чего собирал</h2>
<p>Я собрал такой зоопарк:</p>
<ul>
<li><strong>Gitea</strong> на NAS. Простой git-сервер, лёгкая система автопрогонов Gitea Actions внутри.</li>
<li><strong>act_runner</strong> под Windows. Это исполнитель шагов, который умеет крутиться где угодно. У меня — на ноуте, потому что 1С живёт там же.</li>
<li><strong>vanessa-runner</strong> (vrunner). Обвязка для запуска <code>1cv8.exe</code> с человеческим лицом. Умеет YAxUnit, BDD, и кучу другого.</li>
<li><strong>YAxUnit kernel</strong> — собственно тестовый раннер для 1С. Пишет JUnit XML.</li>
<li><strong>Allure server</strong> на NAS. Тот самый Docker-контейнер от <code>frankescobar/allure-docker-service</code>. История прогонов, тренды, графики.</li>
<li><strong>Прометей + Графана + Алертменеджер + Telegram-бот</strong>. Понятно зачем — чтобы когда что-то упало, я узнал об этом из телефона, а не из размышлений «а как там у меня тесты».</li>
</ul>
<p>Вот как это бегает по прямой:</p>
<p><img decoding="async" alt="Стек прогона: коммит в Gitea → Gitea Actions → act_runner на Windows → vrunner → 1cv8.exe + YAxUnit → JUnit XML → upload-to-allure.py → Allure на NAS → Prometheus/Grafana/Alertmanager → Telegram bot" src="https://androman.pro/wp-content/uploads/2026/05/ci-1c-stack-diagram.png"></p>
<p>Всё локальное. Никаких облаков, никаких счётчиков минут на чужих исполнителях. У меня дома NAS, у меня ноут, у NAS — Docker, у ноута — 1С. Этого достаточно.</p>
<h2>Что в итоге за вечер</h2>
<p>За вечер прошёл семь этапов: включил Gitea Actions, поднял Windows-исполнитель, подключил прогон через <code>vrunner</code>, перенёс исполнитель в службу, поднял Allure на NAS, написал переводчик JUnit XML в формат Allure, сверху прикрутил Prometheus с Telegram-ботом. Подробности — в граблях ниже, пошаговый туториал — в <a href="https://github.com/andromanpro/onec-yaxunit-ci-template">README шаблона</a>.</p>
<p>Получилось — коммит в репо → через минуту в Allure лежит свежий отчёт, в Grafana прирастают метрики, в Telegram — тишина, пока зелёное.</p>
<p>А теперь грабли. По штукам.</p>
<h2>Грабля 1 — кириллица в пользователе</h2>
<p>В 1С база лежит файловая, пользователь — «Администратор», пароль — пустой. Так настроено лет десять и до сегодня не мешало.</p>
<p>Запускаю прогон через <code>vrunner</code>. В консоли:</p>
<pre class="highlight"><code>Пользователь ИБ не идентифицирован
</code></pre>
<p>Код выхода 1, прогон умирает за полторы секунды.</p>
<p>Грешу на vrunner. Грешу на YAxUnit. Грешу на конфиг. Перепробовал три варианта параметров, четыре — не помогает.</p>
<p>Запускаю ту же команду напрямую, без vrunner:</p>
<pre class="highlight"><code class="language-bash">&quot;C:/Program Files/1cv8/8.3.27.1989/bin/1cv8.exe&quot; ENTERPRISE \
  /IBConnectionString &quot;File='F:/...'&quot; \
  /N &quot;Администратор&quot; /P &quot;&quot; /C &quot;RunUnitTests=...&quot;
</code></pre>
<p>Тот же ответ. Та же полторы секунды.</p>
<p>Меняю пользователя в базе на латинского <code>mcp-client</code>, пароль <code>12345</code>. Запускаю.</p>
<p>Зелёный прогон.</p>
<p>Что произошло. Похоже, где-то в цепочке запуска <code>1cv8.exe</code> через PowerShell / vrunner / Python всплывает однобайтная кодировка — и кириллический <code>Администратор</code> теряется при преобразовании. Для 1С такого пользователя в базе просто нет, дальше падение.</p>
<p>Хочется сказать «1С виновата». Но реально — это болезнь почти любого <code>.exe</code> старше десяти лет, который не научили читать аргументы как Unicode. PowerShell тут просто прокладка.</p>
<p>Лечение скучное и работает на 100%: <strong>в пользователе для автопрогонов не должно быть кириллицы</strong>. Создаёшь в базе пользователя <code>mcp-client</code> или <code>ci-user</code>, выдаёшь ему права (для тестов — полные, не жалко), и в шагах прогона ходишь под ним.</p>
<p>Лечение для себя: я держу кириллического «Администратора» как основного для работы руками и латинского <code>mcp-client</code> для автопрогонов. Они не мешают друг другу.</p>
<p><strong>Самое смешное:</strong> за этот вечер я потерял на этой грабле минут сорок. Через две недели после этого, копаясь в старых заметках по статьям, нашёл собственную запись от 6 мая: «Codex решил эту проблему. Описал в инструкциях и в CLAUDE.md. Через латинского пользователя.» Прошлый я знал. Текущий я забыл и пошёл по тем же граблям. И понял, почему есть отдельный шаг во всех моих инструкциях — «<strong>первым делом загляни в свою папку наработок</strong>».</p>
<h2>Грабля 2 — права запуска скриптов под LocalSystem</h2>
<p>Окей, прогон работает. Тесты зелёные. Открыт терминал, в нём крутится <code>act_runner.exe</code>. Если я закрою терминал — исполнитель умрёт, и коммит в Gitea не подхватится.</p>
<p>Надо поднять исполнитель как Windows-службу, чтобы он жил вечно.</p>
<p>Беру WinSW (это маленькая обёртка для запуска чего угодно как службы), регистрирую исполнитель под аккаунтом LocalSystem, стартую. Коммит в репо. Шаг 1 — пять секунд. Падает.</p>
<p>В логах:</p>
<pre class="highlight"><code>PSSecurityException: UnauthorizedAccess
File ...\0.ps1 cannot be loaded because running scripts is disabled
on this system. ExecutionPolicy: Restricted
</code></pre>
<p>Ставлю права запуска на <code>RemoteSigned</code> через групповую политику. Перезапускаю. То же самое.</p>
<p>Ставлю <code>Set-ExecutionPolicy -Scope Process Bypass</code> первой командой в скрипте. То же самое.</p>
<p>Что-то тут странное.</p>
<p>Открываю как Gitea на самом деле запускает шаг PowerShell:</p>
<pre class="highlight"><code>powershell -command . '0.ps1'
</code></pre>
<p>Видите эту <strong>точку</strong> перед <code>'0.ps1'</code>? PowerShell это называет «загрузить в текущую сессию». Это означает: проверка политики запуска происходит <strong>до</strong> того, как тело скрипта начнёт выполняться. То есть мой <code>Set-ExecutionPolicy</code> внутри <code>0.ps1</code> физически не успевает сработать. Скрипт даже не запускается.</p>
<p>Нашёл лечение — <code>shell: cmd</code> плюс явный вызов <code>powershell -ExecutionPolicy Bypass -File</code>:</p>
<pre class="highlight"><code class="language-yaml">- name: Run smoke
  shell: cmd
  run: powershell -ExecutionPolicy Bypass -File run-yaxunit-smoke.ps1
</code></pre>
<p>Это уже не загрузка в текущую сессию — это запуск отдельного PowerShell-процесса с уже выставленной политикой. Работает. Без UAC, без правки реестра, без правки локальной групповой политики на всех компах.</p>
<p>Запускаю. Падаем на следующем шаге:</p>
<pre class="highlight"><code>'oscript' is not recognized as an internal or external command
</code></pre>
<h2>Грабля 3 — PATH потерял пользовательскую часть</h2>
<p>Это уже сцепка к предыдущему. LocalSystem видит <strong>машинную</strong> часть PATH. А <code>oscript.exe</code> я ставил через ovm (это менеджер версий для OneScript). ovm кладёт всё в <code>C:/Users/&lt;user&gt;/AppData/Local/ovm/current/bin</code> — то есть в <strong>пользовательскую</strong> часть PATH.</p>
<p>Запускаю под собой — работает. Запускаю под LocalSystem — <code>oscript</code> не найден.</p>
<p>Решений два. Первое — добавить путь от ovm в машинную часть PATH. Так нельзя, потому что я там ставил конкретно локально, под себя, и не хочу делать это глобальным.</p>
<p>Второе — расширить <code>$env:Path</code> в скрипте-обёртке, явно ткнув в нужную папку:</p>
<pre class="highlight"><code class="language-powershell">$VrunnerExe = &quot;C:/Users/&lt;user&gt;/AppData/Local/ovm/current/bin/oscript.exe&quot;
$env:Path = &quot;$(Split-Path -Parent $VrunnerExe);$env:Path&quot;
</code></pre>
<p>Сразу после этого <code>vrunner</code> находит <code>oscript</code>, <code>oscript</code> находит свой пакет, прогон стартует.</p>
<p>В сумме — три грабли подряд. Кириллица в пользователе, политика запуска под службой и пропавший PATH — на отдельный вечер каждая, если не знать. Все три отлично гуглятся задним числом. Но в моменте, когда видишь «выход 1 за полторы секунды без объяснения», не очевидно, что это, цитирую, <strong>проблема границы Unicode и однобайтной кодировки в системном вызове Windows</strong>.</p>
<p>Зелёный прогон через службу — после этого. Пять часов в сумме на сегодняшний вечер.</p>
<h2>Грабля 4 — DeepSeek убедил меня чинить не ту Synology ACL</h2>
<p>Это моя любимая.</p>
<p>Allure поднялся за две минуты — <code>docker run</code> на NAS, <code>frankescobar/allure-docker-service</code>, проброс папки <code>/volume1/docker/allure/projects</code> внутрь как <code>/app/projects</code>. Стартует, на порту 5050 живая морда.</p>
<p>Делаю первый POST — отправить результаты прогона. Получаю:</p>
<pre class="highlight"><code>HTTP 400
Permission denied: '/app/allure-docker-api/static/projects/yaxunit-iikona'
</code></pre>
<p>Делаю <strong>перезапуск</strong> контейнера. Тот же POST. <strong>Зелёный</strong>. Загрузка прошла.</p>
<p>Хм. Подозрительно — после перезапуска работает, а до — нет.</p>
<p>Запоминаю это в голове и думаю: «Видимо первый раз после старта он что-то досоздаёт».</p>
<p>На следующий день поднимаю <strong>второй проект</strong> на том же Allure. Та же ошибка. Тот же перезапуск. Лечит.</p>
<p>Это уже не «видимо». Это <strong>закономерно</strong>. Каждый новый проект — перезапуск.</p>
<p>В Claude Code прикасаюсь к скиллу про связку нескольких агентов: «поручу DeepSeek через <code>opencode run</code>, пусть посмотрит свежим взглядом и найдёт настоящую причину». DeepSeek (v4-pro через OpenRouter) у меня в скилле для именно таких ситуаций — независимое мнение по конкретной проблеме.</p>
<p>Отправляю описание ошибки и контекст. Через двадцать секунд ответ. <strong>Уверенный</strong>, со ссылками на скрипт запуска этого образа Docker:</p>
<blockquote>
<p>«Скрипт запуска выполняет <code>chown -R 1000:1000 /app/projects</code> асинхронно. Flask-приложение стартует раньше, чем заканчивается смена владельца. Поэтому первый POST приходит до того, как владелец поменялся, и процесс с правами 1000 не может писать. После перезапуска скрипт инициализации уже отработал, права выставлены — POST проходит.</p>
<p>Решение: в <code>docker-compose.yml</code> добавить <code>command: ["sh", "-c", "chown -R 1000:1000 /app/projects &amp;&amp; exec entrypoint.sh"]</code> — синхронная смена владельца перед стартом сервиса.»</p>
</blockquote>
<p>Логично. Стройно. Объясняет всё, что я видел.</p>
<p>Я уже почти было пошёл это применять. Но <strong>что-то</strong> меня остановило. Не знаю что. Какой-то рефлекс «проверь руками сначала».</p>
<p>И я зашёл в контейнер по SSH:</p>
<pre class="highlight"><code class="language-bash">docker exec -it allure ls -ld /app/projects/yaxunit-iikona
</code></pre>
<p>Ответ:</p>
<pre class="highlight"><code>drwxrwxrwx 2 1029 users 4096 May 14 22:30 /app/projects/yaxunit-iikona
</code></pre>
<p>Стоп.</p>
<p><strong>Владелец — 1029. Не 1000.</strong></p>
<p>То есть никакой смены владельца в скрипте запуска <strong>не происходило</strong>. Ни до старта, ни после. Владелец — <code>1029:users</code>, как я его создал через <code>mkdir</code> изначально. Права в стиле Unix — <code>0777</code>, что для процесса с правами 1000 (под которым Flask) <strong>разрешает запись</strong>.</p>
<p>Я был в полу-шаге от того, чтобы записать в инструкцию <code>1c-yaxunit-runner</code> «добавьте смену владельца в скрипт запуска, иначе будет 400 на первом POST» — и оставить этот ложный вывод там навечно.</p>
<p>После пары часов проб — стартовал контейнер, ждал пять секунд, делал POST, замерял. Стартовал, ждал десять секунд, POST, замерял. Менял <code>command:</code>, не менял <code>command:</code>. Через двадцать минут реальная картина была вот такая:</p>
<p><strong>Flask-приложение начинает слушать порт 5050 раньше, чем заканчивается скрипт инициализации внутри образа.</strong> Скрипт инициализации делает кучу всего — миграции базы SQLite, проверки, прогрев. POST, приходящий на сервер, который уже слушает но ещё не готов, получает 400 с криво сложенным сообщением «permission denied на /app/&hellip;», хотя реально с правами ни при чём.</p>
<p>Лечение — банальный <strong>опрос готовности</strong> перед первым POST:</p>
<pre class="highlight"><code class="language-python">for _ in range(30):
    if requests.get(f&quot;{ALLURE_URL}/version&quot;).ok:
        break
    time.sleep(1)
</code></pre>
<p>Тридцать секунд ожидания готовности на старте. После этого POST-запросы летят.</p>
<p>DeepSeek был умен, стройн и неправ. Я его очень люблю как независимого ревьюера, особенно в обычной связке нескольких агентов: каждое ревью кода через DeepSeek поверх Claude находит баги уровня «уборка дубликатов событий цепляется не за идентификатор, а за совпадение сумм за тридцать дней». Но в этот раз он сочинил красивую внутреннюю модель ошибки, которая не имела отношения к реальности.</p>
<blockquote>
<p><strong>Я:</strong> «Так ты выдумал про смену владельца в скрипте запуска?»</p>
<p><strong>DeepSeek:</strong> Молчит. Он не помнит этот разговор. Третий агент в моём рабочем потоке — без памяти между запросами.</p>
</blockquote>
<p>Урок: <strong>на инфраструктурных вопросах сначала проверка руками, потом совет от ИИ</strong>. Пять минут <code>docker exec</code> и <code>ls -l</code> стоят дешевле, чем час неверной правки и потеря веры в собственные диагнозы. Без проверки руками я бы записал в скилл <code>1c-yaxunit-runner</code> навсегда инструкцию «в скрипте запуска синхронная смена владельца» — и каждый, кто бы шёл моими граблями по моему же скиллу, запомнил бы её как факт.</p>
<h2>Грабля 5 — Allure не принимает JUnit XML</h2>
<p>Я думал, JUnit XML — это универсальный билет в Allure. Раз Allure про красивые отчёты тестов, и почти все системы понимают JUnit XML — значит и он понимает.</p>
<p>Оказалось, в этом контейнере билет не тот. <code>frankescobar/allure-docker-service</code> принимает только <strong>свой формат Allure raw JSON</strong> — это один JSON-файл на тест. У него своя структура: <code>name</code>, <code>fullName</code>, <code>status</code>, <code>start</code>, <code>stop</code>, <code>historyId</code>, <code>labels</code>, <code>parameters</code>.</p>
<p>Открыл документацию Allure. Половина — про плагин для Java, половина — про SBT и Gradle. Описание собственного формата — где-то на третьем уровне навигации, под спойлером, на английском, с примером в YAML, который не валиден как JSON.</p>
<p>Окей, написал переводчик сам. На стандартной библиотеке Python, пятьдесят строк:</p>
<pre class="highlight"><code class="language-python">import xml.etree.ElementTree as ET
import json, hashlib, time, uuid

def junit_to_allure(xml_path, out_dir):
    tree = ET.parse(xml_path)
    for tc in tree.iter(&quot;testcase&quot;):
        name = tc.get(&quot;name&quot;)
        suite = tc.get(&quot;classname&quot;)
        failure = tc.find(&quot;failure&quot;)
        status = &quot;failed&quot; if failure is not None else &quot;passed&quot;
        # historyId через md5 — чтобы Allure связал прогоны в график
        history_id = hashlib.md5(f&quot;{suite}.{name}&quot;.encode()).hexdigest()
        result = {
            &quot;uuid&quot;: str(uuid.uuid4()),
            &quot;name&quot;: name,
            &quot;fullName&quot;: f&quot;{suite}.{name}&quot;,
            &quot;status&quot;: status,
            &quot;stage&quot;: &quot;finished&quot;,
            &quot;historyId&quot;: history_id,
            &quot;labels&quot;: [{&quot;name&quot;: &quot;suite&quot;, &quot;value&quot;: suite}],
        }
        if failure is not None:
            result[&quot;statusDetails&quot;] = {&quot;message&quot;: failure.get(&quot;message&quot;), &quot;trace&quot;: failure.text}
        with open(f&quot;{out_dir}/{result['uuid']}-result.json&quot;, &quot;w&quot;) as f:
            json.dump(result, f)
</code></pre>
<p><code>historyId = md5(fullName)</code> — критическая мелочь. Без неё Allure не свяжет прогоны между собой, и не будет графиков трендов. Это написано в их документации, но не очевидно — раздел про историю как раз про этот md5, и легко пропустить, потому что параметр выглядит как «необязательный».</p>
<p>Переводчик работает. Заливка работает. Тренды строятся. Дальше в цепочке от меня нужно только смотреть на красивые графики и иногда отвечать в Telegram-бот «yes, видел, сегодня починю».</p>
<p><img decoding="async" alt="Allure dashboard: 72 теста, 100%, разбивка по 14 suites" src="https://androman.pro/wp-content/uploads/2026/05/screenshot-allure-dashboard.png"></p>
<h2>Грабля 6 — BDD-тесты в автопрогон не лезут</h2>
<p>В ИИконе кроме YAxUnit (модульные тесты) есть сценарии BDD через Vanessa Automation. Это поведенческие тесты, написанные на Gherkin. Они умеют ходить по формам, нажимать кнопки, читать значения — то есть нужен <strong>живой экран с интерфейсом</strong>.</p>
<p>Под YAxUnit мы только что собрали красивую штуку — исполнитель крутится как служба под LocalSystem, прогон без видимого окна, прекрасно. Хочется BDD туда же.</p>
<p>Не работает.</p>
<p>LocalSystem в Windows стартует в <strong>Session 0</strong> — это специальная сессия для системных служб, без интерактивного рабочего стола, без окон, без сообщений интерфейса. Сценарии Vanessa отправляют оконные сообщения формам — в Session 0 этих окон нет.</p>
<p>Vanessa запускает 1С тонкий клиент, тонкий клиент пытается открыть форму, движок интерфейса отправляет оконные сообщения — некому слушать. Тест зависает или падает с непонятной ошибкой через таймаут.</p>
<p>Можно? Технически — <code>psexec -s -i 1 vrunner.exe</code>, переключение в Session 1, тонкий клиент в видимом рабочем столе. Можно службу запускать <strong>не от LocalSystem, а от обычного пользователя</strong> с разрешением «вход как служба». Тогда сессия получает интерфейс.</p>
<p>Должен ли я это делать? Для моего случая — <strong>нет</strong>. Сценарии BDD у меня прогоняются раз в неделю руками через Vanessa MCP в Claude Code. Я в этот момент сижу за компом, смотрю как кликается. Это и нужно, потому что BDD у меня про вёрстку форм — я в этот момент <strong>смотрю</strong> скриншоты.</p>
<p>Решил так:</p>
<table>
<thead>
<tr>
<th></th>
<th>YAxUnit</th>
<th>BDD (Vanessa)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Нужен живой рабочий стол</td>
<td>Нет</td>
<td>Да</td>
</tr>
<tr>
<td>Под Windows-службой</td>
<td>работает</td>
<td>не работает</td>
</tr>
<tr>
<td>Где прогон</td>
<td>Автоматически на коммит</td>
<td>Вручную через MCP</td>
</tr>
<tr>
<td>История прогонов</td>
<td>Allure (проект <code>yaxunit-iikona</code>)</td>
<td>Allure (проект <code>bdd-iikona</code>)</td>
</tr>
</tbody>
</table>
<p>То есть Allure-история покрывает <strong>обе</strong> ветки одним и тем же дашбордом. Просто прогон BDD стартует с моей кнопки, не с коммита. И переводчик JUnit → Allure raw используется одинаково.</p>
<p>Получилась несимметричная, но честная цепочка. Без окон там, где это работает. Руками там, где требуется живой экран. Один Allure, два проекта, общая история.</p>
<h2>Где помог Claude Code, а где помешал</h2>
<p>Здесь не про «ИИ круто помогает разработчику», а про конкретные мелочи.</p>
<p><strong>Где помог.</strong> Связка из трёх агентов — Claude как архитектор плюс Codex CLI как разработчик плюс DeepSeek как независимый ревьюер. Я отдаю Codex детально-сформулированную задачу («написать опрос готовности, добавить повторы, обновить модульные тесты»), он реализует, Claude (то есть я в этой сессии) ревьюит, DeepSeek проверяет третьим взглядом. На длинной дистанции эта тройка ловит баги, которые я бы не нашёл. Дороже подписки на Claude Max — копейки на DeepSeek через OpenRouter, около половины цента за прогон ревью.</p>
<p>Скиллы — память между сессиями. После сегодняшних граблей записи про них уже в памяти. Следующая сессия с фразой «настроить автопрогон тестов 1С» сама подтянет нужный скилл, и я не повторю эти же грабли. Это работает не идеально, но лучше, чем без него — Грабля 1 (кириллица в пользователе) тому подтверждение: скилл был, я его не открыл, прошёл по тем же костям. Скилл стал жёстче.</p>
<p><strong>Где помешал.</strong> Как показала Грабля 4 — советы ИИ на инфраструктурных вопросах требуют проверки руками. Особенно когда модель не видит <strong>твоего</strong> конкретного контейнера и твоих конкретных прав.</p>
<p>И ещё — я регулярно ловил себя на том, что <strong>изобретаю</strong> там, где у меня уже есть готовое. Например я пошёл писать с нуля PowerShell-скрипт для прогона YAxUnit, при том что у меня уже лежат готовые скилл-обёртки <code>db-create</code>, <code>db-load-cf</code>, <code>epf-build</code> для всего этого. Лень открыть <code>ls</code>. Прошлогодний я в инструкциях уже <strong>умнее</strong>, чем текущий я по памяти. Это смешно и грустно одновременно.</p>
<h2>Сколько ушло</h2>
<p>Время: <strong>5 часов</strong> с клавиатуры в сессиях Claude Code. С вечера четверга до утра пятницы, с перерывом на сон. Реально это две полу-сессии — одна на цепочку YAxUnit до Allure (три часа), одна на Allure плюс стек мониторинга плюс Telegram (два часа).</p>
<p>Деньги:</p>
<ul>
<li>Claude Pro Max — подписка, не за задачу. Считать как «фиксированная».</li>
<li>DeepSeek через OpenRouter — около двух центов за всю сессию. Это пять-шесть прогонов ревью по половине цента, цифра реальная (есть в моём трекере, <a href="/ai-tracker-60k/">про который писал отдельный пост</a>).</li>
<li>Прометей, Графана, Allure — контейнеры Docker на NAS, который и так крутится 24/7.</li>
<li>1С — лицензия учебная, файловая база.</li>
</ul>
<p>Железо: домашний NAS, который и так работает 24/7. Под весь стек — около гигабайта оперативки (Allure плюс Prometheus с Grafana и Alertmanager). На нём же живёт Gitea и пара других сервисов. Запас есть.</p>
<h2>Когда стоит это делать</h2>
<p>Это <strong>не для каждого 1С-проекта</strong>. Это для конкретного класса проектов:</p>
<ul>
<li>Тестов больше тридцати, и прогон занимает заметное время (десятки секунд → минуты).</li>
<li>Прогон делается <strong>чаще раза в день</strong>. Если раз в неделю — перебор.</li>
<li>Хочется график «процент успешных по неделям», регрессии замечать «вчера было 72/72, сегодня 70/72 — что я сломал?».</li>
<li>Команда больше одного человека, и тесты надо видеть не только в моей голове.</li>
<li>Или: команда из одного, но есть стратегическая цель — например, сертификация «1С:Совместимо», для которой автоматизация тестов это плюс.</li>
</ul>
<p>Если тестов десять и они прогоняются раз в неделю руками — забудь про это, тебе не надо.</p>
<h2>Когда не стоит</h2>
<ul>
<li>Файловая база, единственный разработчик, два десятка тестов раз в неделю. Достаточно ручного прогона.</li>
<li>Нет NAS / нет виртуалки / нет ноута, который можно отдать под свой исполнитель. На облачных исполнителях 1С запускать нельзя — лицензия привязана к железу.</li>
<li>Команда не понимает «зачем нам автопрогон» и сопротивляется. Сначала разговор, потом инфраструктура.</li>
</ul>
<h2>Шаблон для тех, кто хочет повторить</h2>
<p>Я выложил репозиторий-шаблон. Все шесть грабель задокументированы в README, плюс готовый конфиг прогона, готовый скрипт-обёртка, готовый переводчик JUnit → Allure raw, готовый сборщик метрик Allure для Prometheus.</p>
<p><a href="https://github.com/andromanpro/onec-yaxunit-ci-template"><code>github.com/andromanpro/onec-yaxunit-ci-template</code></a> — MIT, бери и адаптируй. Поднимается у нового проекта минут за тридцать.</p>
<p>Поднимается у нового пользователя минут за тридцать. Главные параметры — путь до <code>1cv8.exe</code>, имя файловой базы, латинский пользователь с правами. Остальное — копипаста.</p>
<h2>Посмотреть</h2>
<ul>
<li><a href="https://github.com/andromanpro/onec-yaxunit-ci-template">Шаблон <code>onec-yaxunit-ci-template</code></a> — MIT, README со списком грабель на 200 строк</li>
<li><a href="https://github.com/andromanpro/1c-ai-connector">ИИкона — AI-коннектор для 1С</a> — открытый проект, из CI-инфраструктуры которого вырос этот шаблон</li>
<li><a href="/ai-tracker-60k/">Пост про трекер расходов на ИИ</a> — там тот же DeepSeek, который ловит реальные баги, упоминается в контексте связки нескольких агентов</li>
<li><a href="https://github.com/andromanpro">github.com/andromanpro</a> — публичная часть моих проектов</li>
</ul>
<h2>Что осталось</h2>
<p>План, до которого я <strong>не дошёл</strong> в этот вечер и который висит на следующий заход:</p>
<ul>
<li>Перенос всего стека на Linux-исполнитель на NAS плюс 1С в Docker плюс Postgres. Это убирает зависимость от моего ноута. Три-пять дней работы, ждёт повода вроде «команда выросла» или «ноут перестал быть надёжным».</li>
<li>Сборщик метрик 1С для Prometheus для кластерной базы (если когда-нибудь появится кластер). Для файловой ИБ — бессмысленно.</li>
<li>Расширение сборщика метрик Allure — помодульные числа, чтобы в Grafana видеть процент успешных <strong>по конкретному модулю</strong> в динамике.</li>
<li>Архив HTML-отчётов Allure в <code>/volume1/backups/</code> (сейчас Allure держит последние 20 отчётов, потом удаляет).</li>
</ul>
<p>Ни один из этих пунктов не блокирует ничего. Если упадёт что-то критичное, я узнаю через Telegram в течение минуты — это самое важное, что я успел собрать.</p>
<h2>Самое смешное</h2>
<p>Самое смешное про этот вечер — это не количество граблей. Их шесть, и каждая ловится через 30 секунд <code>docker exec</code> или <code>Get-ChildItem $env:Path</code>.</p>
<p>Самое смешное в том, что <strong>из шести граблей пять я уже встречал раньше</strong>. Грабля 1 — кириллица в пользователе — была решена 6 мая, в скилле и в CLAUDE.md. Грабля 2 — права запуска под службой — общеизвестная штука среди Windows-сисадминов. Грабля 5 — Allure ждёт свой формат — задокументирована в их официальной документации.</p>
<p>Только <strong>Грабля 4</strong> — DeepSeek и не та Synology ACL — была мне новой. И именно на ней DeepSeek дал красивый, уверенный, неверный диагноз. Единственная по-настоящему свежая грабля среди шести — единственная, на которой совет от ИИ дал сбой.</p>
<p>Это не значит, что ИИ бесполезен. Это значит, что ИИ <strong>очень хорошо имитирует</strong> уверенный ответ, и если ты сам не знаешь правильного ответа, ты не различишь.</p>
<p>Скиллы — внешняя память от прошлого меня к текущему — работают лучше, чем модельная память внутри ИИ. Скилл написан после того, как я <strong>проверил руками</strong>. Модель пишет ответ из обучающего корпуса, не глядя в мой контейнер.</p>
<p>DeepSeek через два дня после этого вечера поймал в ревью два серьёзных бага в коде, которые я бы не нашёл (обход путей в одной из точек входа, гонка проверок в уборке дубликатов). Я ему очень благодарен. Просто <strong>для инфраструктурных диагнозов</strong> — <code>docker exec</code> стоит дешевле и точнее.</p>
<p><img decoding="async" alt="Grafana «Allure CI — тесты и тренды»: pass rate, тренды, длительность по проектам" src="https://androman.pro/wp-content/uploads/2026/05/screenshot-grafana-allure.png"></p>
<p><img decoding="async" alt="Telegram-алерт от бота через Alertmanager" src="https://androman.pro/wp-content/uploads/2026/05/screenshot-telegram-alert.png"></p>
<p>Автопрогон зелёный. Дашборд Allure жив. Telegram-бот молчит, что означает «всё ок».</p>
<p>А я теперь сижу и думаю, сколько ещё вещей вокруг меня я могу автоматизировать за один длинный вечер.</p>


<p style="margin-top:1em;font-family:monospace;font-size:0.9em;">→ <a href="https://androman.pro/2026/05/14/ci-1c-za-den/">открыть на androman.pro</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://androman.pro/2026/05/14/ci-1c-za-den/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Я построил трекер для ИИ. Через час он показал почти пять миллионов рублей</title>
		<link>https://androman.pro/2026/05/09/ai-tracker-60k/</link>
					<comments>https://androman.pro/2026/05/09/ai-tracker-60k/#respond</comments>
		
		<dc:creator><![CDATA[Androman.pro]]></dc:creator>
		<pubDate>Wed, 13 May 2026 06:31:43 +0000</pubDate>
				<category><![CDATA[дев-лог]]></category>
		<category><![CDATA[ИИ-разработка]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[neon-legion]]></category>
		<category><![CDATA[vibe-coding]]></category>
		<category><![CDATA[метрики]]></category>
		<guid isPermaLink="false">https://androman.pro/?p=287</guid>

					<description><![CDATA[Субботний трекер посчитал, что мои два месяца работы с Claude по API-тарифам стоили бы почти пять миллионов рублей. А подписка стоила тридцать две тысячи.]]></description>
										<content:encoded><![CDATA[<p>Суббота. 9 мая 2026 года. Час дня или около того.</p>
<p>Я решил сделать маленький трекер для собственного использования ИИ: сколько токенов, сколько денег, сколько времени я реально экономлю, и не обманываю ли я себя красивым ощущением разгона.</p>
<p>Через час он показал <strong>почти пять миллионов рублей</strong> — точнее, <strong>4 824 000</strong> в эквиваленте API при курсе 80 рублей за доллар.</p>
<p>Я посмотрел на цифру и сказал примерно так:</p>
<blockquote>
<p>«Я столько за год не зарабатываю».</p>
</blockquote>
<p>Потом выдохнул и поправил себя. Нет, я не <strong>потратил</strong> пять миллионов. Это важная разница. Столько стоили бы мои Claude Code сессии за два месяца, если бы я платил за них по API-тарифам. Реально я заплатил за Max-подписку: <strong>16 тысяч в месяц</strong>, то есть <strong>32 тысячи за два месяца</strong>.</p>
<p>Получилось не «я потратил пять миллионов».</p>
<p>Получилось хуже и смешнее.</p>
<p>Получилось: я <strong>не потратил</strong> примерно <strong>4,79 миллиона рублей</strong>, потому что подписка окупилась почти в <strong>150 раз</strong>.</p>
<p>И самое странное — это посчитал трекер, который в этот момент сам ещё строился.</p>
<h2>Сначала надо было признаться, что я не считаю</h2>
<p>У меня давно было ощущение, что ИИ экономит мне время. В апреле я уже считал часы: <strong>147 часов</strong> активного общения с моделью за месяц, десятки сессий, куча артефактов, блог, pet-проекты, клиентские задачи, инфраструктура, вся эта прекрасная каша.</p>
<p>Но часы — штука скользкая. Сегодня кажется, что без модели я бы делал задачу неделю. Завтра кажется, что преувеличил. Послезавтра уже не помнишь, что именно было трудно: код, вход в предметную область, проверка результата или просто нежелание начинать.</p>
<p>Деньги в этом смысле грубее.</p>
<p>Есть подписка. <strong>16 тысяч в месяц</strong>. Есть фактическое потребление моделей. Есть тарифы API. Можно посчитать, сколько стоил бы тот же объём, если бы всё шло не через Max, а через прямую оплату токенов.</p>
<p>Не как бухгалтерскую истину. Как личный датчик масштаба.</p>
<p>Мне нужен был не корпоративный BI, не «панель эффективности цифровой трансформации», прости господи, а простой локальный счётчик: вот сессия, вот модель, вот токены, вот примерная стоимость, вот день, вот сумма.</p>
<p>Ну и, конечно, я не стал делать это один.</p>
<h2>Два агента, один NAS и нормальный взрослый процесс</h2>
<p>Схема у меня уже сложилась: <strong>Claude Code</strong> работает архитектором, <strong>Codex CLI</strong> работает разработчиком, а Gitea на NAS держит всё в виде задач, PR и слияний. Человек посередине иногда делает вид, что руководит процессом.</p>
<p>Роли простые:</p>
<ol>
<li><strong>Claude</strong> формулирует фазу, режет задачу, ревьюит результат.</li>
<li><strong>Codex</strong> лезет в репозиторий, пишет код, чинит тесты, приносит PR.</li>
<li><strong>Gitea</strong> не даёт этой каше превратиться в «я тут что-то правил в папке».</li>
<li><strong>Я</strong> смотрю на цифры и периодически говорю: «алло, это точно не взорвётся?»</li>
</ol>
<p>За один длинный сеанс пролетели несколько фаз.</p>
<p><strong>Phase 1.0</strong> — хук окончания сессии для Claude Code. Когда сессия заканчивается, хук читает данные, находит последнее событие ассистента с расходом токенов, считает примерную стоимость и пишет событие в локальный JSONL.</p>
<p><strong>Phase 1.3</strong> — хук на старте сессии и оценка сложности через <code>claude -p --bare</code>. Идея: на старте новой сессии найти предыдущие сессии без оценки и в фоне попросить Claude прикинуть, сколько часов такая задача заняла бы без ИИ.</p>
<p><strong>Phase 1.0.1</strong> — обратная загрузка истории из <code>~/.claude/projects/*/*.jsonl</code>. Это и стало большим взрывом цифр: не только новые события, а весь хвост за два месяца.</p>
<p><strong>Phase 1.0.2</strong> — срочная правка, потому что внезапно выяснилось, что у нас есть не только данные, но и способы ими случайно замучить собственную подписку: ограничитель частоты, пропуск синтетических сессий, уточнение цен, правильный разворот формулы экономии.</p>
<p>Каждая фаза шла через задачу → реализацию Codex&rsquo;ом → ревью Claude → PR → слияние. К вечеру в локальной Gitea уже лежали PR #3, #5, #7, плюс добивки вокруг 1.0.2.</p>
<p>Звучит почти прилично.</p>
<p>На практике приличие началось не сразу.</p>
<p>Сначала я создал Gitea-репозиторий с <code>auto_init: True</code>, получил unrelated histories и потом восстанавливал нормальную историю через cherry-pick из reflog&rsquo;а. Да, взрослый процесс. Да, с ударом лбом о дверной косяк на входе.</p>
<p>Потом первая попытка Codex&rsquo;а упала на строгой схеме OpenAI: у каждого объекта в схеме должен быть <code>additionalProperties: false</code>. Не «желательно». Не «потом добавим». HTTP 400 и иди думай.</p>
<p>А ещё в <code>working_dir</code> всплыли кракозябры из-за cp1251→utf8. Не смертельно, но привет из мира Windows, где кириллица всегда ждёт в тёмном углу и улыбается.</p>
<h2>Трекер смотрит на того, кто его строит</h2>
<p>Самый красивый момент случился почти незаметно.</p>
<p>Я тестировал хук окончания сессии. Claude завершал сессию. Хук писал событие в <code>tracker/claude-events.jsonl</code>. Потом мы правили хук. Потом снова завершали сессию. Потом снова писалось событие.</p>
<p>И в какой-то момент я понял: <strong>трекер уже трекает собственную постройку</strong>.</p>
<p>То есть я смотрю на файл, в котором лежит история создания файла, который записывает историю создания файла.</p>
<p>Нормальная такая рекурсия выходного дня.</p>
<blockquote>
<p><strong>Я:</strong> «Подожди, он сейчас считает эту же сессию?»</p>
<p><strong>Claude:</strong> «Да. Хук окончания сессии глобальный».</p>
<p><strong>Я:</strong> «То есть он видит не только этот проект?»</p>
<p><strong>Claude:</strong> «Он видит все Claude Code сессии».</p>
</blockquote>
<p>И вот тут маленький локальный счётчик превратился в <strong>observatorium</strong>.</p>
<p>Хук был зарегистрирован глобально в <code>~/.claude/settings.json</code>. Значит он ловил не только multi-agent, но и параллельные сессии в WMSTnext, и субагентов, и всё, что проходило через Claude Code на этой машине. Не потому что мы так хитро задумали. Просто хук глобальный.</p>
<p>С одной стороны — прекрасно. Полная картина использования.</p>
<p>С другой — приватность и нагрузка сразу перестают быть «потом подумаем». Если Phase 4 когда-нибудь покажет публичные метрики на сайте, сырые транскрипты туда не поедут никогда. Только агрегаты, короткие хэши, обезличенные пути, без содержимого запросов. Иначе это не дашборд, а добровольная публикация собственного чердака.</p>
<p>Второй сюрприз был злее.</p>
<p>Хук на старте сессии для оценки сложности должен запускать <code>claude -p --bare</code>. Флаг <code>--bare</code> тут не декоративный. Он нужен, чтобы оценочная сессия не тащила за собой обычное окружение и не запускала собственные хуки в петлю.</p>
<p>Потому что если каждая оценка запускает новую сессию, а каждая новая сессия запускает оценку, то это уже не автоматизация. Это маленький финансовый чёрный квадрат.</p>
<p>После обратной загрузки у нас оказалось <strong>247 файлов транскриптов</strong>. Если на следующем старте сессии хук бодро запустит 247 дочерних процессов оценки сложности — будет не продуктивность, а ад из лимитов запросов. И это поймали до того, как я открыл следующую нормальную сессию.</p>
<p>Вот зачем нужен второй агент на ревью.</p>
<p>Codex хорошо прошёлся по ширине: нашёл места, где может бахнуть, проверил схемы, краевые случаи, обратную загрузку, дедупликацию. Claude лучше собрал смысл: что это значит для архитектуры, где граница приватности, почему <code>--bare</code> не мелочь, почему формула экономии сначала была перевёрнута не туда.</p>
<p>Эмпирическое правило дня: <strong>Codex лучше ищет по ширине, Claude лучше собирает смысл</strong>.</p>
<p>Не абсолютный закон природы. Просто в этот день так работало.</p>
<h2>Что я нашёл в шестидесяти тысячах</h2>
<p>После обратной загрузки история выглядела так:</p>
<ul>
<li><strong>79,716 событий</strong> за период с <strong>2026-03-09</strong> по <strong>2026-05-09</strong>.</li>
<li><strong>247 файлов транскриптов</strong>.</li>
<li>JSONL после обратной загрузки — около <strong>30 MB</strong>.</li>
<li>Пиковый день — <strong>31 марта</strong>, <strong>1,113 calls</strong>.</li>
<li>По моделям: <strong>Opus 4.7 — 53,854 calls</strong>, <strong>Opus 4.6 — 9,418</strong>, <strong>Sonnet 4.6 — 16,275</strong>.</li>
</ul>
<p>Итоговая сумма по API-тарифам: <strong>4 824 000 рублей</strong>.</p>
<p>Сразу оговорка, жирная и скучная: это пока <strong>завышение на 10-15%</strong>. Старые записи с Opus 4.6 считаются по ценам 4.7, потому что история моделей не идеальна. После пересчёта цен будет точнее. Реалистичнее ожидать <strong>4-4,4 миллиона</strong>, а не ровно 4,82.</p>
<p>Но даже если это не пять миллионов, а четыре — порядок не меняется.</p>
<p>Я заплатил <strong>32 тысячи</strong> за два месяца Max-подписки.</p>
<p>Если бы платил по API-тарифам — было бы около <strong>4,8 миллиона</strong> в текущей грубой оценке.</p>
<p>Экономия относительно API-варианта — <strong>4,79 миллиона</strong> по первому расчёту. Даже после уточнения цен останутся миллионы.</p>
<p>И вот тут мозг делает смешную вещь. Он одновременно понимает, что это не настоящие «заработанные деньги», потому что я бы просто не стал так использовать API за прямые деньги, и одновременно не может игнорировать факт: объём вычислений, который я реально прогнал за два месяца, стоит на открытом тарифе как хорошая машина.</p>
<p>Это не бизнес-кейс для презентации.</p>
<p>Это личная фотография масштаба.</p>
<blockquote>
<p><strong>Я:</strong> «То есть Max за 16 тысяч в месяц — это не дорого?»</p>
<p><strong>Трекер:</strong> «Смотря с чем сравнивать».</p>
<p><strong>Я:</strong> «С API».</p>
<p><strong>Трекер:</strong> «Тогда это почти неприлично дёшево».</p>
</blockquote>
<p>Я раньше писал про разгон как про ощущение: больше задач, больше артефактов, больше связей между проектами. Теперь к этому ощущению прирос счётчик.</p>
<p>Не идеальный. Не финальный. Но уже достаточно честный, чтобы стало слегка не по себе.</p>
<h2>Что я унёс с собой</h2>
<p>Глобальный хук — это власть. Он видит всё, и значит дизайн надо начинать не с красивого дашборда, а с границы приватности. Что пишем, куда пишем, что никогда не публикуем, как обезличиваем путь — это первое решение, не последнее.</p>
<p>Автоматизация должна иметь тормоза. Обратная загрузка на 247 сессий плюс дочерний процесс на старте сессии — почти готовый способ самому себе устроить ад из лимитов запросов. Ограничитель частоты — не украшение, а предохранитель.</p>
<p>И самое неудобное: про деньги надо говорить аккуратно. Я не потратил $60k. Я использовал подписку так, что эквивалентный счёт по API был бы около $60k. Разница принципиальная. Иначе это превращается в инфоцыганскую картинку, от которой самому стыдно.</p>
<h2>А теперь хочется ещё хуже</h2>
<p>Текущий трекер считает деньги. Следующий слой — время.</p>
<p>Phase 1.3 должен научиться оценивать сложность задачи: сколько часов это заняло бы без ИИ, сколько заняло по реальным часам, какой получился множитель. Не «истина в последней инстанции», а личная шкала. Если задача без ИИ была бы на 8 часов, а с агентами заняла 50 минут — это уже не просто красивое ощущение.</p>
<p>Потом хочется отслеживать настроение.</p>
<p>Не только «сколько токенов», но и <strong>сколько раз я матерился</strong>. Счётчик раздражения. Благодарности. Моменты, где я пишу «ёбать» не потому что всё сломалось, а потому что трекер показал $60k.</p>
<p>Потом дашборд. Конечно, киберпанк. Графики, крупные числа, локальный HUD, виджет «сколько осталось до лимита», карточки для блога, которые можно публиковать без сырых данных. Тот самый случай, когда эстетика не мешает инженерии, потому что счётчик должен быть видимым. Если он спрятан в JSONL, мозг его быстро перестаёт чувствовать.</p>
<p>Дальше публичная статистика на androman.pro. Только агрегаты. Никаких транскриптов. Никаких приватных путей. Никаких клиентских имён. Просто «за месяц модель сэкономила N часов / N долларов эквивалента / N дней жизни, которые я всё равно потратил на новые задачи».</p>
<p>А где-то в дальнем углу планов лежит AR-оверлей через Xreal: маленький HUD в углу зрения, агент в сети, PR готов, расходы за сегодня, голосовая команда «merge PR».</p>
<p>Звучит как фантастика.</p>
<p>Но сегодня утром у меня не было трекера. К вечеру он уже нашёл пятьдесят с лишним тысяч долларов не-потраченных денег.</p>
<p>Так что я теперь осторожнее со словом «фантастика».</p>
<h2>Самое смешное</h2>
<p>Самое смешное не в сумме.</p>
<p>Сумма — это просто неоновая вывеска, на которую удобно смотреть с открытым ртом.</p>
<p>Самое смешное в том, что я строил инструмент для измерения собственного ИИ-разгона, а он сразу стал частью этого разгона. Он писал JSONL о сессиях, в которых его писали. Он ловил параллельные ветки. Он обнаружил угрозу собственных оценочных дочерних процессов. Он заставил переписать формулу экономии, потому что первая версия думала не туда.</p>
<p>Счётчик оказался не прибором снаружи системы.</p>
<p>Он оказался ещё одним участником системы.</p>
<p>Подписка окупилась примерно в <strong>150 раз</strong>. Трекер это посчитал сам. А я теперь сижу и думаю, сколько ещё вещей вокруг меня уже пора начать считать.</p>
<p>Потому что ощущение — врёт красиво.</p>
<p>JSONL врёт скучнее.</p>
<hr>
<h2>Через три дня</h2>
<p>Я открыл черновик утром, хотел внести «пару правок перед публикацией».</p>
<p>Через четыре часа переписываю заново.</p>
<h3>Откуда вообще трекер</h3>
<p>Если совсем честно — трекер был <strong>побочным продуктом</strong>.</p>
<p>Изначальная задача звучала по-другому: настроить совместную работу трёх ИИ-агентов. <strong>Claude</strong> разбивает задачу на куски и проверяет результат — архитектор. <strong>Codex</strong> реализует — разработчик. <strong>OpenClaw</strong> — мост через Telegram, чтобы давать команды с телефона из бара. Три модели, три API, три разных протокола. Хотелось чтобы они передавали друг другу задачи и не ругались по поводу того кто из них что испортил.</p>
<p>Чтобы этот конвейер не превратился в чёрный ящик, нужно было видеть кто из агентов что сделал, за сколько токенов и времени. То есть нужен был учёт. А значит — трекер.</p>
<p>Учёт оказался первой готовой частью и пожрал внимание. Заголовок про пять миллионов — оттуда. А мульти-агент тем временем тихо собирался в фоне.</p>
<p>К 12 мая он работает. Я пишу боту в Telegram «обнови README в репо», OpenClaw принимает, Claude составляет план, Codex реализует, DeepSeek (третий ревьюер, появился за эти три дня) проверяет. Я только апрувлю. Это уже не «один человек с одним трекером». Это маленький конвейер из трёх ИИ и одного меня.</p>
<p><img decoding="async" alt="Конвейер neon-legion: Telegram → OpenClaw → Claude → Codex → DeepSeek → approve, события каждого шага оседают в трекер" src="https://androman.pro/wp-content/uploads/2026/05/neon-legion-flow.png"></p>
<p>В репозитории за три дня прирос не только трекер. Прирос мульти-агент, ради которого его и затевали. И заодно — имя <a href="https://github.com/andromanpro/neon-legion"><code>neon-legion</code></a> (вместо служебного <code>multi-agent</code>) и слоган, в котором счётчик ругательств вынесен прямо в название: <em>«Твоя личная армия. Почти без ебать-колотить. Да, мы считаем маты»</em>. Маты считаются не для красоты. У каждой Claude-сессии в дашборде есть поле <code>profanity_count</code>, заполненное по факту. Шутка — это фича.</p>
<h3>Где деньги, Лебовски</h3>
<p>Тут хочется разобраться с одной неудобной вещью.</p>
<p>На 9 мая трекер показывал 4,8 миллиона. Сейчас, пока пишу эту главу, уже <strong>5,77 миллиона</strong> — за три дня плотной работы с моделями цифра прибавила ещё <strong>почти миллион</strong>. Трекер тикает прямо сейчас. На статье тоже.</p>
<p>Подписка нарастающим итогом — <strong>48 тысяч</strong> за два с половиной месяца. Экономия относительно API-варианта — <strong>5,72 миллиона</strong>.</p>
<p>Хочется носить эту цифру на бейдже.</p>
<p>Только в кошельке у меня не прибавилось пяти миллионов. Где же деньги, Лебовски?</p>
<p>Их нет, потому что я бы не потратил эти пять миллионов. Если бы подписки не было, я бы не оплатил все эти запросы по API. Я бы просто <strong>сделал в десять раз меньше</strong>. Экономия — это сравнение с ситуацией, в которой я бы вообще так не работал. Бенчмарк, а не выручка. Цифра на бейдже была бы враньём.</p>
<p>Но интересно другое.</p>
<p>ИИ даёт мне условные <strong>10x</strong> к производительности. Не маркетинговая цифра — субъективная оценка, подтверждённая таблицей часов: без ИИ я делал бы в десять раз меньше за те же часы. Допустим, мой месячный оборот по задачам — <strong>2,5 миллиона</strong>. Тогда один «ИИ-работник» делает работы примерно на <strong>250 тысяч в месяц</strong>.</p>
<p>250 тысяч — это зарплата нормального мидла в РФ. Не сеньора, не лида. Но мидла-с-опытом точно.</p>
<p>Подписка стоит <strong>16 тысяч в месяц</strong> на двоих, Claude Max + ChatGPT Pro. На неё работает <strong>четыре</strong> таких ИИ-мидла одновременно: Claude думает, Codex пишет, DeepSeek ревьюит, OpenClaw таскает между ними сообщения.</p>
<p>Вот где деньги: на каждой ИИ-подписке я не получаю +250 в карман. Я <strong>не плачу</strong> 250 тысяч зарплаты человеку, которого иначе пришлось бы взять. Дельта — невидимая экономия. Её нельзя положить на стол. Но именно она позволяет мне делать в десять раз больше за те же часы.</p>
<p>В кошельке прибавилось не пяти миллионов. Прибавилось <strong>возможности</strong>.</p>
<p>Возможность — паршивая единица отчётности. На неё хорошо ложится подписка и плохо ложится ипотека.</p>
<h3>Что в итоге</h3>
<blockquote>
<p><strong>Я:</strong> «Так ты считаешь свою собственную статью прямо сейчас?»</p>
<p><strong>Трекер:</strong> «Конечно. Я глобальный».</p>
</blockquote>
<p>Реальный сегодняшний счёт после догона: <strong>67 тысяч рублей</strong> в эквиваленте API за один день.</p>
<p>За три дня в репозиторий приехало много мелочи: тесты, сканер приватности перед публикацией, демо за минуту, починка кракозябр, конфиг в одном файле, плюс одна красивая штука — Hindsight Replay, когда вторая модель пишет критику работы первой. Подробности — в коммитах между 9 и 12 мая.</p>
<p>Главная функция трекера — не показать сколько ты сэкономил.</p>
<p>Главная функция трекера — показать насколько ты эффективен и сколько примерно стоит твой труд, <strong>если его будут делать ИИ</strong>.</p>
<p>Пока они дороже тебя — будь спокоен.</p>
<p>Если они начнут выполнять ту же работу что и ты, без ошибок и дешевле — ты станешь не нужен.</p>
<p>Трекер посчитает и это.</p>
<hr>
<p><strong>Посмотреть:</strong></p>
<ul>
<li><a href="/neon-legion/">Живой дашборд</a> — что трекер показывает прямо сейчас: множитель, сэкономлено, активные часы, разбивка по моделям</li>
<li><a href="https://github.com/andromanpro/neon-legion">github.com/andromanpro/neon-legion</a> — open-source, MIT, stdlib-only Python, локальный pipeline без внешних обращений</li>
</ul>


<p style="margin-top:1em;font-family:monospace;font-size:0.9em;">→ <a href="https://androman.pro/2026/05/09/ai-tracker-60k/">открыть на androman.pro</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://androman.pro/2026/05/09/ai-tracker-60k/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>highlight.js для 1С: мытарства, баг и npm-пакет</title>
		<link>https://androman.pro/2026/05/02/test-1c-highlight/</link>
					<comments>https://androman.pro/2026/05/02/test-1c-highlight/#respond</comments>
		
		<dc:creator><![CDATA[Androman.pro]]></dc:creator>
		<pubDate>Fri, 01 May 2026 21:00:00 +0000</pubDate>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[лаборатория]]></category>
		<guid isPermaLink="false">https://androman.pro/2026/05/02/test-1c-highlight/</guid>

					<description><![CDATA[Подключил highlight.js к блогу — и Функция осталась серой. КонецФункции тоже. Если/Тогда/Пока светятся, а объявление функции — нет. Пять минут разобраться «почему» превратились в несколько часов. Дизайн, не баг В hljs у языков помимо ключевых слов есть пары «открыть / закрыть блок» — то, что обозначает начало и конец именованной области кода. В грамматике 1c [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Подключил <a href="https://highlightjs.org/">highlight.js</a> к блогу — и <code>Функция</code> осталась серой. <code>КонецФункции</code> тоже. <code>Если</code>/<code>Тогда</code>/<code>Пока</code> светятся, а объявление функции — нет. Пять минут разобраться «почему» превратились в несколько часов.</p>
<h2>Дизайн, не баг</h2>
<p>В hljs у языков помимо ключевых слов есть пары «открыть / закрыть блок» — то, что обозначает начало и конец именованной области кода. В грамматике <code>1c</code> такими парами объявлены <code>Функция</code>/<code>КонецФункции</code> и <code>Процедура</code>/<code>КонецПроцедуры</code>. Они не получают класс <code>hljs-keyword</code> — им достаётся другая роль, и раскрашиваются иначе (или не раскрашиваются вовсе).</p>
<p><code>Знач</code> — модификатор параметра — просто отсутствует в списке ключевых слов грамматики. Вообще. Можно было написать пост-процессор на пять строк и закрыть тему. Но пока копался в исходниках, нашёл кое-что интереснее.</p>
<h2>Английский BSL — нулевая подсветка</h2>
<p>Грамматика <code>1c</code> для hljs написана только под русский синтаксис. Если у кого-то конфигурация с английской локализацией — <code>Function</code>, <code>EndFunction</code>, <code>If</code>, <code>Then</code> и всё остальное рендерится как простой текст. Совсем, без единого цвета.</p>
<p>Это неочевидно: большинство 1С-разработчиков работают с русским синтаксисом, и проблема просто не всплывала. Но международные команды встречаются. Значит фикс должен быть двуязычным.</p>
<h2>Что взял из atom-language-1c-bsl</h2>
<p>Нашёл <a href="https://github.com/1c-syntax/atom-language-1c-bsl">atom-language-1c-bsl</a> — грамматику для Atom от того же сообщества. Три вещи пошли прямо в патч:</p>
<p><strong>Регистронезависимость.</strong> BSL не чувствителен к регистру (<code>если = ЕСЛИ = Если</code>), а JavaScript <code>\b</code> работает только с ASCII и ломается на кириллице. Поэтому явные символьные классы для границ слов и флаг <code>gi</code> вместо просто <code>g</code>.</p>
<p><strong>Литералы.</strong> <code>Истина</code>, <code>Ложь</code>, <code>Неопределено</code> (и EN-аналоги) не получают <code>hljs-literal</code> нативно — добавил отдельным проходом.</p>
<p><strong>Аннотации.</strong> <code>&amp;НаСервере</code>, <code>&amp;AtClient</code> и подобные рендерились как обычный текст. Регулярное выражение <code>&amp;[a-zA-Zа-яёА-ЯЁ_][…]</code> закрыло это одним проходом.</p>
<h2>Баг — чей он вообще?</h2>
<p>В теме уже жил отдельный патч для подсветки обращений через точку — <code>Запрос.Текст</code>, <code>Объект.Реквизит</code>. Патч писал ИИ. Я проверил что работает — закрыл задачу.</p>
<p>Оказалось: он обходит все текстовые узлы, включая внутри строковых литералов. В тексте запроса <code>"ОстаткиИОбороты.Номенклатура"</code> — <code>Номенклатура</code> подсвечивалась как свойство объекта, хотя это просто часть строки.</p>
<p>Когда нашёл — спросил себя: а чья это недоработка? ИИ написал код с ошибкой. Но я не проверил граничный случай со строками-запросами и спокойно закрыл задачу. Нашёл до прода — уже хорошо.</p>
<p>Фикс — три строки: перед обработкой текстового узла проверять предков на класс <code>hljs-string</code>. Если есть — пропускать.</p>
<h2>Про примеры кода</h2>
<p>Демо-страница нужна была с реалистичными примерами — запрос с виртуальной таблицей, серверная процедура, HTTP. Попросил ИИ сгенерить. Подсветка сработала, выглядело хорошо — поехали.</p>
<p>Потом посмотрел внимательнее: <code>Справочники.Склады.НайтиПоНаименованию("Главный")</code>. <code>Сообщить(Выборка.Номенклатура.Наименование)</code> в цикле — отдельный запрос к БД на каждой строке. <code>ОбщегоНазначенияСервер</code> — модуля с таким именем в БСП нет. Голый <code>ПодробноеПредставлениеОшибки()</code> — устаревший глобальный метод с 8.3.17+.</p>
<p>Пришлось попросить переделать по правилам. Получилось — но не без напоминания)</p>
<hr />
<h2>Запрос с виртуальной таблицей</h2>
<pre><code class="language-1c">Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    ОстаткиИОбороты.Номенклатура КАК Номенклатура,
|    ОстаткиИОбороты.Номенклатура.Наименование КАК НоменклатураНаименование,
|    ОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачальныйОстаток,
|    ОстаткиИОбороты.КоличествоКонечныйОстаток  КАК КонечныйОстаток,
|    ОстаткиИОбороты.КоличествоПриход КАК Приход,
|    ОстаткиИОбороты.КоличествоРасход КАК Расход
|ИЗ
|    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
|        &amp;НачалоПериода, &amp;КонецПериода, Авто, Движения,
|        Склад = &amp;Склад) КАК ОстаткиИОбороты
|ГДЕ
|    ОстаткиИОбороты.КоличествоКонечныйОстаток &lt;&gt; 0";

Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(ТекущаяДата()));
Запрос.УстановитьПараметр("КонецПериода",  КонецДня(ТекущаяДата()));
Запрос.УстановитьПараметр("Склад",         Склад); // передавать ссылкой, не искать по имени

Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
        ОбщегоНазначения.СообщитьПользователю(СтрШаблон(
            "%1, остаток: %2",
            Выборка.НоменклатураНаименование,
            Формат(Выборка.КонечныйОстаток, "ЧДЦ=3")));
    КонецЦикла;
КонецЕсли;</code></pre>
<h2>Серверная процедура с обработкой исключения</h2>
<pre><code class="language-1c">&amp;НаСервере
Процедура ПровестиДокументНаСервере(Объект, Отказ)
    Попытка
        НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(Объект.Ссылка);

        Для Каждого СтрокаТЧ Из Объект.Товары Цикл
            Движение = НаборЗаписей.Добавить();
            Движение.ВидДвижения  = ВидДвиженияНакопления.Расход;
            Движение.Период       = Объект.Дата;
            Движение.Номенклатура = СтрокаТЧ.Номенклатура;
            Движение.Склад        = Объект.Склад;
            Движение.Количество   = СтрокаТЧ.Количество;
        КонецЦикла;

        НаборЗаписей.Записать();
    Исключение
        ОбщегоНазначения.СообщитьПользователю(
            ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),
            ,,,, Отказ);
    КонецПопытки;
КонецПроцедуры

&amp;НаСервереБезКонтекста
Функция ПолучитьОстатокНаСкладе(Номенклатура, Склад) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК КоличествоОстаток
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(
    |        , Номенклатура = &amp;Номенклатура И Склад = &amp;Склад) КАК Остатки";
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("Склад",        Склад);
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        Возврат Выборка.КоличествоОстаток;
    КонецЕсли;
    Возврат 0;
КонецФункции</code></pre>
<h2>JSON-сериализация и HTTP-запрос</h2>
<pre><code class="language-1c">ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);

Структура = Новый Структура;
Структура.Вставить("ШтрихКод",   "4607038302746");
Структура.Вставить("Количество", 5);
Структура.Вставить("Серия",      Строка(СерийныйНомер.УникальныйИдентификатор()));

ЗаписатьJSON(ЗаписьJSON, Структура);
JSONТекст = ЗаписьJSON.Закрыть();

HTTPСоединение = Новый HTTPСоединение("api.1c.ru", 443,,,, 30, Новый ЗащищенноеСоединениеOpenSSL());
HTTPЗапрос = Новый HTTPЗапрос("/v1/sync", Новый Соответствие);
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
HTTPЗапрос.УстановитьТелоИзСтроки(JSONТекст, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);

Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Если Ответ.КодСостояния = 200 Тогда
    ЗаписьЖурналаРегистрации(
        НСтр("ru = 'Интеграция.Синхронизация'"),
        УровеньЖурналаРегистрации.Информация, , , Ответ.ПолучитьТелоКакСтроку());
Иначе
    ЗаписьЖурналаРегистрации(
        НСтр("ru = 'Интеграция.Синхронизация'"),
        УровеньЖурналаРегистрации.Ошибка, , , СтрШаблон(
            НСтр("ru = 'HTTP %1: %2'"),
            Ответ.КодСостояния,
            Ответ.ПолучитьТелоКакСтроку()));
КонецЕсли;</code></pre>
<h2>Заодно — bash, sql, json</h2>
<pre><code class="language-bash">#!/bin/bash
# Bulk-import 1C XML files into infobase
ibcmd="C:/Program Files/1cv8/8.3.27.1989/bin/ibcmd.exe"
db="F:/Bases/test"

for xml in F:/exports/*.xml; do
  echo "Importing $xml..."
  "$ibcmd" config import --db-path="$db" "$xml" || exit 1
done
echo "Done"</code></pre>
<pre><code class="language-sql">SELECT
    p.id,
    p.title,
    pm.meta_value AS reading_time,
    COUNT(c.id) AS comment_count
FROM wp_posts p
LEFT JOIN wp_postmeta pm ON pm.post_id = p.id AND pm.meta_key = '_reading_time'
LEFT JOIN wp_comments c  ON c.comment_post_ID = p.id AND c.comment_approved = '1'
WHERE p.post_status = 'publish' AND p.post_type = 'post'
GROUP BY p.id
ORDER BY p.post_date DESC
LIMIT 10;</code></pre>
<pre><code class="language-json">{
  "version": "0.6.18",
  "theme": "androman",
  "highlight": {
    "languages": ["1c", "bash", "sql", "json"],
    "theme": "github-dark",
    "version": "11.10.0"
  }
}</code></pre>
<h2>Итог</h2>
<p>Патч вышел как npm-пакет <a href="https://www.npmjs.com/package/highlightjs-1c-bsl"><code>highlightjs-1c-bsl</code></a>: три прохода — ключевые слова, литералы, аннотации. RU + EN. Регистронезависимо.</p>
<p>Живые примеры с обоими синтаксисами: <a href="https://andromanpro.github.io/highlightjs-1c-bsl/">andromanpro.github.io/highlightjs-1c-bsl</a></p>
<p>Исходники: <a href="https://github.com/andromanpro/highlightjs-1c-bsl">GitHub</a> · <a href="https://github.com/andromanpro/highlightjs-1c-bsl/blob/main/README.ru.md">README на русском</a> · <code>npm install highlightjs-1c-bsl</code></p>


<p style="margin-top:1em;font-family:monospace;font-size:0.9em;">→ <a href="https://androman.pro/2026/05/02/test-1c-highlight/">открыть на androman.pro</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://androman.pro/2026/05/02/test-1c-highlight/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Разгон</title>
		<link>https://androman.pro/2026/05/01/razgon/</link>
					<comments>https://androman.pro/2026/05/01/razgon/#respond</comments>
		
		<dc:creator><![CDATA[Androman.pro]]></dc:creator>
		<pubDate>Thu, 30 Apr 2026 21:00:00 +0000</pubDate>
				<category><![CDATA[дев-лог]]></category>
		<category><![CDATA[ИИ-разработка]]></category>
		<category><![CDATA[1С]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[вайб-кодинг]]></category>
		<category><![CDATA[ИИ]]></category>
		<category><![CDATA[продуктивность]]></category>
		<guid isPermaLink="false">https://androman.pro/2026/05/01/razgon/</guid>

					<description><![CDATA[Думал, ИИ освободит время. Получилось другое — задач стало в три раза больше. Не как нагрузки, а как пространства. Маховик раскручивается.]]></description>
										<content:encoded><![CDATA[<p>В прошлом посте я насчитал — 41 час взаимодействия на семь визуальных pet-проектов за пять недель. Попросил ИИ проанализировать весь апрель —</p>
<p>147 часов активного общения с моделью. Тридцать активных дней из тридцати — каждый день апреля без пропусков. В среднем — около пяти часов в день, включая выходные.</p>
<p>И что самое удивительное &#8212; я не выгорел. То есть такой ритм и такая форма работы &#8212; это прям как подошедший пазл в мою СДВГ-шную голову. Раньше у меня была куча идей, они перерастали в планы, но быстро затухали, оставшись лежать либо забытым черновиком на задворках папок компьютера, либо неработающим приложением, когда столкнулся с проблемой, превышающей собственную компетенцию. Игра перевернулась с появлением ИИ &#8212; теперь от задумки до первого прототипа иногда проходит меньше 10 минут, и это обескураживает и пугает одновременно. Но что могу сказать точно — это увлекает так, как ничто другое не увлекало уже много лет. </p>
<p>При этом задач стало <strong>в три раза больше</strong>, чем было в начале месяца. Не закрытых — нет, новых. Каждая закрытая идея в течение часа порождала ещё две. Так получилось пространство, в котором интересно жить и из которого не хочется выходить.</p>
<p>Это не усталость. Это разгон.</p>
<h2>Что получилось за месяц</h2>
<p><strong>Продуктовый аудит крупной WMS-конфигурации</strong> под сертификацию «1С:Совместимо» — мой большой клиентский проект апреля. Два этапа поставки, около 185 источников в md по этапам аудита, восемь итоговых документов для четырёх типов руководителей (техдиректор, гендиректор, финдиректор, инвестор — у каждого свой угол), архитектурный разбор регистров, обзор безопасности, дорожная карта на 6-9 месяцев, финансовая модель и сравнение с шестью конкурентами по WMS. К концу месяца — комплект документов на ~400 страниц. В общем работа целого отдела разных специальностей на протяжении нескольких месяцев.</p>
<p><strong>Свои pet-проекты</strong> — про них уже <a href="https://androman.pro/2026/04/28/1c-stalo-skuchno/">отдельный пост</a>. Если коротко: 76 коммитов в <a href="https://github.com/andromanpro/ai-conversation-viz">ai-conversation-viz</a>, выпуск пакета <a href="https://github.com/andromanpro/lava-orb">@andromanpro/lava-orb</a> v0.1.1 на npm, две новых браузерных игрушки (<a href="https://andromanpro.github.io/orb-2048/">orb-2048</a>, <a href="https://andromanpro.github.io/orb-arkanoid/">orb-arkanoid</a>), редактор частиц <a href="https://github.com/andromanpro/fire-particle-editor">fire-particle-editor</a>, генератор печатных кроссвордов. Большинство под лицензией MIT, на GitHub.</p>
<p><strong>Свой блог androman.pro.</strong> Перезапустил на собственной теме для WordPress (15 итераций дизайна, см. <a href="https://androman.pro/2026/04/27/ya-eto-sdelal/">«Я это сделал!»</a>), опубликовал два поста за апрель. Раньше я не выкладывал ничего по 6 лет — теперь у меня в черновиках ещё восемь штук статей, включая этот. И проекты растут гораздо быстрее статей!</p>
<p>Я ненавижу инфоцыган, но на работе попросили рассказать про мой опыт использования ИИ. Оттуда выросло несколько статей, учебный курс, презентации и книга. Все в неотшлифованном виде, так что публиковать рано. Тем более каждый день я туда дописываю по кусочку и выстраиваю свой идеальный воркфлоу.</p>
<p><strong>Курсы и книга.</strong> Курс К01 «ИИ-Аудит 1С» — пять модулей по реализму процесса аудита плюс одиннадцать модулей самой механики. Курс К02 «ИИ-Разработка 1С» — структура и материалы (EDT, CodePilot1C, YAXUnit, SonarQube, GitSync). Книга «ИИ-аудит конфигураций 1С: полное руководство» по материалам К01 — две главы готовы, ещё несколько начаты, скрипт-сборщик в работе.</p>
<p><strong>Клиентские 1С-проекты</strong> — четыре активных направления. Техаудит большой 1С-системы с миграцией учёта (рекомендация архитектуры по результатам интервью с ИТ-командой сменилась с одной системы на три раздельные). Обновление складской системы у вендора с разбором обработчиков шинной интеграции и состоянием гонки в одном из обработчиков перемещения. Интеграция ЭТрН в УПП у производственного предприятия. Правки внешних форм для медицинской 1С. Без имён — это NDA-зона.</p>
<p><strong>Серия «Деформации ИИ»</strong> — семь черновиков о собственных граблях с моделью за апрель. Про синтетическую карту интеграций (контекстное заражение между проектами через общую папку), про самосохраняющиеся ошибки через ссылки, про инцидент со стиранием 100 файлов баз из-за уверенности в симметрии кодировок cp1251<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" />utf-8. Серия пишется как памятка-инструкция, не как обвинение модели — этим инструментом надо уметь пользоваться, и ошибки бывают и без него.</p>
<p><strong>ИИкона</strong> — мой pet-проект платформы ИИ-персонажа для контакт-центров. В апреле — исследование, диаграммы, описания API. Сам продукт ещё в подготовке, но <a href="https://github.com/andromanpro/1c-ai-connector">коннектор уже на гитхабе</a> — у него больше 50 звёзд. ИИ говорит, что мама бы мной гордилась). Только я понимаю, что он требует развития, но пока не могу к нему подобраться из за продуктивной прокрастинации.</p>
<p><strong>Инфраструктура (мини).</strong> SonarQube + BSL Plugin v1.17.2 запущены на NAS, форк CodePilot1C обновлён, openclaw перезапущен через NAS-ветку, удалённое управление Claude с телефона работает, скилл <code>cyrillic-paths</code> написан после двух инцидентов с кодировкой, скилл <code>androman-writing-style</code> собран после двух итераций самоанализа собственных текстов. Пара десятков мелких улучшений вокруг.</p>
<h2>Цифры месяца</h2>
<p>В сумме за апрель получилось:</p>
<ul>
<li><strong>~80 значимых сессий</strong> Claude Code (плюс пара сотен мелких автозадач — синтез заметок, обновление памяти, плановые скрипты; их в подсчёт человеческого времени не включаю)</li>
<li><strong>147 часов</strong> активного общения с моделью по правилу &lt;2 минут между сообщениями. Сначала посчитал по сессиям, получилось 169 — но это включает многозадачность (когда работают одновременно десктоп и удалённая сессия с телефона). После объединения по единому таймлайну осталось 147 — это реальное физическое время. Двадцать часов разницы — артефакт параллельной работы.</li>
<li>Пик активности — <strong>28 апреля, 9 часов</strong> (день публикации предыдущего поста)</li>
<li><strong>~300 МБ</strong> исходников в md / docx / pptx нового содержания</li>
<li><strong>~40 000 строк</strong> кода в pet-проектах (из прошлого поста)</li>
<li><strong>~50-60 значимых артефактов</strong> — документ / диаграмма / модуль / скилл / пост</li>
<li><strong>~150-200 модулей</strong> правленых в 1С-проектах</li>
<li><strong>2 публикации</strong> на блоге + <strong>7 черновиков</strong> «Деформаций» — уже больше</li>
</ul>
<p>Распределение часов по линиям (после нормализации на 147):</p>
<table>
<thead>
<tr>
<th>Линия</th>
<th>Часы Claude</th>
<th>Доля</th>
</tr>
</thead>
<tbody>
<tr>
<td>Другие клиентские 1С-проекты (4 направления)</td>
<td>~46</td>
<td>31%</td>
</tr>
<tr>
<td>Pet-проекты (WebGL/Canvas)</td>
<td>~36</td>
<td>25%</td>
</tr>
<tr>
<td>Продуктовый аудит крупной WMS-конфы</td>
<td>~30</td>
<td>20%</td>
</tr>
<tr>
<td>Блог androman.pro (перезапуск + переключения)</td>
<td>~13</td>
<td>9%</td>
</tr>
<tr>
<td>Инфраструктура / инструменты / исследования</td>
<td>~10</td>
<td>7%</td>
</tr>
<tr>
<td>Курсы К02 + книга</td>
<td>~6</td>
<td>4%</td>
</tr>
<tr>
<td>Личное (планирование, учёт времени)</td>
<td>~3</td>
<td>2%</td>
</tr>
<tr>
<td>ИИкона (исследование)</td>
<td>~3</td>
<td>2%</td>
</tr>
<tr>
<td><strong>Итого</strong></td>
<td><strong>~147</strong></td>
<td><strong>100%</strong></td>
</tr>
</tbody>
</table>
<p>Если бы делал то же самое <strong>без</strong> модели — приблизительная личная оценка по типам задач:</p>
<table>
<thead>
<tr>
<th>Линия</th>
<th>Часы Claude</th>
<th>Без ИИ — личная оценка</th>
</tr>
</thead>
<tbody>
<tr>
<td>Pet-проекты (WebGL/Canvas)</td>
<td>36</td>
<td>~8 месяцев ≈ ~1280ч</td>
</tr>
<tr>
<td>Продуктовый аудит крупной WMS-конфы</td>
<td>30</td>
<td>~3 месяца аналитики ≈ ~480ч</td>
</tr>
<tr>
<td>Другие клиентские 1С (4 направления)</td>
<td>46</td>
<td>~2.5 месяца ≈ ~400ч</td>
</tr>
<tr>
<td>Блог (тема + содержание + инфра)</td>
<td>13</td>
<td>~1.5 месяца WordPress + материалов ≈ ~240ч</td>
</tr>
<tr>
<td>Инфраструктура / инструменты</td>
<td>10</td>
<td>~3 недели ≈ ~120ч</td>
</tr>
<tr>
<td>Обучение / книга</td>
<td>6</td>
<td>~3 недели на материалы ≈ ~120ч</td>
</tr>
</tbody>
</table>
<p>Грубая прикидка — <strong>~2640 часов руками против 147 с моделью</strong>. Звучит как полтора года в полный рабочий день против одного апреля, и именно поэтому к этой цифре надо относиться осторожно. Не как к бизнес-метрике, а как к личному дневниковому масштабу: где-то модель правда срезала месяцы входа в незнакомую область, а где-то просто сидела рядом, пока я глазами проверял результат.</p>
<p>Эту оценку я гонял вместе с ИИ, так что в коммерческую презентацию её тащить нельзя. Я мог завысить ручной эквивалент в одних местах и занизить в других. Но для личного смысла — порядок похож на правду.</p>
<h2>Где модель съела больше времени, чем сэкономила</h2>
<p>На фоне этой скорости есть отдельный класс эпизодов, где сжатие <strong>отрицательное</strong>. Когда я потратил больше времени, чем потратил бы без модели. В апреле — шесть таких. Все они стали черновиками серии «Деформации ИИ».</p>
<p><strong>Контекстное заражение через общую папку.</strong> В корне рабочей директории лежал CLAUDE.md одного проекта. Модель прочитала его как «общий контекст», и в выводы по другому проекту просочились имена, факты, отрасли. Я обнаружил это через несколько сессий — артефакты пришлось откатывать, проверять перекрёстными ссылками, переписывать. Стоимость — пара дней разбора. Без модели я бы такой ошибки не сделал, потому что не было бы общей папки.</p>
<p><strong>Восемь выдуманных методов БСП в одной поставке.</strong> Модуль уверенно ссылался на <code>СтрокаЯвляетсяЧислом</code>, <code>ОбщегоНазначения.ТекущаяОрганизация</code> и так далее — методов, которых в БСП <strong>не существует</strong>. Поймал ручной проверкой по ИТС в самом конце цикла, перед сдачей. Стоимость — половина смены на проверку и переписывание шести публичных файлов. Без модели — методов было бы меньше, но и существовали бы они все.</p>
<p><strong>Состояние гонки в обработчике перемещения.</strong> Модель сама же дважды переписала код «по-старому», после чего сама же выявила состояние гонки в собственном свежем коде. Колесо. Я три раза сидел и убеждал её, что <strong>именно</strong> это место она же ломала час назад.</p>
<p><strong>Стирание 100 файлов баз.</strong> Уверенность модели в том, что cp1251<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" />utf-8 симметрично. Не симметрично оказалось. Слетели имена баз — я думал что не имена, а сами базы, и обнаружил это в холодном поту. Восстановил из бэкапа за полчаса. Без бэкапа было бы драматичнее.</p>
<p><strong>Категоричные архитектурные утверждения.</strong> Четыре регрессии за одну сессию: «не подходит вообще», «обязательно нарушает стандарт», «100% / всегда / никогда» — без ссылки на ИТС, без открытых источников. Поймал сам через самопроверку. После этого сделал отдельный скилл, который заставляет модель отделять факты от компромиссов.</p>
<p><strong>«Сам написал — сам забыл».</strong> Создал скилл с правилом, в этой же сессии его нарушил. Скилл указывал — для сессий в EDT-проекте сначала использовать семантические индексы (edt-mcp / Serena), а не Read/Grep. ИИ сделал скилл, и через двадцать минут полез искать по <code>*.bsl</code> руками. Скилл сработал бы — если бы ИИ не забыл его прочитать.</p>
<p>Эти шесть эпизодов суммарно — часов десять чистого овертайма. На фоне 147 — около семи процентов. На самом деле не так много &#8212; раньше над затыками в архитектуре или в сложных блоках кода я мог просидеть намного дольше. Но тут ошибки перемалываются и исправляются очень оперативно.</p>
<p>ИИ как лошадь — везёт быстро. Но если не держать поводья, увезёт в овраг и сам же удивится, как мы сюда попали.</p>
<h2>Главное открытие: разгон</h2>
<p>Каждая закрытая задача в апреле порождала две следующие. Не «то, что я мог бы сделать» — а <strong>то, что я уже задумал и хочу сделать сейчас</strong>. Между «было бы круто» и «это задача до конца недели» теперь несколько часов размышления, а не несколько месяцев накопления квалификации.</p>
<p>Получается так:</p>
<ul>
<li>Барьер входа в новую область <strong>упал</strong>. Я зашёл в WebGL2 не зная что такое <code>display:flex</code>. В графовую визуализацию — без знаний D3. В книгу — никогда не писал книг. В разбор чужих кодовых баз через семантические индексы — раньше это была работа на месяц чтобы только настроить инструменты. Теперь — на полчаса.</li>
<li>Стоимость прототипа <strong>околонулевая</strong>. Идея → черновик → проверка реальности занимает один вечер. Большинство идей умирают на этапе черновика, и это нормально. Раньше до этой точки — недели.</li>
<li>Каждый закрытый проект <strong>порождает соседей</strong>. Большой WMS-аудит породил скилл <code>1c-product-audit-discovery</code>. Тот породил методологию для других аудитов. Та породила пост на блог. Тот породил идею книги. Та породила курс. Курс породил материалы для следующего курса. Все эти артефакты реально стоят отдельно, у каждого своя ценность.</li>
<li>Соединения <strong>между областями</strong> работают. Pet-проект <a href="https://github.com/andromanpro/ai-conversation-viz">ai-conversation-viz</a> — визуализация диалогов с моделью, и она оказалась полезной для аудита. Работа с клиентами породила методологию, методология стала книгой, книга породила скилл <code>androman-writing-style</code>. Всё взаимосвязано и работает как единый организм — по кирпичикам или частицам пазла. Как в факторио или сфера Дайсона (это игрушки, которые забрали много моего времени — я прям залипал)</li>
</ul>
<p>В предыдущем посте я сформулировал тот же паттерн как <strong>проблему</strong>: «Скорость реализации опережает способность приоритизировать». Через несколько дней я понимаю — это не проблема. Это и есть <strong>продукт</strong>.</p>
<p>Бэклог — это не «то, что не сделано». Это пространство возможного, и оно <strong>расширяется</strong>. Если сжать его обратно — потеряешь ровно то, ради чего всё начато. Можно ныть про 30 невыполненных задач, можно жить в реальности, где их 30 живых, и каждая интересна.</p>
<p>Маховик. Раз набрал скорость — несёт. Тормозить можно, но зачем. Главное чтобы он вынес в правильное русло.</p>
<h2>Что дальше</h2>
<p>Май — финал крупного WMS-аудита, начало 6-месячного забега до сертификата «1С:Совместимо». Книга — следующие главы. Серия «Деформации ИИ» — часть черновиков перейдёт сюда отдельными постами, рабочее название «инструкция по эксплуатации модели».</p>
<p>Но есть тема, о которой неудобно молчать. У меня хроническая проблема — <strong>закрывать</strong> проекты. СДВГ хорош для разгона: гиперфокус в окне интереса даёт ровно те пять часов в день, которые я насчитал в логах. Но за окном интереса — оставляет хвост. На каждый закрытый проект — два-три открытых, и не все из них доходят до релиза.</p>
<p>Хвост на май:</p>
<ul>
<li><strong>ИИкона</strong> — доработать. Накопились запросы пользователей, да я и сам понимаю чего ей не хватает.</li>
<li><strong>Расширение для 1С по генерации диаграмм через ИИ</strong> — закончить плагин и выпустить статью.</li>
<li><strong>Личный астролог</strong> — обработка + статья. Эзотерика + ИИ = чистое искусство перфоманса. Жалко только что кто-то воспримет всерьёз.</li>
<li><strong>ИИкзаменатор</strong> — учебная платформа на базе ИИконы для автоматического создания и прохождения тестов.</li>
<li><strong>make-it-zbs</strong> — волшебная кнопка для компа. Одной командой улучшить всё что можно. Идея крутая, надо доводить.</li>
</ul>
<p>Когда хвост закроется — если закроется — приступать к собственным коммерческим продуктам. Помощник по саду и огороду: куда что посажено, когда поливать, что обрезать, интернет вещей в перспективе. <strong>Шелл Апокалипсиса</strong> — личные коллекции топов медиа: «сто лучших фильмов / книг / игр / альбомов» в одном месте, локально без интернета.</p>
<p>Маховик и так крутится. Получится ли не отрастить новый хвост, пока закрываю старый — отдельный вопрос.</p>
<p>Поживём — увидим. Пока мне это нравится, а значит сам путь приносит удовольствие, а не конец пути. В общем я на пути к дзену!)</p>


<p style="margin-top:1em;font-family:monospace;font-size:0.9em;">→ <a href="https://androman.pro/2026/05/01/razgon/">открыть на androman.pro</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://androman.pro/2026/05/01/razgon/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
