КЛЮЧ24 / ЛАБОРАТОРИЯ ПОСТОВ

План, по которому
видно движение.

Здесь строится локальная система, которая получает TXT с данными компании и возвращает ровно десять проверяемых постов для VK. Статьи, веб-поиск и автоматическая публикация пока находятся за границей проекта.

360маленьких шагов
262сделано
98осталось
12контрольных ворот

01 / контрольная точка

Первый baseline
Qwen получен.

Локальный Qwen 30B вернул валидный CompanyAnalysis на русском языке: UNKNOWN сохранился, лишних ключей нет, контракт проходит проверку. Лимит 700 токенов оказался недостаточным, профиль 1400 токенов завершился штатно.

Обновление: 29 августа 2026 · baseline: QWEN-ANALYZE-COMPANY-SMOKE-001.

02 / полный маршрут

От материалов
к десяти постам.

01PL-0001—0030сделано

Паспорт проекта

Цель, границы MVP, VK как первая площадка, ровная терминология и запреты на публикацию без ручного решения.

Есть единый паспорт и понятная граница проекта.

02PL-0031—0060сделано

Аудит материалов

Материалы из SMM Downloads и мастер-инструкция собраны, прочитаны, каталогизированы и превращены в решения для будущего алгоритма.

Источники имеют статус: ядро, поддержка, позже, вне MVP или дубликат.

03PL-0061—0090сделано

Входной TXT

Компания передаётся в строгом JSON внутри TXT. Валидируются поля, даты, лимиты, UTF-8, факты, ссылки и происхождение входных данных.

Один и тот же вход даёт воспроизводимый нормализованный пакет.

04PL-0091—0120сделано

Схемы артефактов

Типизируем переходы pipeline: анализ компании, аудитория, роль бренда, Tone of Voice, редакционные слоты и Content Contract.

Каждый артефакт имеет версию, запрет лишних полей и проверяемые связи с фактами.

05PL-0121—0150текущий блок

Benchmark Qwen 30B

Проверяем реальный локальный runtime: JSON, UNKNOWN, лимиты, скорость, конфликты и соответствие ответа контракту. Baseline и robustness smoke уже записаны.

Только измеренные профили допускаются в pipeline.

06PL-0171—0200следом

Десять постов

Генерация, редактура под VK, проверка фактов, языка, тона, длины, CTA и разнообразия в наборе.

Получены ровно 10 пригодных черновиков или понятный отказ.

07PL-0201—0230следом

Аудит качества

Формируем пакет для внешней ИИ-проверки: вводные, системный промпт, результаты и параметры оценки.

Внешняя оценка отделена от автоматического исправления.

08PL-0231—0260позже

Лабораторные прогоны

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

Повторный прогон показывает, что исправление действительно улучшило результат.

09PL-0261—0290позже

Экспорт и хранение

Скачать весь набор в TXT, JSON и оценочный пакет. Сохранять версии и технический след без публикации в VK.

Результат можно показать другой ИИ и восстановить историю запуска.

10PL-0291—0320позже

Проверка русского языка

Сравнить Natasha, pymorphy3, LanguageTool/Yandex Speller и собственные правила; выбрать минимальный полезный контур.

Проверки помогают редактору, но не переписывают смысл бесконтрольно.

11PL-0321—0340позже

Интерфейс лаборатории

Две страницы: этот план и рабочая форма загрузки TXT с прогрессом, результатом, скачиванием и журналом запуска.

Пользователь понимает каждый следующий шаг без объяснений извне.

12PL-0341—0360позже

Предвнедренческий контроль

Регрессия, лимиты, безопасность, резервирование, ручное подтверждение и решение о переносе в основную систему.

Внедрение разрешается только после успешных лабораторных работ.

03 / выполняется сейчас

Контракты
артефактов.

PL-0122Зафиксировать GGUF checksumв работе
PL-0124Зафиксировать chat-template hashв работе
PL-0139Проверить 4, 8, 12 и 16 одновременных правилв работе
PL-0250Сверить route /laboratory-posts/plan/ с registryв работе

04 / стоп-линии

Качество важнее
скорости запуска.

  • Нет подтверждённого факта — нет утверждения в посте.
  • Нет понятной темы — модель не получает задачу на написание.
  • Внешняя оценка улучшает правила только после ручного решения.
  • Система выдаёт экспорт, но не публикует в VK автоматически.
  • Каждый прогон хранит вход, промпты, результат и версию алгоритма.

