Skip to content

Дорожная карта

Статус: фаза 0 завершена; фаза 1 в работе (обновлено 2026-07-14). Ядро волн 0–22 и 24 собрано на полигоне cms.rosveb.ru; инфраструктура дистрибуции (Gitea+CI, Satis, skeleton, генераторы, бэкапы) поднята. Ревизия Q1 (14.07.2026): первый потребитель — пилот-копия universal на новой CMS (боевой universal не трогается), внешний клиентский заказ станет вторым потребителем. Исполняемый ранбук с прогрессом — TZ.md репозитория laravel/cms.rosveb.ru. Все 12 вопросов брейншторма закрыты — см. Решения. Принцип неизменен: ядро без живого потребителя — долгострой; пилот на своём насыщенном контенте даёт ту же обкатку боем.

Фазы

Фаза 0 — контракты на бумаге ✅ завершена (спеки + ТЗ)

Спеки контрактов до первой строки кода — готовы (уровень «как именно»), поверх них — рабочие ТЗ: стандарт модуля, ТЗ ядра + API и отдельное ТЗ на каждый из ~115 модулей (индекс). Самое дешёвое место для исправления ошибок; архитектурные вопросы закрыты (Решения).

Фундамент:

Контракты:

Доменные модели: e-commerce (ТП, мульти-склад, цены, НДС/чеки, rule-engine, highload) · мультиязычность.

Надёжность: Жизненный цикл и надёжность модулей (версии, откат, деградация вместо падения, вывод ошибок).

Незакрытые уточнения «до кода» (не блокируют старт) — Открытые детали реализации. Выход фазы: спеки отпочковываются в self-hosted репозиторий CMS (Gitea/GitLab). Фаза 1 начата на полигоне cms.rosveb.ru; выход фазы — первый клиентский сайт (Q1).

Ключевые решения, влияющие на фазу 0:

  • произвольные типы контента — через JSONB+GIN, не EAV (Q5);
  • виджет — отдельная сущность (WidgetRegistry) (Q4);
  • drag&drop — средняя свобода (без стилей на уровне блока), нужны блоки-контейнеры (Q9);
  • версионирование страниц — с 1.0, меняет модель хранения (Q7).

Фаза 1 — ядро-минимум + первый потребитель

Монорепо: packages/core, packages/testing, skeleton/, базовая тема. Порт из universal: pages/блоки, settings, SEO, формы, медиа, кеш-слой. Первый потребитель — ближайший реальный клиентский заказ: ядро строится в объёме, который нужен ему (YAGNI работает сам), обкатывается под давлением дедлайна. Universal не трогаем — он прод.

Ключевое отличие от v1: с самого начала закладываем открытый BlockRegistry, события, фильтры и drag&drop-редактор (не откладываем расширяемость «на потом»).

Развёртка фазы по волнам (порядок сборки, зависимости, security-гейты и критерии готовности каждой волны) — Порядок разработки.

Фаза 2 — центр обновлений

Satis на инфре студии, cms:upgrade с полной процедурой (бэкап → maintenance → update → migrate → opcache-restart → health-check → откат), страница «Обновления» в Filament, двухтабличная модель версий. Именно здесь, а не в конце: пока клиент один — обкатывать безопасно. См. Центр обновлений.

Фаза 3 — модули по мере заказов

Каталог, гео/мультигород, AI-контент, поиск, платежи — портируются из проектов-доноров, когда их требует очередной заказ. Не раньше: модуль без потребителя — мёртвый код с обязательствами поддержки. См. Реестр модулей.

Фаза 4 — миграция universal + флит-дашборд

Universal переезжает на ядро как обычный клиент (когда контракты устаканились ~1.x). Параллельно — флит-дашборд: телеметрия версий, волны обновлений, контроль бэкапов. С этого момента подписка на поддержку — процесс, а не ручной труд.

Фаза 5 (перспектива) — открытый маркетплейс

Открытие маркетплейса сторонним разработчикам — если бизнес-модель подтвердит спрос. Сейчас маркетплейс закрытый (только модули студии), но контракт модуля с capability-слоем и лицензирование по клиенту заложены с фазы 0 — открытие не потребует переделки. Требует решения модели ревью безопасности чужого кода (см. безопасность и права). Уровень drag&drop-редактора зафиксирован как «средняя свобода» (Q9) — развитие до Tilda-подобной свободы стилей не планируется (защита дизайна).

Риски

РискСмягчение
Долгострой ядра «в стол»Жёсткая привязка фазы 1 к реальному заказу с дедлайном
ТЗ модулей расходятся с ядром по мере разработкиПравило стандарта: изменился контракт ядра → сначала ревизия стандарта и затронутых ТЗ, потом код; docs/module.md пакета обновляется тем же PR
Перфекционизм контрактовФаза 0 — недели, не месяцы; контракт правится до 1.0 свободно
Соблазн рефакторить universal «по пути»Запрет: universal — донор кода, не полигон
Schema-drift блоков у клиентовВерсии схем + cms:blocks:migrate — с первого релиза
Один разработчик — bus-factorМодули только под заказ; anti-goals соблюдаются; документация в этой базе
Инцидент при обновлении клиентаПроцедура с бэкапом/health-check/откатом обязательна с первого клиента
Расширение scope (маркетплейс, drag&drop) размывает фокусМаркетплейс и полный drag&drop — фаза 5, не блокируют ядро
Безопасность сторонних плагинов (урок WP)Policy-слой, «плагин ≠ ядро по правам» — заложить в контракт модуля с фазы 0

Как пользоваться разделом

Раздел — источник правды по решениям v2-концепции. Новое решение → сюда, в соответствующую страницу, с датой и мотивировкой. Спеки конкретных подсистем при старте фазы 0 отпочковываются в репозиторий CMS; этот раздел остаётся уровнем «зачем и что», спеки — уровнем «как именно».

Связь с предыдущей версией: первая концепция (Rosveb CMS v1 — закрытый инструмент студии) в архив не сохранялась; расхождения с ней описаны в видении v2.

Внутренняя база знаний студии