Контент Завод — новое ядро
Пересборка сервиса с нуля ради стабильности. Стенд newtest.24contentzavod.ru, папка /var/www/cz-core, порт 3003. Прод не трогаем до дня переключения. План: docs/00..08 + ACCEPTANCE.md
готовS1 · С0 · Фундамент13/13
Цель: Схема core, реестры состояний и инвариантов, триггеры, сборщик карты, каркас тестов, стенд newtest, гейт выкладки
готовS2 · С1 · Кошелёк и заказы14/14
Цель: Деньги перестают теряться: двойная запись, холды, идемпотентные заказы, чекпойнты шагов
готовS3 · С2 · Очередь и воркер11/12
Цель: Работа переживает сбои: Graphile Worker в той же базе, аренда, повторы, приоритеты
готовS4 · С3 · Внешние службы16/17
Цель: Провайдеры, вебхуки, деградация: снаружи может лечь что угодно, мы не теряем ни денег, ни работ
готовS5 · С4 · Арендаторы и права16/17
Цель: Организации, роли, вход под клиентом, изоляция данных и файлов
готовS6 · С5 · Деньги трёх уровней15/17
Цель: Агентство, клиент, самостоятельный: плательщик, наценка, тарифы, платежи, сверка, потолки
готовS7 · С6 · Производство и качество24/24
Цель: Линии контента поверх ядра, перенос пайплайнов дословно, канон формата, приёмка артефакта
готовS8 · С7 · Публикация и режимы12/13
Цель: Согласование как признак, публикация с версией, токены сетей, режимы и часовые пояса
готовS9 · С8 · Интерфейс20/20
Цель: СММ-Центр на новом ядре: ничего не пропадает, состояние правдивое, телефон сразу
готовS10 · С9 · Эксплуатация11/11
Цель: Метрики, тревоги, копии, релизы, признаки функций, инструкции по симптомам
готовS11 · С10 · Перенос данных10/10
Цель: Клиенты и контент переезжают без потерь, с отчётом по каждой таблице
В РАБОТЕS12 · С11 · Приёмка и переключение77/83
Цель: Нагрузка, хаос по каталогу отказов, аудит доступа, сверка денег, день переключения
готовS13 · С8а · Заводы4/4
Цель: Конвейеры производства возвращаются как первоклассная сущность. Итог: то, чем сегодня пользуются через /factory/*, работает на новом ядре.
В РАБОТЕS14 · С8б · Студия5/6
Цель: Разовые обращения к моделям поверх общего кошелька и очереди; семь мест списания схлопываются в одно
готовS15 · С8в · Вирус и Лия5/5
Цель: Оба перестают быть островами: работают через ядро, Лия получает СММ-Центр
готовS16 · С8г · Публичный API5/5
Цель: Полноценный API для заводов, СММ-Центра и Студии: ключи, квоты, версия, единый формат ошибок
готовS17 · Уроки с навесов6/7
Цель: Перенести в Контент Завод то, что проверено живыми генерациями на проекте навесов.
В РАБОТЕS18 · С12 · Режиссёр роликов14/21
Цель: ЧЕРНОВИК НА ПОДУМАТЬ, этапы не утверждены. Ролик собирается не склейкой двух клипов, а режиссёрским листом: эпизоды 2-5 сек с типами (лицо / вставка / сплит / моушен-карточка), слои, титры, пословные субтитры. Упор владельца: моушен-графика кодом (экраны телефона, UI-мокапы, терминал, барабаны выбора, счётчики), видео - лишь часть. Цель по себестоимости 300-500 руб за ролик. Движок Remotion (лицензия бесплатна: 1 сотрудник) + ffmpeg на подхвате. Прописка не решена: внутрь ядра, если успеем, иначе отдельный сервис и подключение по API.
В РАБОТЕS19 · С13 · Вид сервиса66/69
Цель: Разводная страница и три продукта на равных, вид уровня higgsfield и mage.space. Задача целиком: docs/ЮАЙ-ЗАДАЧА.md
готовS20 · С14 · Заводы: настройки по полкам3/3
Цель: Разложить настройки конвейера по страницам, страницу завода сделать пультом
готовS21 · С15 · Контент-план как продукт6/6
Цель: Темы придумывает сервис, состояния видны, выпуск можно запустить кнопкой
готовS22 · Проверки по сроку1/1
Цель: Отложенные проверки: сработало ли то, что чинили
В РАБОТЕS23 · С16 · Верность входу35/36
Цель: Что человек приложил, то и легло в контент: фото доходит до модели в студии и во всех линиях, несколько фото учитываются, цена = кнопка, готовое не провал. Плюс сценарии не хуже старого.
Ворклог (места остановки)
24contentzavod.ru переключён на ядро в 11:47 UTC (вариант А). Старый сервис заморожен (4 крона), перенос догнан — сверка 28/28 (починены перенос людей: 213 пустых сирот от проверок пропускаются; перенос работ: согласование после «готово»; 6 пустых тестовых кабинетов без владельца помечены удалёнными). Контур «бой», Метрика 106102698, автоматика включена. Найдено и починено: живые процессы ядра жили с проверочными флагами (тревоги владельцу не уходили, уведомления поддержки глохли) — выкат теперь их гасит и сверяет. Журнал ошибок в бою: core.error_log, ловец в браузере, сбор журналов pm2 раз в 5 мин, суточный разбор 09:00 МСК (сводка владельцу + полный отчёт /var/log/cz-razbor), экран /admin/oshibki.
→ Второй круг журнала по отчёту критика (точность сводки) — исполнитель в ветке fix-zhurnal2, выкатить. Владелец: адрес ЮKassa → /api/pay/yookassa, вход своим паролем, сброс пароля, пополнение 100 ₽, переобход Вебмастера. Ежедневно: разбор /var/log/cz-razbor/<дата>.md и правки. Неделю держать откат (старый сервис не удалять).
10.10.2026. Этапы 1–4 плана доводки закрыты. Этап 1: деньги при обрывах FAIL-007/010, ручка /_next/image закрыта, конфиг дня переключения получил правило денежных таблиц REST от 03.10. Этап 2: 4 критика по дифу с 02.10 — 46 находок (автоцепочка план→заказы→автопубликация, граница своего, Kie по документации, проверки гейта портили общую базу), 5 исполнителей закрыли все с экзаменами; миграция 0072 (признак — строка на область) с «да» владельца. Этап 3: обход 80 адресов×4 вида — 46 находок, major закрыты; сквозной путь СММщика пройден. Этап 4 на живых деньгах (1 аватар): 5 дефектов найдено и закрыто (прокси резал ответы по символам, длина звука, повтор выкладки, карусель-провал с полным списанием, выдуманный бренд), после правок всё вышло. Стенд newtest на master 15b854e, гейт зелёный, 627 юнит-тестов.
→ Этап 5 — переключение 24contentzavod.ru на ядро: ждёт «да» владельца и даты. До дня: решения Р-29…Р-46 (дефолты применены), SUPPORT_HOOK_SECRET и CZ_CONTOUR=бой в боевом .env, адрес уведомлений ЮKassa, сообщение Dandelion про сети. Обновить снимок на GitHub (ветка github-snapshot). Перемерить экономику поста (Р-45).
03.10: закрытый репозиторий github.com/Logonchek/cz-core создан (через браузер владельца) и залит чистым снимком 1aca2d0 — дерево master b6d3c01 одним коммитом, без истории (в ранней истории .env.bak с паролем базы). Перед пушем дерево проверено на секреты: только заглушка в .env.example и открытые сертификаты.
→ Обновлять GitHub снимком поверх github-snapshot (commit-tree -p), историю master не пушить. Дальше по ядру: FAIL-205, этап 4 (платная проверка контента по «трачу?»), день переключения.
03.10 ночь: по «да» владельца внедрены Р-23 (выбор голоса аватара при фото), Р-25 (фото пункта плана — товар у всех форматов), Р-28 (фотосессия по доле вышедших кадров); остальные Р приняты как были. Выкачено на стенд, гейт зелёный, vitest 534/534.
→ GitHub — ждёт пустой репо Logonchek/cz-core (чистый снимок без истории); FAIL-205 (человек в двух организациях); этап 4 — платная проверка контента по «трачу?» (~1 860 ₽); день переключения.
03.10 вечер: по ОТК границы своего — админка ядра проверяла сотрудника только в каркасе layout, при частичной отрисовке страницы отдавали данные без входа (воспроизведено на стенде). Теперь проверка в теле каждой страницы (c2e71d2), экзамен по исходникам 56/56 в гейте; «войти под клиентом» сверяет цель (не сотрудник, член организации). Выкачено, гейт зелёный.
→ FAIL-205 (человек в двух организациях: действия с брендом из адреса); GitHub — ждёт пустой репо; решения Р-21…Р-28; на старом сервисе — «да» на security-правку и выкат 15e0496e+c497c814.
02–03.10: спринт «Верность входу» выкачен на стенд newtest (master fd206d5, гейт зелёный). Общий узел kie.ts: фото и кадры доходят до модели (пара t2i→i2i, отказ до оплаты, пропорция, секунды по доке Kie). Студия ВХ-С1…9 и линии ВХ-Л0…8 — фото, места, цена = кнопка, готовое не провал, план = кнопка. Сценарист = промт прода v13 + gpt-4o + реплики звукорежиссёра: слепая сверка ядро 5.60 vs прод 5.30 (~55 ₽). Профили 356 брендов приведены к схеме, позиционирование 10 заводов перенесено. ОТК тремя критиками: подпись чужого файла через %2e%2e (закрыто, src/put.ts), двойной запуск пункта = 2 списания (закрыто), чужой объект по id из формы во всех действиях + админка без проверки сотрудника (закрыто, src/svoe.ts, 296 проверок в гейте). Выкат: откат теперь работает (копия вне .next), гейт ловит ловушку server action и обход страниц.
→ 1) Вердикт критика по границе своего (fd206d5). 2) FAIL-205: человек в двух организациях. 3) GitHub: владелец создаёт пустой закрытый Logonchek/cz-core — пушить чистый снимок без истории (в истории .env.bak с паролем). 4) Решения Р-21…Р-28 (дефолты применены). 5) Этап 4 (платная проверка контента, ~1 860 ₽) — по «трачу?». 6) Перед переключением: закрыть дыру REST старого сервиса (perenos-dengi берёт балансы из public.profiles).
02.10 (после «ок» на план): этап 1 доводки. Починено с экзаменами до кода и выкачено на newtest (гейт зелёный): «Сохранить» на «Сетях» ломал страницу; согласие Лии исполняется; старые адреса переадресуются; конфиг nginx дня переключения готов. Разметка каталога отказов (248) вскрыла и закрыто: автозапуск планов не был подключён; шаг «авто: готовое → расписание» не был написан; пропущенный слот против решения В-12; ключ API уволенного; действия в просмотре под клиентом; оборванная отправка; себестоимость вебхуков. Вид на телефоне: шапка кабинета, пульт студии, главная. Коммиты 69e3672…d92519a.
→ Ждёт владельца: Р-1 (репозиторий), Р-2 (бот поддержки), Р-3 (потерянные файлы), Р-11 (вариант переключения А/Б), Р-12 (годовые цены на проде), смета этапа 4 и сверки текстов. Дальше по коду: тесты на 10 денежных механизмов без проверки; приёмка качества — со сметой; повторный обход интерфейса.
02.10: перенесён урок Студии рабочего сервиса. src/casting.ts — послесловие о славянской внешности к промту ролика студии (с фото — человек с фото остаётся собой), studio-help.ts — помощник пишет для ролика одну сцену. Тест src/casting.test.ts 6/6. Гейт поймал мою правку сценариста рабочего сервиса (перенос не воспроизводился) — правка там откачена, перенос снова байт в байт. Выкачено на newtest: гейт зелёный, 86 страниц без беды. Коммиты fe82925, ef4996f. Написан docs/ПЛАН-ДОВОДКИ-2026-10.md. В ПО-СИМПТОМАМ добавлены «люди не той внешности» и «загрузка 500 от nginx».
→ Ждём «ок» на план и ответы Р-1…Р-10 (главные: репозиторий, бот поддержки, потерянные файлы, /docs). После «ок» — этап 1: ошибка функции в клиентском компоненте, согласие Лии на публикацию, сверка сетей через Upload-Post, конфиг nginx для разводки, сверка качества текстов с продом. Незакоммиченные правки прошлой сессии (поддержка: hooks/support, support-channels, b/[brand]/support, docs) лежат в дереве — не мои, разобрать.
Обращение владельца: Лия прислала «скриншот без текста», на сайте поддержки пусто. Разобрано: обращение в очереди ядра (newtest), не старого прода; сам файл — селфи случайного человека, написавшего боту публикаций. Починено: тревога о новом обращении несёт ссылку «Разобрать: …» на нитку. Выкат стенда зелёный. В OPEN-QUESTIONS В-24: бот публикаций не должен принимать поддержку, предложен перенос @contentzavodru_bot на ядро в день переключения.
→ Ждём решения владельца по В-24 (дефолт: как есть, тревога со ссылкой). Спам-нитка Майи Озеровой (02.09) и селфи Сергея висят в очереди newtest/admin/support — закрыть руками. Найти источник ошибки «Functions cannot be passed…» (задача в С13).
Проверил отчёт тестировщика кода и закрыл два блокера из трёх. СВЕРКА ОТЧЁТА. Блокеры 1 и 2 подтвердились до цифры: 107 файлов +13 689 строк без коммита с 19 августа, секрет вебхука Kie в .env.bak-20260809 совпадает с живым. Блокер 3 описан неточно: ошибка digest есть, но убывает (7.09 — 12, 8.09 — 4, 15.09 — 2), а не «ежедневно 25». Самая массовая ошибка в логах вообще другая и в отчёте не названа: Failed to find Server Action с мусорными id «x», «0», «1» — стенд щупает внешний сканер, кода это не ломает. СЕКРЕТ СМЕНЁН. Kie работает опросом, адрес возврата не передаётся, секрет у провайдера не зарегистрирован — смена безопасна. Health 200, вебхук без подписи 401. Нашёл второй бэкап .env.bak-2026-08-25, который лежал в дереве и уехал бы в историю первым же git add — оба вынесены в /root/env-backups, .gitignore расширен до .env*. ЗАКОММИЧЕНО: 419ef02, 418 файлов, дерево чистое, секретов в индексе нет. ЗАГОЛОВКИ БЕЗОПАСНОСТИ на стенде: HSTS, X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy, через always — отдаются и на ошибках. Бэкап конфига, nginx -t, reload без даунтайма, /login 200. CSP намеренно нет: Next со встроенными скриптами без nonce ляжет. ПО ТРЁМ ВОПРОСАМ ВЛАДЕЛЬЦУ дал рекомендации: расхождение ровно на 100 ₽ у двоих — скорее всего подарок за регистрацию, сверить транзакцию до выбора «чьё число верно»; 878 мёртвых ссылок — бросить, но показывать «файл не сохранился у провайдера», 116 картинок строкой перенести в хранилище; 35 соцсетей — плашка «переподключите», остальное не блокировать.
→ Ждёт владельца: создать приватный пустой репозиторий на github.com/Logonchek и назвать имя — push с cfru готов, ключ авторизован. Три решения из отчёта (100 ₽, 878 ссылок, 35 соцсетей) по-прежнему за владельцем, рекомендации даны. Ошибка digest: не блокер, тренд убывающий; мусорные Server Action — шум сканера, при желании отсекать на nginx по заголовку Next-Action с невалидным id. Дальше по порядку владельца: этап 3, тестировщик интерфейса через ИИ Полигон.
16.09: владелец поставил задачу ИИ-монтажёра живого сырья (нарезка длинного, сборка из дублей с матч-катами, аутро для Пульса цен). Решение: делается отдельным проектом montazher (Atlas) со скиллом Claude Code и локальным конвейером на Windows; лист, критик и блоки Режиссёра переиспользуются, в Завод подключится по API позже. director-render на cfru остаётся выключенным.
→ С12 не трогаем; смотреть проект montazher.
ОТК-приёмка ядра перед продом (круг 1). Прогнано 20 наборов проверок, все зелёные: типы, юниты, 26 инвариантов базы, карта, окружение, покрытие договора, аудит доступа на настоящих данных (9), нагрузка 50 человек (p95 511 мс), деньги (16), платежи, касса, заказы (22), идемпотентность, сеансы, доступ, согласование (18), публикация, экраны, дым по вебу (69), сверка переноса (28). Безопасность: порт 3160 закрыт файрволом, админка постороннему 404, закрытые страницы редиректят на /login, пробный режим не включается в production, суточный потолок и отсечки баланса работают. Храповик покрытия поднят с 3 до 18 — экзамены усилены, не ослаблены. ВЕРДИКТ ЖЁЛТЫЙ, три блокера заведены задачами: некоммиченные 107 файлов без remote, действующий секрет вебхука Kie в истории git, ежедневная ошибка рендера при живой перерисовке. Отдельно: нагрузка мерена на 789 работах при критерии 5000, заголовков безопасности нет ни на стенде, ни на проде.
→ Владельцу три решения: чьё число верно у 2 человек с расхождением 100 руб; что делать с 878 работами с умершими ссылками и 116 картинками строкой в базе; переподключить 35 отвалившихся сетей. Дальше по порядку владельца: этап 1 закрыть спринты, этап 2 тестировщик кода, этап 3 интерфейс через Полигон, этап 4 платный контент, этап 5 переключение.
ЭТАП 1 ЗАКРЫТ ПО КОДУ. За сессию: выбор движков роликов в трёх местах с ценой по движку и длительности (и починены три неверных имени моделей Kie, из-за которых выбор был декоративным); экран заказа переведён на пульт вместо анкеты; раздел «Конкуренты» с переходом «чужой ролик → идея в свой план»; Лия смотрит на дела и предлагает следующий шаг; Режиссёр-ИИ «сценарий → лист»; служба рендера листа в mp4 (собрана, проверена и ВЫКЛЮЧЕНА признаком до усиления сервера — решение владельца); прописка 18 агентов ядра в бэкофисе с докладом о работе; номера отказов в проверках (3 → 18); три урока с навесов. ЭТАП 2, ОТК — вердикт жёлтый. Три находки со сценарием отказа, все починены: внешние вызовы без таймаута; служебные надписи, запекавшиеся в оплаченный ролик клиента; петля в разметке действий (неудачная отправка события порождала новую отправку). Не зелёный, потому что тронуты файлы проверок (там были вписаны старые суммы) и не прогонялся масштаб — он на этапе 4. ЭТАП 3, первый заход Полигона: 129 находок на 200 проверок по стенду, гостем и под учёткой. Побочно починен сам Полигон — обрезанная подробность роняла весь прогон на последнем шаге. СВЕРКА ПЕРЕЕЗДА: Метрика в ядре есть и продумана, но висит на переменной METRIKA_ID, которой на стенде нет нарочно; GA в ядре нет вовсе; из девяти проиндексированных адресов прода шесть открываются, два перенаправляются, а /docs отдаёт 404.
→ Владелец идёт вторым агентом сверять спринты и ломать. Дальше по его порядку — этап 3 (тестировщик интерфейса) с разбором находок Полигона: наезд блоков на iPhone, обрезанный и слипшийся текст на входе, мелкие кнопки под палец. ЖДЁТ РЕШЕНИЯ ВЛАДЕЛЬЦА: адреса на nginx, потерянные файлы работ, В-18 в Студии, Veo Omni и Kling Omni, оценка библиотеки блоков, нужен ли Google Analytics, что делать с /docs. По коду в этапе 1 незакрытого не осталось.
Прописка ИИ-агентов ядра через бэкофис сделана: 16 сотрудников Контент Завода заведены в реестре бэкофиса, ядро докладывает о каждой работе агента в общую ленту, бэкофис научился принимать доклады из чужих сервисов по HTTP. Проверено сквозняком без трат. Раньше в этой сессии: выбор движков роликов, цена по движку и длительности, экран заказа на пульте, три поломки Kie.
→ Осталось из списка владельца: перенос работ с прода в базу стенда, формула вживления человека в настоящее фото, стоп-темы проверкой после генерации, запись pm2 для сборщика ведёт обёртку. Обсудить: Veo Omni и Kling Omni. По бэкофису вторая половина (траты картинок и роликов через Kie) отложена владельцем и описана в задаче.
Выбор движков роликов сделан целиком: каталог из семи моделей, выбор в заводе, СММ-Центре и Студии, цена следует за моделью и длительностью. По дороге найдены и закрыты три поломки Kie: два выдуманных имени моделей в реестре, проверка имён, пропускавшая такое по построению, и декоративный выбор движка в съёмке. Экран «Создать контент» переведён с анкеты на пульт по согласованному варианту; починены наезд пульта на боковое меню и системная полоса прокрутки. Ранее в сессии: воронка и путь клиента в админке, запись отказов в одном месте, разметка в Студии, сверка остатка кредитов при отказе Kie.
→ По списку владельца осталось: прописка ИИ-агентов через бэкофис (делать), перенос работ с прода в базу стенда, формула вживления человека в настоящее фото, стоп-темы проверкой после генерации, запись pm2 для сборщика ведёт обёртку. Обсудить: Veo Omni и Kling Omni. Не забыть: в работающем приложении стоит CZ_CHECK=1 — флаг проверок выката протёк в живой процесс через pm2 --update-env, и всё, что им глушится, в кабинете молчит.
Аналитика клиента в админке доведена и проверена на живых данных. СДЕЛАНО · Экран «Путь клиента» (/admin/funnel): воронка от регистрации до оплаты, где теряем больше всего, что заполняют в компании, на чём упираются, кто перестал заходить. Всё считается кодом, ни одного числа от модели. · Оплату в воронке ищем через кошелёк: по полю payments.org_id выходило «заплатили 0» при 64 оплаченных платежах, потому что у перенесённых строк поле пустое. Стало 30 платящих. · Заполненность компании переписана честно: «сети» считаются по подключениям, а не по полю профиля (было 0% при живых публикациях), и подаётся не как последовательность — разделы настроек проходят в любом порядке. На экране прямо сказано, что 572 компании из 578 перенесены и их заполненность — след старого сервиса. · Отказы клиента теперь записываются: запись стоит в понятно(), через которую проходит каждое «нет» сервиса. Пишется код отказа, а не текст. · Разметка появилась в Студии — раньше там не писалось ничего, хотя именно там тратят деньги поштучно. НАЙДЕНО ПОПУТНО (важное) Выкат ставит себе CZ_CHECK=1, а pm2 --update-env забирает окружение оболочки целиком — кабинет жил с флагом проверок постоянно. Из-за этого молчали оповещения о новых обращениях в поддержку, и соединение приложения ставило core.check_run=1, по которому триггер помечает каждую заведённую организацию проверочной, а проверочное денежные сводки не считают. Первый настоящий клиент, зарегистрировавшийся на стенде, просто не появился бы в выручке. Ущерб не наступил: помечена одна организация, и она правда проверочная. Починено в двух местах — deploy.sh гасит флаг при каждом перезапуске, и ядро больше не считает проверкой процесс server.js. ПРОВЕРКА ПО СРОКУ Воркер ядра: крах-цикл не вернулся, закрыта.
→ Решения владельца, заведены задачами: ИИ-агенты сервисов вести через бэкофис (одно окно на работу) — решать один раз на всех агентов, не по каждому; траты агентов отложены владельцем на потом, галочка стоит. Ждёт ответа владельца: что такое «работы на проде» — это 1688 незавершённых работ в базе рабочего сервиса, надо решить, добивать их или списать при переключении. Открыто в С12: библиотека блоков, рендерер листа, Режиссёр-ИИ v1, форматы длинных роликов, пилот фабрики трендов. В С11: смешанный прогон нагрузки на живых деньгах (около 190 руб, ждёт «да»), переподключение сетей брендам, разведение адресов на nginx. Мелочь на посмотреть: в логе приложения повторяется «Functions cannot be passed directly to Client Components» — где-то в клиентский компонент уезжает функция. На работу не влияет, но шумит.
проба формы запроса, будет удалена
→ проба формы запроса, будет удалена
проба формы запроса, будет удалена
УЧЁТКИ: убрано 211 проверочных записей из базы КЛИЕНТОВ. Служба входа общая с рабочим сервисом, и каждый прогон ворот добавлял туда нового «клиента». Проверки переведены на две постоянные учётки; три прогона подряд и полный выкат — новых не появляется. ДОБЫТЧИК МАТЕРИАЛА: порядок по цене — моушен кодом, файлы клиента, сток, и только потом генерация. Девять проверок поймали запрос к несуществующей таблице (добытчик уходил бы в платную генерацию вместо бесплатного материала) и узкое правило счётчика. КАТАЛОГ ШРИФТОВ: собран из метаданных Google Fonts — 294 семейства с кириллицей, в каталог взяты 160. Характер берётся из полей API, выбор под бренд кодом. Все имена сверены с пакетом рендерера. Ошибка: перезаписал существовавший файл каталога, не проверив, что он есть; интерфейс восстановлен по проверке. РАЗБОРЩИК РОЛИКОВ (первый шаг фабрики трендов): готовый ролик → склейки, темп монтажа, длина хука, роли эпизодов. Бесплатный, поэтому применим пачками. Записано ограничение: ffmpeg сравнивает кадры по яркости и не видит смену плана внутри одной тональности.
→ ЖДЁТ ОТМАШКИ ВЛАДЕЛЬЦА (тратят деньги): · пилот фабрики трендов: выкачка 50 роликов через Apify (около доллара) и определение типа кадра моделью (рублей тридцать на пятьдесят роликов); · смешанный прогон нагрузки: 10 постов и 2 ролика разом, около 190 руб. ЖДЁТ РЕШЕНИЯ: прописка Режиссёра — внутрь ядра или отдельным сервисом. От неё зависят библиотека блоков и рендерер, последние два больших куска спринта. ОДНО КОРОТКОЕ ДЕЙСТВИЕ: написать боту @Contetn_zavod_MyVision_pub_bot что угодно — проверить приём обращений и файлов сквозняком. Сам не могу: бот не пишет человеку первым.
ПИСЬМА НА ВЫДУМАННЫЕ АДРЕСА ПРЕКРАЩЕНЫ. Владельцу пригрозили баном почтового ящика: воротные проверки на каждом выкате слали три письма в никуда. Заведена регистрация без письма служебным ключом, кабинет собирается тем же кодом, что у людей. Восстановление пароля проверяется по исходнику, без обращения к службе. 14 проверок проходят, накопленные учётки убраны. Правило записано в память. МОДЕЛИ ЗОВУТСЯ ПО ДОКУМЕНТАЦИИ. Владелец спросил, не встанет ли полстудии, — вопрос попал в точку. Нашлись три поломки: выбор движка молча подменялся на gpt-image-2 (проверено живьём: просили z-image, ушло gpt-image), поле картинок у моделей разное, а мы всем слали input_urls, и наш формат постов 4:5 знает не всякая модель. Источник правды нашёлся: docs.kie.ai/market/<путь>.md с OpenAPI-спекой. Имя вызова, поле картинок и пропорции теперь в реестре по документации, три новые проверки. Wan 3.0 доступен (я ошибочно сказал обратное): wan/3-0-video, до 30 секунд, 114 руб за 30 секунд в 480p. ТРИ УРОВНЯ ШАБЛОНОВ по решению владельца: премиум с OmniHuman (актёр берёт товар, ходит), средний с Kling Avatar, экономный с InfiniteTalk. На 30 секундах 394 / 198 / 55 руб. Проверка поймала ошибку: на экономном призыв выходил нулевой длины. РЕЖИССЁР: формат листа, критик кодом, три вопроса драматургии владельца, пословные субтитры из таймингов озвучки с выравниванием написанного и произнесённого. ПОДДЕРЖКА ПРИНИМАЕТ ФАЙЛЫ. Дыру доказал живой клиент: прислал два скриншота, а у нас осталась пометка. Теперь файл забирается сразу и виден в переписке. ПОЧИНЕН ДАШБОРД ATLAS: стек подняли без файла переменных, Redis встал в цикл, API отдавал 500. Поднял с --env-file, разбор записан в проект Atlas.
→ В РАБОТЕ: добытчик материала для режиссёра — выбирает источник эпизода в порядке цены: моушен кодом (0) → файлы клиента (0) → сток (0) → генерация (15-60 руб). Это то, что делает экономный уровень по-настоящему дешёвым. ДАЛЬШЕ по спринту режиссёра: библиотека блоков и рендерер (упираются в развилку «прописка режиссёра» — внутрь ядра или отдельным сервисом), фабрика трендов. ЖДЁТ ВЛАДЕЛЬЦА: · один короткий тест — написать боту @Contetn_zavod_MyVision_pub_bot, чтобы проверить приём обращений и файлов сквозняком (сам не могу: бот не пишет человеку первым); · решение по развилке «прописка Режиссёра»; · отмашка на смешанный прогон нагрузки (10 постов и 2 ролика разом, около 190 руб). ЗАМЕЧЕНО НА ПРОДЕ, не чинил: клиент упирается в тип завода — цены на товары есть только у типа «Селлеры (маркетплейс)», таких заводов 1 из 176, а сменить тип после создания нельзя. Из-за этого человек через 17 минут после регистрации идёт в поддержку.