05 / атомарный реестр

Все шаги.
Один источник.

Реестр синхронизирован с мастер-планом: 319 выполнено, 0 в работе, 41 осталось. Фильтры работают локально и не отправляют содержимое наружу.

Показано: 360 из 360

PL-0001сделано

Зафиксировать рабочее название «Лаборатория постов».

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0002сделано

Зафиксировать площадку первой версии: VK.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0003сделано

Зафиксировать результат: десять постов.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0004сделано

Зафиксировать единственный источник фактов: входной TXT.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0005сделано

Зафиксировать отсутствие веб-поиска в MVP.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0006сделано

Зафиксировать модель: локальная Qwen 30B на `server2`.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0007сделано

Зафиксировать две публичные страницы лаборатории.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0008сделано

Найти папку `Downloads\SMM`.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0009сделано

Получить список всех файлов SMM.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0010сделано

Посчитать число файлов и общий объём.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0011сделано

Найти мастер-инструкцию по планированию.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0012сделано

Создать изолированную папку `POST_LAB`.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0013сделано

Создать каталог оригиналов SMM.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0014сделано

Создать каталог оригинала мастер-инструкции.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0015сделано

Скопировать SMM-файлы без изменения.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0016сделано

Скопировать мастер-инструкцию без изменения.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0017сделано

Рассчитать SHA-256 исходников.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0018сделано

Рассчитать SHA-256 копий.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0019сделано

Сравнить исходные и скопированные хеши.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0020сделано

Сохранить manifest происхождения файлов.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0021сделано

Подготовить текстовые представления HTML.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0022сделано

Найти точные дубли.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0023сделано

Зафиксировать пропуски в нумерации.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0024сделано

Прочитать мастер-инструкцию планирования.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0025сделано

Выделить Research First и Research Gate.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0026сделано

Классифицировать SMM-документы по слоям системы.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0027сделано

Отделить правила MVP от будущих возможностей.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0028сделано

Исследовать официальный MCP Registry.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0029сделано

Исследовать русскоязычные language tools.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0030сделано

Сформировать первичный аудит локального reuse.

Этап 01. Источники, исследование и границы — PL-0001…PL-0030

Ворота: не назначены
PL-0031сделано

Написать паспорт проекта.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0032сделано

Описать пользовательский путь от страницы до экспорта.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0033сделано

Описать критерии готового набора.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0034сделано

Описать защищённые ошибки.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0035сделано

Описать то, что не входит в MVP.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0036сделано

Установить URL лаборатории `/laboratory-posts/`.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0037сделано

Установить URL плана `/laboratory-posts/plan/`.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0038сделано

Отделить публичность страницы от доступа к GPU.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0039сделано

Выбрать strict JSON внутри `.txt`.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0040сделано

Выбрать отдельный backend лаборатории.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0041сделано

Выбрать отдельное лабораторное хранилище.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0042сделано

Выбрать polling для прогресса MVP.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0043сделано

Выбрать последовательный worker из-за `parallel=1`.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0044сделано

Выбрать независимый внутренний QA.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0045сделано

Выбрать ручной импорт ответа внешнего оценщика.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0046сделано

Запретить автоматическое применение AI-советов.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0047сделано

Установить максимум двух целевых ревизий.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0048сделано

Установить отсутствие автопубликации VK.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0049сделано

Установить TXT и JSON как форматы результата.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0050сделано

Установить отдельный evaluation packet.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0051сделано

Назначить владельца финального решения о качестве.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0052сделано

Назначить владельца production-деплоя.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0053сделано

Назначить владельца доступа к GPU-запуску.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0054сделано

Выбрать срок хранения лабораторных прогонов.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0055сделано

Выбрать максимальное число сохранённых прогонов.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0056сделано

Выбрать политику удаления пользовательских входов.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0057сделано

Выбрать текст пользовательского предупреждения о данных.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0058сделано

Выбрать начальный access-code режим.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0059сделано

Зафиксировать допустимое время одного прогона.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0060сделано

Подписать паспорт как baseline требований.

Этап 02. Паспорт, решения и измеримый результат — PL-0031…PL-0060

Ворота: не назначены
PL-0061сделано

Создать пример входного TXT.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0062сделано

Добавить `schema_version`.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0063сделано

Добавить карточку компании.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0064сделано

Добавить продукты и услуги.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0065сделано

Добавить сегменты аудитории.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0066сделано

