Граница продукта Dee Wan 1.0
Статус: Пре-релиз. Dee Wan ещё не выпущен. Последнее обновление: 2026-10-19.
Эта страница перечисляет, что Dee Wan делает сегодня и чем подтверждена работа каждой возможности. Заявленный «Контракт 1.0» покрыт локальными автоматическими тестами. Октябрьские дополнения ниже прошли целевые проверки; итоговые браузерные и визуальные проверки ещё предстоят. Полного приёмочного прогона на реальной учётной записи Cloudflare пока нет.
Dee Wan — это headless CMS для определения структурированного контента и работы с ним. Он также может сгенерировать автономный бэкенд, которым владеете вы: нормализованную схему Prisma, миграции, доступные для проверки, сгенерированные маршруты со знакомой семантикой моделей и запросов Prisma и опубликованный контент — в вашем собственном репозитории, базе данных и среде выполнения. Сгенерированный бэкенд читает обычные таблицы и не зависит от Dee Wan во время выполнения.
Cloudflare — текущая платформа. Источники импорта — архивы Strapi, файлы экспорта WordPress и ограниченная загрузка через WordPress REST. Импорт и экспорт помогают переносить контент в Dee Wan и из него. Это не главная цель продукта.
Каждая возможность находится ровно в одном списке: контракт 1.0, пилот под наблюдением, реализация и приёмка до 1.0 или вне области. «До 1.0» означает работу, обязательную до выпуска 1.0.
Контракт 1.0: реализовано и проверено локально
Заголовок раздела «Контракт 1.0: реализовано и проверено локально»Работа с контентом
Заголовок раздела «Работа с контентом»- Модели контента и поля, определяемые в UI: текст, форматированный текст, число, логическое значение, выбор, дата, медиа, JSON, связь, компонент и географическая точка.
- Проверки несовместимых изменений перед применением новой структуры модели.
- Многоязычный контент с настраиваемыми языками и строгой или fallback-политикой локалей.
- Неизменяемые опубликованные снимки, история версий, восстановление, публикация и снятие с публикации. Восстановление может охватывать один язык: меняются только переводимые значения этого языка, его собственные списки связей, его адрес черновика и его SEO-переопределения; общие поля, общие связи и медиа остаются. Нужно право
restoreдля этого языка. - Прямая публикация или процесс согласования (approval workflow).
- Необязательный режим ревью, выключенный по умолчанию, задаётся для каждого сайта в разделе Настройки → Процесс.
- Его нельзя выключить, пока контент ожидает ревью. Отказ называет эти элементы.
- Когда ревью включено, дашборд является очередью ревью: что ожидает, что вы можете сделать дальше, чьего действия ожидает запись, для которой вы не можете выполнить переход, и что было возвращено.
- Когда ревью выключено, дашборд показывает недавние изменения.
- Переключение не переписывает ни одного определения workflow, поэтому настроенный workflow возвращается без изменений.
- Владение правкой и восстановление несохранённой работы для обычного редактирования контента и для
компоновщика страниц (page composer).
- С одной языковой версией записи одновременно работает только один редактор. Остальные могут наблюдать за изменениями и могут перехватить правку одним действием; с этого момента сохранения прежнего держателя отклоняются, а его несохранённый ввод остаётся его собственным черновиком восстановления.
- Несохранённая правка существующей записи автоматически сохраняется как один общий черновик на запись и язык вместе с серверной версией, от которой она началась. Он виден после перезагрузки, на другом устройстве или другому человеку, который может читать запись. Черновик, сделанный на более старой версии, сравнивается перед восстановлением, поэтому он никогда не перезаписывает чужое сохранение.
- Несохранённые изменения нового элемента хранятся как личный черновик пользователя и предлагаются для восстановления.
- Работа сохраняется при сбое, перезагрузке или выгрузке вкладки и при закрытии браузера. При намеренном переходе со страницы появляется предупреждение.
- Браузер хранит копию, пока она не попадёт на сервер, поэтому при работе офлайн или неудачной записи ничего не теряется.
- Если черновик заменили с другого устройства, редактор спрашивает, какой из них оставить.
- Черновик хранится 30 дней после последнего изменения.
- В редакторе страниц также хранится один общий набор изменений для страницы и языка. Неприменённое предложение ИИ остаётся личным.
- Компоненты, принадлежащие сайту или общие.
- Сайт может владеть компонентами. Общая библиотека доступна для чтения каждому сайту, а редактировать её может только суперадминистратор. Два сайта могут каждый владеть компонентом с одним и тем же slug.
- Сайт может сделать форк общего компонента. Форк переопределяет общий компонент для всего сайта: каждое поле, которое называет этот slug, с этого момента использует форк. UI сообщает, сколько ссылок будет перенаправлено, до вашего подтверждения.
- Создание компонента сайта со slug общего компонента отклоняется, пока вы не подтвердите
переопределение. Подтверждение не позволяет сделать публичными значения по ключу, которые общее поле
сохраняло приватными в хранимых версиях (
retained_key_reuse). - Изменение полей автоматически сохраняет прежнюю структуру. Существующие экземпляры сохраняют значения до явного Обновить компонент. Устаревший тип нельзя добавлять или дублировать; существующие экземпляры можно редактировать.
- В установке с отдельными БД сайтов нельзя менять список полей или статус устаревшего типа общего компонента (
split_topology_migration_unsupported). Название менять можно. Перед правкой полей сделайте копию для сайта. См. Приватные поля. - Slug компонента нельзя изменить после создания, потому что поля и другие компоненты ссылаются на него по slug. Имя изменить можно.
- Предупреждения о форке и защита от удаления учитывают ссылки из полей моделей и из других компонентов.
- Компоненты и динамические зоны Strapi импортируются как компоненты, которыми владеет сайт. См. импорт и миграцию.
- Модели с единственной записью для уникального контента, например главной страницы или настроек сайта.
Вторая запись отклоняется (
single_entry_exists) на любом пути, который её создаёт; запись в корзине по-прежнему занимает место. Single type из Strapi импортируется как такая модель. См. модели с единственной записью. - Роли и права доступа на уровне сайта.
- Сохранённые представления списка: личные и общие представления, настраиваемые колонки и их порядок, личные и общие настройки по умолчанию. Сохраняют фильтры этапа, публикации и поиска по сохранённому тексту, условия по полям и одну сортировку. См. сохранённые представления.
- Фильтры и сортировка по полям в списке контента: до четырёх условий в группах И/ИЛИ глубиной до трёх уровней для одной модели. Фильтры скалярных полей, наличие связей и настроенные поля отображения связей внутри сайта используют последние сохранённые значения, включая черновики. Сортировка — по одному скалярному полю или полю отображения одиночной связи с одной целевой моделью. Для точек доступны радиус, прямоугольная область и порядок по расстоянию. Счётчики, страницы, представления и массовый выбор используют единый SQL-план с проверкой прав. Форматированный текст, медиа, компоненты и JSON нельзя фильтровать или сортировать. См. фильтр и сортировка по полям.
- Массовые действия в списке контента: перевод на этап workflow, публикация или снятие с публикации
через переопределение и перемещение в корзину. Явный выбор — до 25 элементов; выбор всех подходящих —
до 5 000 на всех страницах, с исключениями и шагами не более 25. Для одного типа контента доступно
изменение скалярных полей. В корзине восстановление и окончательное удаление используют явный выбор.
- Каждый элемент проверяется отдельно: права роли, владение
:own, право на переход по процессу согласования, ревизия процесса согласования, если она передана, и проверенные зависимые элементы при снятии с публикации. Отказ не останавливает остальные. Результаты возвращаются в порядке отправки. - Повтор с тем же ключом не применяет элемент дважды, даже после остановки на полпути. Ключ привязан к человеку, который его использовал.
- Выбор по фильтру фиксируется при запуске. Доступ и ревизия проверяются снова для каждого элемента. Результаты различают изменённые, неизменённые, отклонённые и конфликтующие элементы. См. изменение многих элементов.
- Каждый элемент проверяется отдельно: права роли, владение
- Назначение ревьюера: общий ответственный за запись, отдельные ответственные за языки и сроки. У редакционных задач свои исполнитель, необязательный язык, срок и ревизия. Обязательные задачи блокируют публикацию, пока не завершены для проверяемой версии; изменения другого языка не отменяют согласование текущего. В очереди ревью можно оставить только свои назначения по процессу согласования. Автоматических напоминаний нет.
- Обратная связь и уведомления ревью: обсуждения полей связаны с версией и языком, поддерживают ответы, упоминания пользователей и команд, закрытие и повторное открытие. Доступ к полю, языку и уведомлениям проверяется заново. Назначения, запросы ревью и возвраты на доработку вызывают уведомления в админке; почта необязательна. Редактор, management API и плагины используют одни механизмы. Импорт не уведомляет без явного выбора; перенесённая история не уведомляет никогда. Для моделей можно выбрать именованный процесс согласования, иначе действует процесс сайта. См. обратная связь и уведомления.
- Обрезка и точка фокуса для каждой ссылки на медиа хранятся в долях изображения. Сохранённые
байты никогда не меняются.
- У каждого использования своё кадрирование: одна картинка дважды в одном поле, каждое значение компонента и каждый слот секции страницы.
- Опубликованная версия сохраняет своё кадрирование. Замена файла сохраняет кадрирование и предупреждает, если у нового изображения другое соотношение сторон. Точка фокуса по умолчанию применяется только к новым использованиям.
- Публичный API и генерация передают кадрирование. Сгенерированные сайты и управляемый рендерер отдают масштабированные и обрезанные копии через Cloudflare Image Transformations на хостах, объявленных владельцем, а в остальных случаях — исходное изображение с кадрированием через CSS.
- Запись связей заменяет упорядоченный список поля либо выполняет
connectиdisconnectдля отдельных элементов. Элементconnectможет нести позицию (beforeилиafterid, либоstartилиend), а списокmoveпереставляет уже связанные элементы. Порядок применения: disconnect, connect, move. Каждый записанный список проверяется: цель существует в сайте, относится к целевой модели поля, доступна пользователю на чтение (включая:own), встречается один раз, а поле to-one содержит одну цель. Отсутствующая и недоступная для чтения цель отклоняются одинаково. - При сохранении проверяются переданные типы, структура, ограничения, уникальность и ссылки. По умолчанию черновик можно сохранить без обязательных значений; строгий режим требует их уже при сохранении. При публикации проверяется точный снимок, включая обязательные поля.
- Компоновка страниц в фреймворк-нейтральный структурированный документ (см. контракт документа страницы). Ревизии страниц используют обычное версионирование, публикацию и откат. Админка не отдаёт ваш публичный сайт: его страницы рисует сгенерированный сайт, управляемый шаблон или ваш собственный фронтенд.
- Поиск и соцсети, карта сайта и перенаправления. См.
Поиск и соцсети и Перенаправления.
- Для каждого языка записи или страницы можно задать заголовок для поиска, описание, изображение для соцсетей, канонический адрес, «скрыть от поисковых систем» и тип страницы. Они сохраняются в версии и отдаются только из опубликованной версии. Ничего не заполняется из текста или изображений страницы.
- «Меню и SEO» хранит значения по умолчанию, сведения о том, кто ведёт сайт, коды подтверждения для поисковых систем, политику карты сайта и robots и перенаправления: до 256 точных адресов и 32 шаблонов с ответами 301, 302, 307, 308, 410 или 451.
- Единый сервис перенаправлений отклоняет циклы, неоднозначные шаблоны, зарезервированные и живые адреса. Изменённый шаблон требует проверки живых страниц, которые он затрагивает.
- Публикация, которая меняет живой адрес, добавляет и принимает постоянное перенаправление со старого адреса. Если перенаправление создать нельзя, публикация всё равно проходит, а редактор называет причину. Публикация по адресу, занятому перенаправлением, отклоняется с указанием правила.
- Публичный API отдаёт
seoкаждого элемента, принятые перенаправления (GET /v1/_redirects) и данные карты сайта (GET /v1/_sitemap). Сгенерированный сайт пишет теги head, структурированные данные, альтернативыhreflang,/sitemap.xml(индекс частей по 5 000 адресов с изображениями) и/robots.txt. Его перенаправления и части карты сайта для страниц фиксируются при генерации; части с постами Blog читаются вживую. Ваш собственный фронтенд читает те же данные и рисует их сам.
Автономный бэкенд
Заголовок раздела «Автономный бэкенд»-
Эндпоинт admin API
GET /api/models/public-client.tsгенерирует TypeScript-клиент без зависимостей для одного сайта: точные поля моделей, union локалей, типы запросов, оболочку ответа и по одному методу на модель. Файл содержит идентификатор схемы, по которой он сгенерирован. Командаdee-wan-client.mjsиз Настройки → API обновляет его по токену API сайта и перед развёртыванием завершается с ненулевым кодом при ломающем изменении схемы. Это скрипт, который вы коммитите, а не зависимость во время выполнения. -
Генерация автономного бэкенда выдаёт типизированный бэкенд, которым владеете вы, и снимок контента, опубликованного на тот момент. Его API не обращается к Dee Wan во время выполнения; блог, поиск, секции «Последние записи», комментарии и формы на его сайте обращаются (см. контракт отсоединения). Его API принимает
API_BEARER_TOKEN, токены чтения изACCESS_CONFIG, необязательные сессии автономного бэкенда и отдельные машинные ключи приложения со своими правами, сроком действия, заменой и отзывом. -
Повторная генерация, управляемая из CMS, забирает определения моделей и сообщает результат обратно в Dee Wan. Сборка и запуск бэкенда отделены от этого отчёта.
-
Токены чтения для сгенерированного бэкенда, выпускаемые из CMS для каждой модели (никогда
*), показываются один раз и доставляются как хеши при следующей повторной генерации и развёртывании. Отзыв вступает в силу только после этой повторной генерации и развёртывания. Запись связей в сгенерированном бэкенде проверяет, что цель to-one существует. -
Сканирование готовности к генерации. Раздел Настройки → Код и публикация перечисляет отказы уровня моделей до сборки, а также может пройти опубликованный контент и перечислить то, что сборка отвергнет, по одной ограниченной странице за раз. Окончательная проверка конфликтов в пределах всего сайта выполняется при сборке.
Сайты, учётные записи и доступ
Заголовок раздела «Сайты, учётные записи и доступ»- Несколько сайтов в одной установке Dee Wan, каждый запрос ограничен одним сайтом. Вызывающий не может выбрать данные или базу данных другого сайта.
- Сайты, использующие одну базу данных, изолированы друг от друга в коде.
- Сессии в базе данных, одноразовая ссылка получения прав (claim) для первого администратора, владение паролем, восстановление, отзыв сессий, блокировка и ограничения запросов.
- Необязательный периметр Cloudflare Access, выключен по умолчанию.
- Существующим учётным записям можно выдавать доступ к отдельным сайтам. Приглашения — пилот под наблюдением, см. ниже.
Публичный API чтения
Заголовок раздела «Публичный API чтения»- Отдельный публичный Worker отдаёт опубликованный контент каждого сайта на собственном имени хоста сайта.
Сайт выбирается по заголовку
Host, никогда по id сайта, который передаёт вызывающий. См. справочник по публичному API чтения. - Чтение опубликованных снимков, строгая или fallback-политика локалей, пагинация по курсору и фильтры по связям.
- Типизированные фильтры по полям: равенство для полей текста, select, boolean, чисел и дат, диапазоны чисел и дат с включёнными или исключёнными границами, одно поле сортировки и выборочные
fields. Не больше 4 фильтруемых полей; повторfilter[field]даёт до 10 вариантов (ИЛИ внутри поля, И между полями).expandвозвращает до 3 полей связей на один уровень, по 25 опубликованных целей в каждом, а остальные листаются отдельным маршрутом с курсором. Превышение любого ограничения приводит к отказу запроса, а не к сокращению результата. Курсор продолжает только тот же самый запрос, из которого он получен. Измеренного предела числа строк пока нет. - Публичным моделям не нужен токен. Приватным моделям нужен API-токен сайта, и они никогда не хранятся в общем кеше.
- Кеширование на edge выключено по умолчанию. Когда оператор включает его (
PUBLIC_CACHE_MAX_AGE) и настраивает учётные данные для очистки (CF_PURGE_ZONE_ID,CF_PURGE_API_TOKEN), публикация очищает затронутые ответы по cache-тегу. - Публичный Worker никогда не пишет в базу данных. Это правило кода. У D1 нет настройки привязки только для чтения.
Медиа и ИИ
Заголовок раздела «Медиа и ИИ»- Медиа хранятся в R2 или Cloudflare Images, с конвертацией в WebP и AVIF.
- Генерация текста, перевод и генерация изображений через серверное подключение к провайдеру ИИ. Ключи провайдера никогда не попадают в браузер.
- Почасовая квота на сайт. DeepInfra используется по умолчанию; можно настроить другой совместимый с OpenAI API и выбрать модели текста, изображений и распознавания изображений. См. поставщик ИИ.
- Дубликаты файлов в медиатеке одного сайта. Загрузка, точные байты которой сайт уже хранит, ничего
не сохраняет и предлагает Использовать существующий или Загрузить отдельную копию. Тот же выбор
есть в диалоге медиа, при сохранении изображения ИИ, в API управления (
on_duplicate) и для плагинов. Файлы другого сайта никогда не совпадают. Совпадают только одинаковые байты, поэтому уменьшенная или перекодированная копия изображения не находится. Файлы, уже лежащие в медиатеке, не проверяются. Импорт и копия сайта сохраняют один файл на исходный ассет и не ищут дубликаты. - Приватные файлы. Медиа по умолчанию публичные. Байты приватного файла хранятся в отдельном
приватном бакете и открываются только по пятиминутной ссылке в пределах текущих прав участника на чтение файлов. При открытии ссылки заново проверяются эти права и полномочия интеграции, которая её выдала.
- Приватный файл можно поместить в медиаполе или форматированный текст приватной модели, в том числе во вложенный текст блока плагина. Публичные модели, сниппеты, настройки сайта, социальные изображения и секции страниц отклоняют его с названной причиной. Приватную модель нельзя сделать публичной, пока запись использует приватный файл.
- Публичное чтение никогда не несёт приватных байтов или рабочего адреса: анонимное чтение приватной модели отвечает 404, а чтение с токеном сайта возвращает сведения о файле с пустым адресом.
- Копия сайта и перенос с историей несут приватные файлы с байтами, контрольной суммой и видимостью, а получатель хранит их приватно. Для сборки или скачивания такого файла нужно право экспорта и доступ на чтение ко всей медиатеке; он проверяется заново при каждом скачивании. Экспорт CSV, JSON коллекции и XLSX никогда не зависит от приватных файлов. Получатель без приватного хранилища отклоняется с названной причиной до любой записи. Учётные данные хранилища и имена бакетов не переносятся.
- Сгенерированное приложение отдаёт приватный файл по
GET /api/<model>/files/<field>/<id>только тому, кто может читать эту строку в собственных сессиях и правилах доступа приложения; доступ к медиатеке CMS там ничего не даёт. Приложение хранит приватные байты в своём приватном бакете (PRIVATE_FILES). Среда Nodeserveотдаёт их так же из каталога владельца, указанного вPRIVATE_FILES_DIRECTORY, и отвечает 503private_files_unavailable, только пока каталог не настроен. - Перевод приватной модели в публичные и сохранение в неё приватного файла проверяются внутри их собственных записей, поэтому параллельное сохранение, импорт или восстановление не оставят публичную модель с приватным файлом. См. приватные файлы.
Импорт и экспорт
Заголовок раздела «Импорт и экспорт»- Переносимый бандл сайта Dee Wan и передача контента через CSV и XLSX.
- Импорт из Strapi v4 и v5: инспекция архива, явное сопоставление, пробный прогон (dry run), возобновление, повторяемые перезапуски, квитанции, проблемные строки, манифесты и защищённая отмена (undo).
- Импорт из WordPress по файлу Tools → Export (формат 1.2, UTF-8, не больше 8 MiB): записи, страницы, категории, метки, авторы, комментарии, меню, собственные типы записей и таксономии, проверенные пользовательские поля и значения Yoast SEO; до 5 000 медиафайлов копируются с публичных https-хостов. Неопубликованные элементы приходят черновиками, комментарии — на модерацию. Отмена удаляет то, что создал импорт. См. импорт из WordPress.
- Когда неясно, какие исходные записи относятся друг к другу, пробный прогон останавливается. Импортёр никогда не угадывает по именам, slug или URL.
- Импорт реальных продакшен-архивов, лимиты Worker в развёртывании, а также переключение и откат пока не доказаны.
Эксплуатация
Заголовок раздела «Эксплуатация»-
Планирование установки из командной строки, apply и resume, диагностика (
npm run doctor), проверка, манифест установки и teardown в режиме dry run. -
Локальный браузерный установщик для разработчика, у которого уже есть Node, checkout и терминал.
-
История развёртываний, с отказом в откате после деструктивной миграции.
-
Исходящие вебхуки: настройка, подписанная история доставок, ротация секрета и ручной повтор.
-
Автоматический повтор для исходящих вебхуков.
- Отправка, не удавшаяся из-за временного сбоя (нет ответа,
408,429или любой5xx), повторяется по экспоненциальному расписанию с джиттером, до пяти попыток, с учётомRetry-After. - Если повтор запроса привёл бы к тому же отказу со стороны подписчика, повтор не выполняется.
- Каждая попытка несёт один и тот же id события, поэтому ваш потребитель может распознать дубликат.
- Повтор отправляет в точности записанное тело, подписанное текущим секретом подписчика.
- Повторы, ожидающие отправки, не учитываются в лимите истории доставок.
- Доставка ограничена и без гарантии: не более пяти попыток, уведомление может прийти повторно, получение не гарантируется. Проверено только локально.
- Отправка, не удавшаяся из-за временного сбоя (нет ответа,
-
Отчёты об ошибках.
- Необработанные ошибки из admin Worker, публичного Worker и admin UI могут отправляться в Sentry-совместимый проект.
- По умолчанию ничего не отправляется. В этой версии нет встроенного адреса проекта Dee Wan, поэтому отчёты попадают
в Dee Wan, только если развёртывание задаёт
DEEWAN_SENTRY_DSN, и в ваш собственный проект, только если вы задаётеOPERATOR_SENTRY_DSN. - Отчёт содержит тип ошибки, очищенное сообщение, кадры стека (функция, имя файла, строка), шаблон маршрута, релиз и окружение. Контент, значения форм, email-адреса, URL, строки запроса и учётные данные предварительно удаляются.
- Суперадминистратор может отключить отчёты в Dee Wan для всей установки Dee Wan в разделе Установка → Отчёты об ошибках. Переменная Worker
DEEWAN_ERROR_REPORTING=offделает то же самое. Ни один из этих переключателей не влияет наOPERATOR_SENTRY_DSN.
-
Форматированный текст — это один проверенный форматированный документ, и ваш рендерер его отрисовывает.
- Он хранится как канонический HTML, не более 256 KiB в UTF-8: текстовые блоки, таблицы, галереи изображений, блоки аудио, видео и файлов, а также встраивания YouTube, Vimeo или https-источника, который сайт разрешает в «Настройки → Интеграции».
- При каждом сохранении документ строго проверяется и приводится к каноническому виду. Разметка вне документа отклоняется с кодом 400, который называет поле, язык и элемент или атрибут, но никогда не содержимое.
- Его сгенерированный тип —
Html, а не тип «безопасного HTML»: медиаблоки и встраивания — это данные, а не плееры. Отрисовывайте его функциейrenderRichDocumentиз контракта страницы или собственным рендерером того же документа. - Собственные рендереры Dee Wan (страницы постов блога и секция «Последние записи») отрисовывают его через
renderRichDocument.
-
Единый раздел для управления развёртыванием, в разделе Настройки → Код и публикация.
- Публичный API чтения CMS с актуальными данными и автономный бэкенд представлены как два разных контракта, с различиями в маршрутах, аутентификации, оболочке ответа, развёртывании, откате и зависимости от CMS, указанными до переключения.
- Статус показывает: никогда не генерировался, актуален, расходится, собирается, сбой сборки или развёртывания и отсоединён. Список ревизий отклоняет небезопасные откаты. Проверено только локально.
-
Версия генератора и расхождение. Сгенерированный бэкенд идентифицируется версией генератора плюс отпечатком контракта моделей сайта, никогда не временной меткой. Сайт, пересобранный более новым генератором, отображается как расходящийся, а не актуальный. Каждое развёртывание записывает версию генератора: процесс сборки останавливается с
generator_version_missing, если артефакт её не называет, а отчёт о сборке без неё отклоняется (build_report_incomplete). Ничто не генерируется повторно и не развёртывается само по себе. Артефакт, созданный более старым генератором, отказывается от повторной генерации, пока вы снова не запустите Generate standalone backend; слоя совместимости нет. -
Административный журнал аудита в разделе Настройки → История, за собственным правом доступа
audit:read.- Он записывает, кто изменил модель, компонент, роль, доступ к сайту, токен сайта, настройки, инфраструктуру или имя хоста, и кто выполнил развёртывание или откат.
- Каждое действие записывает своё намерение до выполнения и результат после. Если намерение не удаётся записать, действие не выполняется. Если не удаётся записать результат, исход отображается как неизвестный, а не как успех.
- Он допускает только добавление: ничто не может его редактировать.
- Фильтры: операция, исход, исполнитель, тип цели, id цели и диапазон from/to. Скачивание в CSV (
format=csv) с того же маршрутаGET /api/sites/:siteId/auditза правомaudit:read. Ячейки CSV экранируются от формул. Постраничность по курсору; счётчиков нет.
Пилот под наблюдением: реализовано локально, ещё не доказано на реальной инфраструктуре
Заголовок раздела «Пилот под наблюдением: реализовано локально, ещё не доказано на реальной инфраструктуре»- Отдельная база данных контента для каждого сайта. Одна управляющая база данных плюс одна база данных контента на каждый сайт. Маршрутизация, провижининг, миграции по всем сайтам, резервное копирование и восстановление, а также teardown проверены локально. Ёмкость, резервное копирование и восстановление, а также изоляция между несколькими сайтами не доказаны на реальной учётной записи Cloudflare.
- Развёртывание автономного бэкенда из CMS. Получение прав (claim), токен сборки, процесс сгенерированного репозитория, миграции, отчёт в обратную сторону и откат проверены локально. Ни одного полного прогона через GitHub Actions в Cloudflare не записано.
- Полный путь установщика. Admin Worker и UI следуют обычному пути установки.
setupтакже записываетbackend/wrangler.public.jsonc, как только учётная запись, зона Cloudflare и база данных известны. Он никогда не перезаписывает существующий файл. Если он не может вывести значение, он отказывает и называет это значение, а не угадывает его. Ручное копирование примера — лишь запасной путь для этого отказа. Без этого файлаdeployотказывает, а не пропускает шаг. Инсталляция, которая намеренно не отдаёт публичный контент, заявляет об этом через--admin-only, и прогон отображается как admin-only, а не как завершённый. Не хватает записанного прогона на реальной учётной записи. - Предпросмотр на вашем собственном фронтенде. Админка хранит HTTPS-адрес фронтенда и шаблон маршрута
для каждой модели, и Предпросмотр открывает черновик на вашем фронтенде. Панель Предпросмотр в разделе Настройки →
Код и публикация → Параметры разработчика → Собственный предпросмотр сайта читает и записывает эту конфигурацию, объясняет, что делает
Предпросмотр, до его настройки, и называет каждый отказ. Пока фронтенд не настроен и не
проверен, Предпросмотр открывает JSON-ответ публичного API.
- Предпросмотр несохранённых изменений на проверенном рендерере, который его объявляет (управляемый Blog-рендерер для записей, а также сгенерированные или собственные рендереры через опубликованный ключ проверки): текст, компоненты, связи, выбранные изображения и адрес языка из одного подписанного черновика, который истекает через 60 секунд. Файлы ищутся по id на сервере с вашими текущими правами. Ничего не сохраняется, не резервируется и не перенаправляется, а публичное чтение не меняется. Другие рендереры и модели показывают сохранённую версию с причиной. См. предпросмотр несохранённых изменений.
- Удалённые плагины, протокол v1 (сторона Dee Wan). Установка по HTTPS-манифесту с проверенными правами и моделями. Делегированные операции заново проверяют текущие права человека: чтение записи и сохранённых версий, создание, типизированное обновление, корзина, чтение медиа и правка метаданных, публикация и снятие используют существующие службы жизненного цикла. Раздел Настройки сравнивает новый манифест с установленным перед обновлением; новые права не выдаются автоматически. Элементы управления хоста остаются. Манифест также может объявить проверенный фрейм своего точного origin с перечнем операций: credentialless sandbox и привязанный канал сообщений не передают cookie или токены админки, поля сохраняются обычным способом, действия используют авторизованные операции. Отключение возвращает встроенный редактор. Каталог оператора (
PLUGIN_CATALOGUE_URLS) помогает найти плагины. Scheduling открывается для читаемых моделей безsite:plugins; API управления, CLI и MCP перечисляют представления и действия и выдают одноразовые ссылки. Проверено локально; развёртывание Scheduling ещё предстоит. - Резервное копирование и восстановление. Проверено на локальном SQLite, не на реальной D1.
- Приглашения, в разделе Настройки → Люди. Администратор приглашает адрес на одну роль на одном сайте. Приглашённый вводит этот адрес на странице приглашения. Если почта настроена, он также вводит код, отправленный на этот адрес. Без почты администратор передаёт ссылку сам, а новая учётная запись отмечается как неподтверждённая. Существующая учётная запись получает роль и сохраняет свой пароль. Ссылка работает один раз, истекает через 7 дней, её можно отправить заново или отменить. Проверено локально с заглушкой почтового провайдера. Доставка через реальную учётную запись Resend не записана.
- Ключи доступа (passkeys), выключены, пока суперадминистратор их не включит. Вход не спрашивает адрес. Каждый сам добавляет, переименовывает и удаляет свои ключи в разделе Безопасность аккаунта; последний способ входа удалить нельзя. Проверено локально с программным аутентификатором. Вход с реальным устройством (Touch ID, Windows Hello, телефон) не записан.
- Миграция живых сайтов из Strapi. Путь импорта существует. Ни одной сквозной миграции реальных сайтов с переключением и откатом не выполнено.
До 1.0: оставшаяся реализация и приёмка
Заголовок раздела «До 1.0: оставшаяся реализация и приёмка»Следующие работы по реализации или приёмке обязательны до выпуска 1.0.
- Приёмка стартового проекта Astro для рабочего сайта. Команда создания исходников уже есть; полный прогон браузерных тестов и проверка на реальных сервисах ещё предстоят.
- Предпросмотр карты сайта и robots в админке.
- Доставка управляемого рендерера — направление до 1.0. Подготовка, активация, откат и проверка развёртывания идут через отдельный сервис, который хранит токен Cloudflare. Эти пути покрыты целевыми локальными проверками. Полный браузерный прогон и приёмка на реальной учётной записи Cloudflare ещё предстоят; локальные проверки не заменяют приёмку выпуска. Без настроек сервиса развёртывания эти действия недоступны. Принятие шаблона сайта не меняет уже работающий сайт.
- Установщик, которому не нужен терминал, и зарегистрированное OAuth-приложение Cloudflare.
- Произвольные запросы по полям связанных записей и фильтры сразу по нескольким моделям. Настроенные поля отображения связей внутри сайта поддерживаются.
- Поиск похожих изображений, которые не совпадают побайтно. Точные дубликаты, поиск медиа и фильтрация по alt-тексту реализованы.
- Автоматические напоминания и несколько исполнителей процесса согласования на всю запись. Отдельные ответственные за языки, редакционные задачи и обсуждения полей реализованы.
- Приёмка у провайдеров: обновление автономного бэкенда при публикации и необязательный общий GitHub App. Настройки, сохраняемые задания и отдельный сервис App реализованы; проверка на реальных сервисах остаётся обязательной. См. передачу через GitHub.
- Секции, которые редактор страницы не может удалить или превратить в отдельную копию. Общие секции, которые показывают один опубликованный набор секций на многих страницах и меняются только там, где их редактируют, реализованы (см. конструктор страниц).
- Двухфакторный вход TOTP и единый вход OIDC как необязательные способы.
Вне области
Заголовок раздела «Вне области»- Любая гарантия, что подписчик получит уведомление.
- Разделение одной модели между несколькими базами данных.
- Единый вход SAML.
- Запланированные публикация и снятие с публикации в основном продукте. Планирование — это отдельный плагин Scheduling, который не развёрнут. Согласованные релизы контента реализованы в этом плагине, а не в основном продукте.
Два способа читать ваш контент
Заголовок раздела «Два способа читать ваш контент»- Публичный API чтения CMS отражает изменения сразу. Публикация попадает в него сразу. Если кеширование на edge включено и учётные данные для очистки заданы, публикация также очищает затронутые закешированные ответы.
- Автономный бэкенд — это релиз. Он содержит то, что было опубликовано на момент генерации. По умолчанию генерацию и развёртывание запускают вручную. Необязательная настройка Обновлять при публикации выключена для каждого сайта по умолчанию. Она запускает тот же процесс генерации, проверки миграций и развёртывания, не записывая напрямую в базу автономного бэкенда. Это не поток актуальных данных. См. обновление при публикации. Приёмка на реальных сервисах ещё предстоит.
Октябрьские дополнения и оставшаяся приёмка
Заголовок раздела «Октябрьские дополнения и оставшаяся приёмка»Текущий код добавляет перечисленные возможности к установленному контракту. Есть целевые тесты; итоговая браузерная проверка, визуальная проверка на мобильном и настольном экране и приёмка провайдеров ещё нужны.
- Группы И/ИЛИ в списке, контекстный выбор связей и условные варианты select используют ограниченные правила и перепроверяют зависимости при сохранении.
- Операции плагинов с записями, версиями, созданием, обновлением, корзиной и медиа используют прежний жизненный цикл и текущие права человека. Обновление показывает версию, права и origin до подтверждения; новые права выдаются явно. Проверенные фреймы origin плагина дают свой интерфейс без учётных данных админки.
- Rich text хранит выравнивание абзацев/заголовков, связи и вложенные повторяемые группы плагинов. Виджеты Vendor snippet с типизированными HTML/CSS/JavaScript выполняются в изолированном фрейме админки и обоих рендереров.
- В разделе Безопасность аккаунта новый адрес подтверждается до смены email того же аккаунта и завершения сессий. Членство, способы входа и история сохраняются. Вход предлагает самостоятельный почтовый сброс пароля, если почта настроена; ответ одинаков для известных и неизвестных адресов. Прежнее восстановление без почты остаётся.
- Правила роли по записям ограничивают базовые чтения и атомарные create/update/delete с контекстом пользователя и старыми/новыми значениями. Ограничения по моделям, своим записям, полям и языкам сохраняются. Аудит связанных API/экспорта ещё предстоит.
- CSV/XLSX поддерживают создание, обновление и создание либо обновление через общий механизм проверки JSON-коллекций, со связями, медиа, вложенными компонентами и обычными проверками прав и версий. По умолчанию — обновление; сопоставление по ID записи или подходящему уникальному полю.
- Подключённый WordPress использует прежние WXR, просмотр, импорт, квитанцию и отмену. Явная замена настроек охватывает название, слоган, логотип, иконку, SEO-описание и настройку индексации из источника; нужны
site:settingsи проверенная ревизия целевого сайта. Неподдерживаемые и скрытые от REST данные остаются видимыми пропусками. - AI предлагает alt и подпись по доступным байтам, автор проверяет их до замены. Переводы обновляются только после сохранения оригинала, для выбранных языков, с явным согласием на замену ручного текста.
Код папок записей добавляет вложенное дерево, одно размещение для группы переводов, счётчики/фильтры в пределах доступа и отдельную историю размещения. Перемещение не создаёт и не публикует версию контента. Копия переносит дерево и размещение; перенос истории — также историю размещения, с квитанциями и отменой. Итоговая интеграционная приёмка ещё предстоит. Папки моделей — отдельная возможность. Продакшен-рендерер и стартовая тема, развёртывание Scheduling, реальная приёмка Cloudflare для публикации, предпросмотра, медиа, почты и восстановления остаются условиями выпуска. Одних изменений в исходниках для этого недостаточно.
Стартовый проект Astro с чтением актуального публичного API уже есть в исходниках; см. Первый сайт. Его приёмка для рабочего сайта, развёртывание Scheduling и реальные проверки публикации, предпросмотра, медиа, почты и восстановления на Cloudflare остаются условиями выпуска. Поддерживаемого релиза с тегом ещё нет.
В кандидате на первый выпуск также добавлены закрытые файловые вложения в формы сайта и отправка писем плагина автору записи или назначенному проверяющему по утверждённому шаблону. Они используют существующие системы приёма ответов и отправки почты. Итоговые проверки ещё не завершены; поддерживаемый выпуск и приёмка с реальными сервисами пока не подтверждены.
Возможности текущей интеграционной версии
Заголовок раздела «Возможности текущей интеграционной версии»Эти возможности реализованы в коде ещё не выпущенной интеграционной версии. Полный браузерный прогон, проверка живого интерфейса на телефоне и компьютере и приёмка внешних сервисов остаются отдельными требованиями.
- Перенос сайта и истории частями поддерживает большие разрешённые медиафайлы, контрольные суммы и продолжение.
- Страницы WordPress сохраняют заголовки, код, таблицы, длинный текст и явно сопоставленные данные источника.
- Защищённый форматированный текст поддерживает приватные изображения, вложения и варианты изображений с проверкой доступа.
- Адреса сохраняют буквы, цифры и комбинируемые знаки Unicode и автоматически создаются из заголовков на родном языке.
- Именованное уникальное сочетание объединяет от двух до четырёх полей; запись проверяется атомарно.
- Метаданные блога могут использовать текущие сведения об авторах, категориях и тегах; режим снимка остаётся явным выбором.
- Обычные и смешанные компоненты можно вывести из использования, сохранить прежнюю структуру и обновлять экземпляры по своему решению.
- Блоки плагинов поддерживают вложенные поля форматированного текста с ограниченной глубиной.
- Обычные столбцы связей показывают доступные подписи, количество и связанные значения.
- Типизированные условия видимости объединяются в группы И/ИЛИ: до четырёх условий и трёх уровней.
- Необязательное переводимое поле может брать отсутствующее значение из опубликованного резервного языка; намеренно пустое значение остаётся пустым. См. Резервный язык для поля.
- Проверенный статический SVG доступен как изображение.
- Сгенерированное приложение поддерживает до 32 именованных ролей с правами на операции моделей, обычной ролью при регистрации и прежними ролями admin/user.
- DeepInfra остаётся провайдером ИИ по умолчанию; установка может выбрать совместимый с OpenAI адрес и явные списки моделей текста, изображений и распознавания изображений.
- Предпросмотр связанных черновиков показывает сохранённые связанные черновики в пределах прав читателя; публичное чтение по-прежнему требует публикации.
- Поиск контента ищет по сохранённому форматированному тексту, включая черновики, и показывает совпавшее поле и короткий фрагмент с учётом прав доступа.
- Адреса сайтов для браузерных запросов задают CORS, предварительные запросы и разрешённые заголовки публичного API отдельно для каждого сайта.
- Замена медиа через API управления заменяет файл через существующий сервис, сохраняя ID медиа и ссылки на него.
- Управление аккаунтами автономного приложения позволяет создавать аккаунты с выбранной ролью и удалять аккаунты без связанных данных. Сессии отзываются; последнего администратора удалить нельзя.
- Редактирование в предпросмотре открывает обычные поля текста и форматированного текста поверх поддерживаемого представления. Старые рендереры по-прежнему переводят фокус на поле формы.
- Импорт из WordPress сохраняет проверенные группы и повторители ACF как редактируемый JSON. Для будущих публикаций явно выбирают расписание или сохранение намерения в черновике.
- Обновление выбранного контента заранее показывает добавления, изменения и удаления в заполненных моделях, сохраняет исключённые данные и старые копии медиа и отклоняет конфликтующие правки. Задание можно продолжить или остановить; автоматической отмены замены нет.
Редактор также поддерживает переводы названий моделей, полей и групп, подсказок и вариантов выбора без изменения хранимых ключей. Перенос структуры модели между сайтами требует проверки выбранных изменений и обеих ревизий. Дата со временем и часовым поясом хранит момент UTC и зону IANA: несуществующее местное время отклоняется, для неоднозначного нужно выбрать смещение. Массовый AI создаёт редактируемые предложения без сохранения контента; отмена сохраняет готовые предложения. Независимые будущие черновики имеют собственные снимки и закреплённые медиа, не меняя обычный черновик; запуск релиза фиксирует выбранную ветку, а предварительный просмотр учитывает будущее расписание.
Стабильная версия ещё не выпущена (pre-MVP)
Коммит исходного кода: e207e63239a627fbd2ae9c414ef7c6eb19fcfe5a (с локальными изменениями)
Дата сборки (UTC): 2026-10-21T09:28:24.214Z
Коммит для обновления: не определён: в рабочей копии есть изменения. Примечания к выпуску