Перейти к содержимому
Pre-MVP. Кодовая база 1.0 не является выпущенным продуктом — см. границы продукта 1.0.

Контракт отсоединения

Что означает «автономный бэкенд» — построчно, с указанием того, что в репозитории обеспечивает каждую строку. Ни одна строка не появляется здесь без доказательства. Строка, у которой есть только локальное доказательство, так и говорит — доказательство на развёртывании является отдельным рубежом (SPEC.md §11 R4).

Доказательства, а не индекс статусов. Релизные рубежи для доказательства на развёртывании — SPEC.md §11 R4.8 (учения по отсоединению) и R4.9 (показатели производительности).

Строка контракта Чем обеспечивается Уровень доказательства
Репозиторий принадлежит владельцу поток подключения scripts/github.ts; артефакт принимается в целевой каталог, который указывает оператор локальный
База данных принадлежит владельцу graduate/target.ts и graduate/migrate.ts пишут только в целевую базу данных; scripts/d1-provision.ts создаёт D1 владельца локальный
Развёртывание и учётные данные принадлежат владельцу генерируемые wrangler.example.jsonc, scripts/configure-deployment.mjs; bearer-токен читается из окружения владельца (API_BEARER_TOKEN) локальный
Нормализованная схема Prisma, настоящие таблицы и индексы graduate/schema.ts, packages/eav-to-prisma; backend/test/graduate-generator.test.ts локальный
Проверяемые, только дополняемые миграции graduate/migrate.ts, graduate/lineage.ts, генерируемый scripts/emit-migration.mjs; backend/test/graduate-adoption.test.ts “regenerates after a schema change, appending to the migration lineage” локальный
Сгенерированные маршруты с привычной семантикой моделей и запросов Prisma packages/prisma-generator-express (цель Hono); backend/test/artifact-two-version-transition.test.ts запускает артефакт и вызывает его маршруты локальный
Никаких обращений к Dee Wan во время выполнения backend/test/graduate-artifact-auth.test.ts, backend/test/graduate-no-callback.test.ts локальный
Никакой зависимости от идентификации, доступности или инфраструктуры Dee Wan те же два теста: сгенерированная аутентификация читает один bearer-токен из собственного окружения локальный; доказательство на развёртывании ОТКРЫТО
Код, принадлежащий разработчику, переживает повторную генерацию graduate/zones.ts + backend/test/graduate-adoption.test.ts “keeps a developer’s own file across a schema change”; правило для владельца — в Расширение вашего бэкенда локальный
ДАННЫЕ, принадлежащие владельцу, переживают повторную генерацию backend/test/graduate-adoption.test.ts “keeps rows the adopter wrote into their own table across a schema change” локальный
Разработчик может перестать использовать Dee Wan и продолжать развивать репозиторий правило зон, а также генерируемые scripts/regenerate.mjs и scripts/emit-migration.mjs, которые работают без CMS локальный; см. «Прекращение» ниже
  • Учения по отсоединению на развёртывании, на точном коммите. Сгенерированный бэкенд отвечает на чтения, пока Worker Dee Wan выключен. Для этого нужны полномочия Cloudflare (SPEC.md §11 R0.2). Скрипт и файл доказательств находятся в scripts/detach-drill.ts и docs/artifacts/detachment-evidence.md; оба прямо сообщают, если запусков не было.
  • Показатели производительности. Ни один бенчмарк ещё не запускался. См. docs/PERFORMANCE-EVIDENCE.md. Пока в этом файле нет запуска, нет и никаких заявлений о скорости.

Сгенерированные таблицы контента принадлежат запуску. Миграция сверяет цель с планом и ОТКАЗЫВАЕТ (observed_row_set_mismatch), если находит в сгенерированной таблице строки, которые CMS не публиковала. Этот отказ и есть гарантия того, что развёрнутый бэкенд отдаёт то, что, по словам CMS, он отдаёт. Записывайте собственные данные в собственные таблицы — для этого и существуют src/owned/ и ваши собственные миграции.

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

Отсоединение — поддерживаемый исход, а не аварийный выход. Владелец удаляет вебхук, перестаёт нажимать Deploy и сохраняет репозиторий.

Что продолжает работать:

  • развёрнутый Worker и его база данных,
  • каждый уже сгенерированный маршрут,
  • уже применённая цепочка миграций,
  • собственный код владельца в src/owned/ и его собственные таблицы,
  • prisma migrate deploy, wrangler deploy, его CI.

Что прекращается:

  • повторная генерация из моделей CMS (новые определения моделей не поступают),
  • копирование вновь опубликованного контента CMS,
  • поверхность редактирования: контент редактируется в CMS.

С этого момента схема развивается через обычные миграции Prisma в репозитории владельца. Файлы в зоне generated можно свободно редактировать, как только никто больше не выполняет повторную генерацию, — правило зон имеет значение, только пока CMS ещё генерирует файлы в это дерево.

Публичный API CMS работает вживую: публикация доходит до него сразу. Его edge-кеш по умолчанию выключен (no-store); когда кеширование включено, публикация очищает его теги кеша. Сгенерированный бэкенд — это РЕЛИЗ схемы и контента: изменение в CMS доходит до него только через явную повторную генерацию и развёртывание. Он не синхронизируется непрерывно. Непрерывная синхронизация — отдельное продуктовое решение, и она не реализована.