Добавить позиционирование и роль бренда.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0067сделано

Добавить формальный Tone of Voice.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0068сделано

Добавить массив проверенных фактов.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0069сделано

Добавить разрешённые claims.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0070сделано

Добавить запрещённые claims.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0071сделано

Добавить обязательные qualifiers.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0072сделано

Добавить контентные предпочтения.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0073сделано

Добавить список unknowns.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0074сделано

Добавить notes как данные, не инструкции.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0075сделано

Написать JSON Schema входа.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0076сделано

Запретить неизвестные top-level поля.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0077сделано

Установить лимит файла 64 KiB.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0078сделано

Установить лимиты строковых полей.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0079сделано

Установить лимит 200 фактов.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0080сделано

Проверять расширение `.txt`.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0081сделано

Проверять UTF-8 декодирование.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0082сделано

Отбрасывать бинарный файл.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0083сделано

Отбрасывать пустой файл.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0084сделано

Отбрасывать JSON-массив вместо объекта.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0085сделано

Возвращать ошибки с точным JSON path.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0086сделано

Назначать каждому факту `FACT-###` в отдельном неизменяемом наборе fact records.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0087сделано

Принимать даты только в формате ISO или `UNKNOWN`.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0088сделано

Нормализовать URL без выдумывания схемы.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0089сделано

Отделять `UNKNOWN` от пустой строки.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0090сделано

Рассчитывать canonical input hash.

Этап 03. Входной TXT и нормализация фактов — PL-0061…PL-0090

Ворота: не назначены
PL-0091сделано

Описать `CompanyInput`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0092сделано

Описать `NormalizedFact`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0093сделано

Описать `UnknownRecord`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0094сделано

Описать `CompanyAnalysis`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0095сделано

Описать `AudienceTaskContext`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0096сделано

Описать `BrandRoleRecord`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0097сделано

Описать `ToneOfVoiceProfile`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0098сделано

Описать `EditorialSetPlan`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0099сделано

Описать `EditorialSlot`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0100сделано

Описать `ContentContract`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0101не сделано

Описать `HookCandidateSet`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0102не сделано

Описать `PostBlueprint`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0103не сделано

Описать `StructurePlan`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0104не сделано

Описать `ArgumentMap`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0105не сделано

Описать `DraftArtifact`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0106не сделано

Описать `VkVariant`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0107не сделано

Описать `SentenceTrace`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0108не сделано

Описать `QaIssue`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0109не сделано

Описать `QaReport`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0110не сделано

Описать `RevisionRecord`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0111не сделано

Описать `SetAuditReport`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0112не сделано

Описать `PipelineRun`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0113не сделано

Описать `StageRun`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0114не сделано

Описать `ExportBundle`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0115не сделано

Описать `EvaluationPacket`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0116не сделано

Описать `EvaluatorResult`.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0117не сделано

Включить `extra=forbid` во всех моделях.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0118не сделано

Версионировать каждую schema.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0119не сделано

Проверить cross-object invariants.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0120не сделано

Сгенерировать schema fixtures good/bad.

Этап 04. Схемы артефактов и инварианты — PL-0091…PL-0120

Ворота: не назначены
PL-0121сделано

Считать точную ModelRuntimeIdentity с `server2`.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0122не сделано

Зафиксировать hash GGUF или runtime manifest.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0123сделано

Зафиксировать версию `llama.cpp`.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0124не сделано

Зафиксировать chat-template hash.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0125сделано

Зафиксировать quantization `UD-Q3_K_XL`.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0126сделано

Зафиксировать фактический context size.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0127сделано

Измерить baseline latency одного короткого JSON.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0128сделано

Измерить parse-valid rate.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0129сделано

Измерить schema-valid rate.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0130сделано

Измерить semantic-valid rate.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0131сделано

Проверить сохранение UNKNOWN.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0132сделано

Проверить сопротивление просьбе «догадайся».

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0133сделано

Проверить сохранение чисел.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0134сделано

Проверить сохранение дат.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0135сделано

Проверить сохранение имён и URL.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0136сделано

Проверить модальность «может/гарантирует».

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0137сделано

Проверить конфликт разрешённого и запрещённого claim. (QWEN-ROBUSTNESS-SMOKE-002: оба утверждения сохранены, статус CONFLICT, догадка запрещена)

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0138сделано

Проверить instruction injection внутри notes.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0139не сделано

Проверить 4, 8, 12 и 16 одновременных правил.

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0140сделано

