Перейти к содержимому
Levongo
Назад

Глоссарий контент-завода: 263 термина, которые появились из инцидентов

Обложка статьи «Глоссарий контент-завода: 263 термина, которые появились из инцидентов»

Контент завод — система, которая превращает сырьё (ссылки, видео, голосовые сообщения, книги) в готовые посты и статьи с помощью ИИ-агента. Звучит компактно. На практике за этим стоит стек из n8n, Postgres, Telegram и статического сайта, несколько десятков воркфлоу, база данных с очередями и расписаниями, бот с кнопками и гейтами — и постоянно растущий список слов, которые разные участники системы понимают по-разному.

Именно из этого понимания вырос документ, о котором пойдёт речь: рабочий глоссарий проекта @levongo под названием «Словарь терминов (глоссарий) применяемых в контент-заводе». Автор — @levongo. 263 термина, 15 тематических разделов, полтора десятка фаз разработки за плечами. Конспект ниже — попытка передать главное: зачем такой словарь нужен, из чего он состоит и почему его содержание устроено именно так.

Откуда берётся глоссарий

Словарь не писался заранее. Каждый термин появлялся в момент, когда без него нельзя было принять решение. Это важное уточнение: речь не о справочнике, составленном после завершения проекта, а о документе, который рос вместе с системой.

Правила ведения словаря тоже выработаны из практики, а не придуманы заранее. Три из них принципиальные: дописывать, а не переписывать; пополняет агент, а не человек; пополнение — часть завершения каждой сессии, а не отдельное занятие.

Последнее особенно важно. Термин фиксируется в момент появления или не фиксируется вовсе — позже его уже не восстановить с той же точностью. Поэтому в глоссарии есть записи с датами и исправлениями: «Ошибки не вычищены. Есть записи, которые начинались одним пониманием и потом исправлялись, — они так и оставлены, с датами. Мне кажется, это честнее и полезнее гладкого справочника: видно, что понимание приходит не сразу».

Главная функция словаря — общий язык между человеком и ИИ-агентом. Иллюстрация из книги: слово «канал» пять фаз подряд означало для владельца «телеграм-канал», а для агента — «направление доставки». «Расхождение здесь не выглядит ошибкой: обе стороны уверенно употребляют одно слово в разных значениях, и это выясняется только на конкретном примере». Когда это наконец выяснилось, разговор пришлось начинать заново — и обошёлся он дороже, чем стоило бы заметить расхождение сразу.

Как устроена система

Технический стек контент-завода: оркестратор n8n, база Postgres, Telegram как интерфейс владельца, статический сайт на Astro. Сырьё поступает разными путями — текстовые файлы, YouTube-видео, голосовые сообщения, книги — и проходит через конвейер воркфлоу до публикации.

Глоссарий разбит на 15 разделов, каждый закрывает свой слой системы:

Каждое определение привязано к конкретному случаю и описывает не только что означает термин, но и чем он «кусается» на практике. Теоретическое значение без описания ловушки не предупреждает ни о чём.

Чтобы был понятен масштаб, несколько примеров из разных разделов:

Воркфлоу — единица автоматизации в n8n: цепочка узлов, выполняемая по триггеру или вызову. В проекте их несколько десятков; каждый отвечает за один шаг конвейера — приём, генерацию, публикацию, проверку.

Гейт — точка ручного одобрения в конвейере. Бот присылает превью, владелец нажимает кнопку — только после этого пост уходит в канал или статья публикуется на сайте.

Слот — временная ячейка в расписании канала. Пост занимает слот, пока не опубликован; освободившийся слот снова доступен для очереди.

Сырьё — необработанный входящий материал: ссылка, видео, голосовое сообщение, файл. До прохождения через конвейер не является контентом.

Дрейф (drift) — расхождение между тем, что написано в конфиге или коде, и тем, как система работает в реальности. Обнаруживается drift-check’ом — автоматической сверкой генерируемых файлов с эталоном.

Гонка (race condition) — ситуация, когда два процесса читают одно и то же состояние до того, как один из них успел его изменить. Результат зависит от порядка выполнения, который не гарантирован.

Источник истины — единственный файл или запись, которая считается актуальной. Остальные ссылаются на него; дублей нет.

Мутационная проверка — способ убедиться, что тест живой: код намеренно ломают и проверяют, упал ли тест. Если тест остался зелёным — он ничего не защищает.

Append-модель — способ хранения метрик, при котором каждое новое значение добавляется новой строкой, а не перезаписывает старую. Позволяет видеть динамику, а не только последнее состояние.

ECH (Encrypted Client Hello) — расширение TLS, шифрующее имя сайта в первом пакете соединения. ТСПУ режет такие пакеты целиком, что выглядит как зависание загрузки без сообщения об ошибке.

Самые дорогие ошибки не кричат

Это утверждение — сквозная тема всего глоссария. «Если из всего словаря запомнить одну мысль, пусть будет эта: самые дорогие поломки не кричат».

Примеры из книги это подтверждают. 17 тестов не выполнялись ни разу с момента выката фичи — файл использовал node:test, агрегатор его не импортировал, тесты оставались зелёными при ручном запуске. Четыре дня не работал счётчик Яндекс.Метрики — скрипт был синтаксически корректным, ни ошибки в консоли, ни красного в сборке; он просто молча ничего не делал. Файлы в кодировке cp1251 при чтении как UTF-8 не дают ошибку — система молча превращает их в мусор и обнаруживает это только по доле символов-заменителей.