Проверить JSON при output limit. (QWEN-REPEAT-LIMIT-SMOKE-001: limit даёт finish_reason=length и невалидный JSON; ответ должен быть отклонён)

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0141сделано

Проверить повторяемость на пяти seed/run. (QWEN-REPEAT-LIMIT-SMOKE-001: 5/5 stop, одинаковый content SHA-256)

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0142сделано

Сравнить temperature 0.0/0.2 для structured stages. (QWEN-TEMPERATURE-PROBE-001: одинаковый JSON и одинаковый SHA-256)

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0143сделано

Сравнить temperature 0.4/0.7 для writing stage. (QWEN-TEMPERATURE-PROBE-001: тексты читаемы, но обе температуры добавляют неподтверждённые claims; нужен fact-gate)

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0144сделано

Проверить русский текст на language mixing. (QWEN-LANGUAGE-BRAND-PROBE-001: английских вставок в ответе нет, но факт-гейт всё равно обязателен)

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0145сделано

Проверить склонение названий бренда. (QWEN-LANGUAGE-BRAND-PROBE-001: бренд сохраняется буквально; склонение без явного правила не выполняется, что безопасно для trademark)

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0146сделано

Проверить естественность без few-shot. (QWEN-NATURALNESS-PROBE-001: связность приемлема, но даже мягкое «поможем» требует fact-gate)

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0147сделано

Составить ModelCapabilityCard. (POST_LAB/benchmarks/ModelCapabilityCard_Qwen3-30B-A3B-Instruct-2507.md)

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0148сделано

Заблокировать непрошедшие операции. (POST_LAB/contracts/runtime_gate.py: truncation, invalid JSON/schema и unsupported claims не допускаются)

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0149сделано

Выбрать inference profile для каждого stage. (POST_LAB/benchmarks/inference_profiles.json: structured/writing/repair)

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0150сделано

Зафиксировать benchmark report и checksum. (POST_LAB/benchmarks/BENCHMARK_MANIFEST.json)

Этап 05. Локальный benchmark Qwen 30B — PL-0121…PL-0150

Ворота: не назначены
PL-0151сделано

Описать DAG полного прогона. (POST_LAB/pipeline/README.md)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0152сделано

Описать зависимости общих стадий. (Общие стадии выполняются один раз; slot-контур — десять веток; audit_set/export только после полного pass)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0153сделано

Описать цикл десяти editorial slots. (POST_LAB/pipeline/README.md: slot 1…10 с одинаковым контуром)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0154сделано

Реализовать `normalize_input`. (POST_LAB/pipeline/normalize_input.py: validation, stable hash, FACT-### index)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0155сделано

Реализовать `analyze_company`. (POST_LAB/pipeline/analyze_company.py: direct Qwen runner with stop/schema admission)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0156сделано

Проверять, что analysis не добавил факты. (Smoke run: output содержит constraints/unknown_refs и проходит отдельный fact-gate контур)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0157сделано

Реализовать `plan_editorial_set`. (POST_LAB/pipeline/plan_editorial_set.py)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0158сделано

Требовать ровно десять slots. (artifact validation + test)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0159сделано

Требовать уникальные slot IDs. (POST-01…POST-10 enforced)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0160сделано

Проверять coverage целей компании. (каждый goal включается в objective слотов и проверяется quality-layer)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0161сделано

Проверять разнообразие pillars. (deterministic planner uses 10 distinct pillars)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0162сделано

Проверять разнообразие content types. (test requires at least 8 distinct types)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0163сделано

Проверять разнообразие communication effects. (planner assigns 10 distinct effects)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0164сделано

Проверять semantic duplicate тем. (quality-layer блокирует совпадающие/почти совпадающие topic token sets)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0165сделано

Реализовать `design_post`. (POST_LAB/pipeline/design_post.py)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0166сделано

Замораживать Content Contract. (contract валидируется до writing stage)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0167сделано

Генерировать несколько hooks. (3 hooks на slot)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0168сделано

Выбирать один hook по функции. (deterministic selected_hook_id)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0169сделано

Проверять evidence для hook. (каждый hook и argument map содержит fact refs)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0170сделано

Строить StructurePlan. (hook/context/useful_core/soft_cta)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0171сделано

Строить ArgumentMap. (claim + evidence_refs + SUPPORTED)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0172сделано

Реализовать `write_draft`. (POST_LAB/pipeline/write_draft.py; smoke run CONTRACT-POST-01)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0173сделано

Запретить writer менять contract. (read-only copy + equality check; unsupported claims остаются для audit)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0174сделано

Реализовать `edit_for_vk`. (POST_LAB/pipeline/edit_for_vk.py)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0175сделано

Выполнять ToV transform до language polish. (консервативная нормализация формата и forbidden-word gate)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0176сделано

Сохранять protected tokens. (brand token loss блокирует stage)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0177сделано

Реализовать `audit_post`. (POST_LAB/pipeline/audit_post.py: explicit PASS/FAIL and issue list)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0178сделано

Реализовать targeted `repair_post`. (POST_LAB/pipeline/repair_post.py: only isolated forbidden-claim sentence, max 2 attempts)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0179сделано

Реализовать финальный `audit_set`. (POST_LAB/pipeline/audit_set.py: exact ten, slot coverage, post PASS, objective uniqueness)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0180сделано

Реализовать deterministic export. (POST_LAB/pipeline/export.py: TXT/JSON only after set PASS)

Этап 06. Pipeline генерации десяти постов — PL-0151…PL-0180

Ворота: не назначены
PL-0181сделано

Создать versioned Prompt Registry.

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0182сделано

Разделить SYSTEM_ROLE и DATA_CONTEXT.

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0183сделано

Создать prompt для `analyze_company`.

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0184сделано

Создать prompt для `plan_editorial_set`.

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0185сделано

Создать prompt для `design_post`.

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0186сделано

Создать prompt для `write_draft`.

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0187сделано

Создать prompt для `edit_for_vk`.

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0188сделано

Создать prompt для `audit_post`.

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0189сделано

Создать prompt для `repair_post`.

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0190сделано

Создать prompt для `audit_set`.

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0191сделано

Добавить точное completion definition.

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0192сделано

Передавать только правила текущей стадии. (compile_messages принимает явный rules list)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0193сделано

Передавать immutable fields отдельно. ([IMMUTABLE_INPUTS] отделён от DATA_CONTEXT)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0194сделано

Не передавать полную историю чата. (compiler строит пакет только из текущего stage context)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0195сделано

Не передавать лишние документы SMM модели. (в пакет попадают только явно переданные данные)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0196сделано

Создать русский RuleRegistry. (rules/registry.json + rule_registry.py)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0197сделано

Добавить правила AI-клише. (rules/checks.py)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0198сделано

Добавить правила рекламного преувеличения. (rules/checks.py)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0199сделано

Добавить правила CTA. (unsupported channel check)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0200сделано

Добавить правила VK profile. (hashtag policy check)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0201сделано

Добавить правила Tone of Voice. (forbidden_words check)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0202сделано

Создать factual QA checks. (rules/qa_checks.py: known fact refs)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0203сделано

Создать hook-body checks. (selected hook must occur in text)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0204сделано

Создать logic/contradiction checks. (rules/qa_policy.py: modality contradiction detection)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0205сделано

Создать structure checks. (paragraph structure check)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0206сделано

Создать language/ToV checks. (language mixing + RuleRegistry forbidden words)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0207сделано

Создать repetition checks по metadata. (duplicate metadata detector)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0208сделано

Создать severity policy. (BLOCKING/HIGH/MEDIUM/LOW)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0209сделано

Создать repair routing table. (owner/targeted_repair/editorial_review/accept)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0210сделано

Regression-gate каждую prompt-версию. (prompts/regression_gate.py + PROMPT_SNAPSHOT.json)

Этап 07. Prompt Registry и внутренний QA — PL-0181…PL-0210

Ворота: не назначены
PL-0211сделано

Создать отдельный backend package. (POST_LAB/backend)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0212сделано

Создать settings без секретов в репозитории. (backend primitives use explicit paths; no secrets)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0213сделано

Создать SQLite migration v1. (POST_LAB/backend/db.py)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0214сделано

Создать таблицу jobs. (migration v1)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0215сделано

Создать таблицу stage runs. (migration v1)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0216сделано

Создать таблицу evaluator imports. (migration + record_evaluator_import helper)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0217сделано

Создать приватный artifact root. (POST_LAB/backend/artifacts.py)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0218сделано

Записывать JSON атомарной заменой. (fsync + os.replace)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0219сделано

Устанавливать безопасные file permissions. (0700 directories, 0600 files where supported)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0220сделано

Реализовать job state machine. (backend/state.py + SQLite job store)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0221сделано

Реализовать single-worker claim lock. (BEGIN IMMEDIATE + conditional claim)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0222сделано

Реализовать crash recovery. (running → blocked, safe resume path)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0223сделано

Реализовать bounded provider retry. (только transient errors, max 3 attempts)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0224сделано

Отличать retry от revision. (reliability.is_revision)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0225сделано

Реализовать no-progress stop. (ProgressGuard по artifact hash)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0226сделано

Реализовать job cancellation между stages. (CancellationToken checkpoint)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0227сделано

Реализовать Qwen client на loopback. (POST_LAB/backend/qwen_client.py)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0228сделано

Проверять model identity в ответе. (/v1/models confirmed qwen3-30b-a3b-instruct-2507 loaded)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0229сделано

Логировать latency и token usage. (chat telemetry contains technical metrics only)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0230сделано

Не логировать сырой приватный input. (client telemetry excludes message content)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0231сделано

Создать `POST /jobs/validate`. (backend/service.py validate_job_input)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0232сделано

Создать `POST /jobs`. (backend/service.py create_job_from_txt)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0233сделано

Создать `GET /jobs/{id}`. (backend/service.py get_job)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0234сделано

Создать `GET /jobs/{id}/posts`. (service.get_posts)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0235сделано

Создать TXT export endpoint. (service contract uses pipeline.export_set)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0236сделано

Создать JSON export endpoint. (service contract uses pipeline.export_set)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0237сделано

Создать evaluator packet endpoint. (service.build_evaluator_packet)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0238сделано

Создать evaluator result import endpoint. (service.import_evaluator_result)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0239сделано

Создать health/readiness endpoints. (service.health)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0240сделано

Создать OpenAPI security review. (POST_LAB/backend/OPENAPI_SECURITY_REVIEW.md; public API remains disabled)

Этап 08. Backend, worker, хранение и API — PL-0211…PL-0240

Ворота: не назначены
PL-0241сделано

Создать machine-readable task registry. (POST_LAB/plan/task_registry.py + task_registry.json)

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0242сделано

Перенести 360 task records без потерь. (registry validation requires contiguous PL-0001…PL-0360)

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0243сделано

Добавить status enum. (done/todo in registry)

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0244не сделано

Добавить phase и gate refs.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0245не сделано

Добавить owner field.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0246не сделано

Добавить evidence links.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0247не сделано

Добавить updated_at.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0248сделано

Валидировать уникальность task IDs. (registry validation)

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0249сделано

Валидировать отсутствие пропусков ID. (registry validation)

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0250сделано

Создать route `/laboratory-posts/plan/`.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0251сделано

Добавить заголовок и паспорт проекта.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0252сделано

Добавить общую шкалу прогресса.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0253сделано

Добавить счётчики done/in progress/todo.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0254сделано

Добавить фильтр по статусу.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0255сделано

Добавить фильтр по этапу.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0256сделано

Добавить поиск по task ID.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0257сделано

Добавить список всех атомарных шагов.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0258сделано

Добавить визуальные GATE-разделители.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0259сделано

Добавить блок архитектурных решений.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0260сделано

Добавить блок текущих рисков.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0261сделано

Добавить блок проведённых экспериментов.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0262сделано

Добавить links на evidence artifacts.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0263сделано

Добавить legend статусов.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0264сделано

Добавить печатный режим.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0265сделано

Добавить mobile layout.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0266сделано

Добавить keyboard navigation.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0267сделано

Добавить reduced-motion режим.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0268сделано

Запретить индексирование plan page.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0269сделано

Добавить ссылку на лабораторию.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0270сделано

Сверить страницу с task registry checksum.

Этап 09. Публичная страница плана — PL-0241…PL-0270

Ворота: не назначены
PL-0271сделано

Создать route `/laboratory-posts/`.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0272сделано

Добавить краткое объяснение результата.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0273сделано

Добавить ссылку на полный план.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0274сделано

Добавить кнопку скачивания шаблона TXT.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0275сделано

Добавить drag-and-drop `.txt`.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0276сделано

Добавить обычный file picker.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0277сделано

Показать имя и размер файла.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0278сделано

Показать локальную ошибку расширения.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0279сделано

Отправить файл на server validation.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0280сделано

Показать список ошибок JSON path.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0281сделано

Показать нормализованную сводку компании.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0282сделано

Попросить явное подтверждение запуска.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0283сделано

Передать access code без сохранения в localStorage.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0284сделано

Создать job.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0285сделано

Показать позицию в очереди.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0286сделано

Показать текущий stage.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0287сделано

Показать номер поста 1–10.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0288сделано

Показать elapsed time.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0289сделано

Показать safe retry/failure message.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0290не сделано

Показать частичные результаты отдельно.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0291не сделано

Отобразить десять карточек постов.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0292не сделано

Показать тему, angle и audience.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0293не сделано

Показать финальный текст.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0294не сделано

Показать QA status и issues.

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0295сделано

Добавить copy-to-clipboard для поста. (кнопка копирует весь набор из 10 постов)

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0296сделано

Добавить download TXT. (рабочая страница лаборатории, client-side export)

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0297сделано

Добавить download JSON. (рабочая страница лаборатории, client-side export)

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0298сделано

Добавить download evaluation packet. (рабочая страница лаборатории)

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0299сделано

Добавить поле вставки evaluator JSON. (локальная schema-проверка)

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0300сделано

Показать evaluator summary и root stages. (итоговый вердикт, top_3_fixes и post scores)

Этап 10. Рабочая страница лаборатории — PL-0271…PL-0300

Ворота: не назначены
PL-0301сделано

Создать вымышленную сервисную компанию A. (`fixtures/company_smoke_a.txt`, remote PASS)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0302сделано

Создать вымышленную товарную компанию B. (`fixtures/company_product_b.txt`)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0303сделано

Создать вымышленную экспертную компанию C. (`fixtures/company_expert_c.txt`)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0304сделано

Создать корректный TXT для A. (`fixtures/company_smoke_a.txt`, validate=true)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0305сделано

Создать корректный TXT для B. (remote `/validate`: `valid=true`)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0306сделано

Создать корректный TXT для C. (remote `/validate`: `valid=true`)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0307сделано

Создать sparse-input fixture. (`fixtures/company_sparse_smoke.txt`, remote validate: 29 issues, no job)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0308не сделано

Создать conflicting-facts fixture.

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0309не сделано

Создать prompt-injection fixture.

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0310не сделано

Создать Unicode/ё/кавычки fixture.

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0311сделано

Создать malformed JSON fixtures. (`company_malformed_smoke.txt`: json; `company_array_smoke.txt`: root_type)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0312не сделано

Создать oversized input fixture.

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0313сделано

Тестировать все JSON Schema bounds. (автотесты contracts/company_input и artifact_contracts)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0314сделано

Тестировать fact ID stability. (автотест build_fact_records)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0315сделано

Тестировать canonical hash stability. (автотест canonical_input_hash)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0316сделано

Тестировать exact ten slots. (remote jobs A, service B and product B: 10/10)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0317сделано

Тестировать duplicate topic rejection. (test_plan_editorial_set)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0318сделано

Тестировать unsupported claim rejection. (test_runtime_gate и test_pipeline_state)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0319сделано

Тестировать qualifier preservation. (аудит блокирует пропуск обязательной формулировки; регрессионные тесты)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0320сделано

Тестировать hook-body mismatch. (QA regression test)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0321сделано

Тестировать CTA target integrity. (test_rule_checks: unsupported phone CTA)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0322сделано

Тестировать brand role drift. (блокировка явного расхождения роли бренда; регрессионные тесты)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0323сделано

Тестировать Russian language mixing. (QA regression rule)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0324сделано

Тестировать bounded repair. (remote repair cases + 61 local regression tests)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0325сделано

Тестировать no-progress stop. (test_reliability: ProgressGuard)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0326сделано

Тестировать crash/resume. (test_job_store: claim/recovery)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0327сделано

Тестировать export checksums. (62 локальных теста; SHA-256 каждого текста и канонического JSON-пакета)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0328сделано

Калибровать rubric внешнего оценщика. (зафиксированы якоря 1–5, blocker-гейты, агрегирование и verdict)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0329сделано

Провести pairwise baseline/candidate review. (зафиксирован ослеплённый протокол, protected gates и порог принятия)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0330сделано

Заморозить regression dataset v1. (8 fixture-хешей, основной и boundary-наборы, правило v2)

Этап 11. Тесты, фикстуры и независимая оценка — PL-0301…PL-0330

Ворота: не назначены
PL-0331сделано

Провести threat model публичного upload/API. (зафиксированы границы доверия, угрозы, защиты и проверяемые security-gates)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0332сделано

Проверить path traversal через filename. (hostile filename сохраняется только как metadata; файловый путь не создаётся)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0333сделано

Проверить MIME spoofing. (binary PNG с расширением `.txt` отклоняется UTF-8/JSON-валидатором)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0334сделано

Проверить JSON resource exhaustion. (лимит 64 KiB и graceful rejection чрезмерной глубины JSON)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0335сделано

Проверить XSS в отображаемых постах. (React text rendering; в лабораторном компоненте нет raw HTML/innerHTML)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0336сделано

Проверить prompt injection в каждом поле. (все входные поля остаются DATA_CONTEXT; системное сообщение не содержит маркер данных)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0337сделано

Проверить отсутствие secret leakage. (access code только в server-side env; frontend и static export без secret assignment)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0338сделано

Проверить rate limit. (5 запусков на IP за 60 секунд; превышение возвращает 429/Retry-After)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0339сделано

Проверить глобальный concurrency limit. (не более 2 active jobs; очередь защищена ответом 429/Retry-After)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0340сделано

Проверить access-code rotation. (server-side env, request-time read, compare_digest и процедура ротации без rebuild frontend)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0341сделано

Собрать frontend production export. (Next static export собран; laboratory-posts и plan имеют index.html)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0342сделано

Прогнать lint/type/build. (production build, TypeScript и SEO export-check завершены без ошибок)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0343сделано

Прогнать backend unit/integration tests. (81 локальный тест; live `/post-lab-api/health` отвечает 200)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0344сделано

Создать systemd unit backend. (user unit enabled/active; localhost:18084; Restart=on-failure)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0345сделано

Создать systemd unit worker. (standalone SQLite polling worker; systemd Restart=on-failure)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0346сделано

Создать nginx exact-location proxy. (маршрут `^~ /post-lab-api/` на localhost:18084, body limit 64k)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0347сделано

Проверить `nginx -t`. (syntax ok/test successful; nginx active; повторный public health 200)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0348сделано

Создать backup затрагиваемых файлов. (server2 backup `20260829-1948-predeploy`; backend, units и nginx сохранены; env/secret исключены)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0349сделано

Записать pre-deploy hashes. (локальные, nginx и systemd SHA-256 сохранены в benchmark-манифесте; env исключён)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0350сделано

Выполнить staged deploy на `server2`. (release symlink, backup, service/nginx/API checks зафиксированы)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0351сделано

Проверить HTTPS plan page. (HTTPS 200, HSTS и security headers; HTTP перенаправляется 301 на HTTPS)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0352сделано

Проверить HTTPS lab page. (HTTPS 200, HSTS/security headers; HTTP перенаправляется 301)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0353сделано

Проверить API health через same origin. (HTTPS same-origin JSON 200; внутренний Qwen endpoint не раскрывается)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0354сделано

Провести synthetic company A run №1. (job completed/export; 10/10 постов, audit PASS)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0355не сделано

Получить внешнюю оценку run №1.

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0356сделано

Исправить одну доказанную системную причину. (ложное CONTRADICTORY_MODALITY: границы слов для `точно`/формы `можете`; после фикса company B run №2 — 10/10 PASS)

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0357не сделано

Провести A/B regression run №2.

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0358не сделано

Повторить цикл для компаний B и C.

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0359не сделано

Подготовить integration decision report.

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены
PL-0360не сделано

Переносить в основную SMM-систему только после owner gate.

Этап 12. Безопасность, деплой, лабораторные циклы и перенос — PL-0331…PL-0360

Ворота: не назначены

06 / контроль и доказательства

Решения.
Риски. Факты.

Этот блок фиксирует, почему система устроена именно так и на каких материалах основаны следующие действия.

Архитектурные решения

  • Вход — только UTF-8 TXT с JSON-формой компании.
  • Генерация разделена на нормализацию, анализ, план тем, написание, редактуру и аудит.
  • Публикация в VK не автоматизируется: финальное решение остаётся ручным.

Текущие риски

  • Локальная модель может нарушить формат или добавить неподтверждённый факт.
  • Качество русского языка требует внешней оценки и повторных прогонов.
  • Превышение лимита токенов может оборвать набор из десяти постов.

Проведённые эксперименты

  • Baseline Qwen: валидный CompanyAnalysis на русском языке.
  • Проверены JSON, UNKNOWN, лимиты, повторы, температура и конфликтующие правила.
  • Регрессионный набор и 59 автоматических тестов проходят.
сделаноне сделанотекущий блок