Отдельный класс — тихие отказы в параллельной работе. «Самый неочевидный класс ошибок: код верен, но два процесса делают одно и то же одновременно — и результат неверен». Одно нажатие кнопки, повторённое пять раз за секунду, дало пять записей в очереди из-за гонки read-then-write. Volatile-функция без MATERIALIZED раздала 169 черновикам 169 групп вместо 67. Backfill без границ объявил семь разных цитат вариантами одного поста.

Восстановленная из бэкапа копия завода — тоже потенциально молчащая угроза: «те же токены, те же каналы, тот же репозиторий блога, тот же бот. Запущенный рядом с боевым, он публикует, коммитит и тратит деньги параллельно, ничего не зная о брате-близнеце».

Ловушки, которые стоили реального времени

Глоссарий ценен именно тем, что фиксирует конкретные инциденты с датами, а не абстрактные предупреждения. Несколько из них стоит привести отдельно.

Регулярные выражения и русский текст. «Ловушка \b с русским текстом стоила полчаса отладки 17.08: граница слова в JavaScript отмеряется по латинскому алфавиту — русские буквы для него не буквы вовсе». Паттерн /^(предисловие|заключение)\b/ не совпадал никогда и ни с чем, ошибок при этом не возникало.

Переменные окружения и Docker. «Переменная, записанная в файл .env, не попадает внутрь контейнера автоматически». В docker-compose.yml есть секция, где переменные перечислены поимённо — и в процесс приходят только те, что там названы. «Отсюда правило диагностики: “есть в файле” и “есть в процессе” — два разных вопроса».

Bind-mount и inode. Проброс одного файла в контейнер привязан к inode, а не к имени. После git pull контейнер продолжает видеть старую версию файла — перезапуска недостаточно, нужно пересоздание контейнера.

ECH и блокировки. 16 августа levongo.ru был недоступен без VPN — не из-за блокировки домена или хостинга, а из-за того, что ECH в Cloudflare шифрует имя сайта в первом пакете TLS, и ТСПУ режет такие подключения целиком. Внешне это выглядело как зависание загрузки без сообщения об ошибке.

Омонимия поискового запроса. «“Игра жизни” — это книга Флоренс Скавел Шинн, но 189 136 показов в месяц по этой фразе делают люди, которые ищут компьютерную игру, аниме и настолку». Взять такую фразу главным запросом статьи — значит соревноваться не с блогами о книгах, а с Roblox.

Учения по восстановлению. Прогон 1 августа выявил проблемы не в самих бэкапах, а в процедуре вокруг них: сборке .env из менеджера паролей, подъёме стека, проверке ключа шифрования. «Каждая наша находка 01.08 была не в бэкапе, а в процедуре вокруг него — и увидеть их иначе было нельзя».

Принципы, выработанные из практики

Из инцидентов в глоссарии выросли операционные правила. Несколько из тех, что встречаются чаще всего.

Источник истины — один. Остальные файлы ссылаются на него, а не дублируют. Три копии одной логики неизбежно разъезжаются: правку вносят в одну, забывают в двух.

Генерируемые файлы не редактируются вручную. Они создаются генератором и проверяются на байт-идентичность через drift-check после каждого рефакторинга.

Параметризация вместо ветвления. Новый канал или модель добавляются строкой в конфиг, а не копированием кода.

Обязательное — кодом, содержательное — моделью. «Модель, которую попросили “не забудь поставить ссылку”, ставит её почти всегда — а “почти” означает статью, обещающую читателю то, чего в ней нет. Код не забывает, не путает адрес и не выдумывает его».

Зелёный тест — не равно защита. «“Тест зелёный” — утверждение о файле, а не о защите». Тест, не добавленный в агрегатор, не существует для системы. Мутационная проверка — единственный способ убедиться, что тест живой: намеренно сломать код и проверить, упал ли тест.

Маркер занятости должен иметь срок годности. SQL-блокировка живёт миллисекунды, а реальная работа — секунды. Без срока годности зависший исполнитель блокирует строку навсегда.

Метрики хранятся в append-модели. «Пост, набравший 500 просмотров за сутки, и пост, набравший столько же за месяц, — разные события, но в перезаписанной строке они выглядят одинаково».

Коротко

Что я об этом думаю

Читать этот глоссарий как справочник — значит получить от него меньше половины ценности. Настоящая ценность — в датированных инцидентах: видно не только что означает термин, но и при каких обстоятельствах он появился, сколько стоила ошибка и как её обнаружили. Это редкий формат документации.

Принцип «добавляет агент, а не человек» меня зацепил отдельно. Агент работает с терминами напрямую и замечает расхождения в момент их возникновения — человек в этот момент думает о задаче, а не о словаре. Передать пополнение агенту и сделать его частью завершения сессии — это не про лень, а про то, в какой момент термин точнее всего.

Книга адресована людям, пришедшим в разработку со стороны заказчика. Это честное позиционирование: здесь нет объяснений для разработчиков, зато есть объяснения для тех, кто принимает решения, не зная, как именно устроен инструмент. Именно этой аудитории чаще всего не хватает общего языка с теми, кто систему строит.

Если ты строишь что-то похожее на контент-завод — или просто работаешь с ИИ-агентом дольше одной сессии — заводить такой словарь стоит с первого дня. Не потому что это правило, а потому что расхождение в значении слова «канал» на пять фаз — это дорого.


Источник: Levon Go — «@levongo, Словарь терминов (глоссарий) применяемых в контент-заводе» (книга)


Поделиться статьёй:

Предыдущая статья
Вайбкодинг и ловушка параллельных задач: как я перестал тонуть в открытых терминалах
Следующая статья
Вайбкодинг и агентная инженерия: разбор лекции Андрея Карпатого