Как должен работать Prompt Server и как синхронизируются изменения клиента и сервера
- 1. Короткий ответ
- 2. Почему вообще возникает вопрос про синхронизацию
- 3. Базовая модель продукта
- 4. Где именно происходит синхронизация
- 5. Почему это проще и надёжнее
- 6. Как это связано с запретом
publish/update/delete/deprecateна сервере - 7. Но разве сервер и клиент не должны использовать один и тот же движок
- 8. Что значит "тот же engine, но другой boundary"
- 9. Как practically может быть устроена синхронизация published state
- 10. Какой вариант кажется самым естественным
- 11. Что ломается, если сервер тоже умеет authoring mutations
- 12. Что это меняет в модели синхронизации
- 13. Почему текущая ставка архитектурно легче
- 14. Что это означает для рендера
- 15. Практический вывод
- 16. Когда стоит пересматривать эту модель
- 17. Связанные документы
Этот документ написан как объясняющий материал, а не как формальный ADR.
Его задача:
-
максимально понятно объяснить, почему
Prompt Serverсейчас описан какpublished-only; -
показать, как в этой модели синхронизируются изменения между workbench и server runtime;
-
сравнить это с вариантом, где сервер сам умеет authoring mutations;
-
показать, почему оба варианта используют один и тот же core engine, но по-разному ограничивают его снаружи.
1. Короткий ответ
Если сформулировать совсем коротко:
-
Workbenchсоздаёт и редактирует drafts; -
Publishпревращает draft в immutable published version; -
Prompt Serverчитает только published versions; -
синхронизация между клиентом и сервером происходит не на уровне "живых правок", а на уровне
publish.
То есть синхронизируется не editor state, а опубликованные версии.
2. Почему вообще возникает вопрос про синхронизацию
Интуитивно хочется представить систему так:
-
есть клиент;
-
есть сервер;
-
клиент что-то меняет;
-
сервер должен как-то синхронизировать это с собой.
Но у TextFoundry есть важная особенность:
-
система различает
DraftиPublished.
Из-за этого существует два принципиально разных класса синхронизации:
-
синхронизация черновиков и живых редакторских сессий;
-
синхронизация опубликованных immutable versions.
Именно между ними проходит главная архитектурная граница.
3. Базовая модель продукта
Что это означает:
-
workbench и server не конкурируют за одну и ту же роль;
-
workbench отвечает за authoring;
-
server отвечает за delivery;
-
server не должен обслуживать незавершённые черновики как production truth.
4. Где именно происходит синхронизация
В текущей архитектурной ставке событие синхронизации выглядит так:
-
пользователь редактирует draft локально;
-
выполняет review;
-
выполняет
publish; -
новая published version становится доступна server runtime.
Ключевая мысль:
-
единица синхронизации здесь не
draft change; -
единица синхронизации здесь
published version.
5. Почему это проще и надёжнее
Когда синхронизируются только published versions:
-
server не нужно понимать dirty state;
-
server не нужно знать про edit sessions;
-
server не нужно разруливать merge conflicts по drafts;
-
server не нужно решать, какой незавершённый edit "настоящий";
-
проще делать audit и воспроизводимость.
С архитектурной точки зрения это означает:
-
sync event =
publish; -
source of truth для delivery =
published; -
runtime clients никогда не видят случайный промежуточный state.
6. Как это связано с запретом publish/update/delete/deprecate на сервере
Если Prompt Server не имеет mutation endpoint-ов, то он:
-
не участвует в authoring;
-
не создаёт drafts;
-
не меняет published state;
-
не становится второй точкой входа в lifecycle assets.
Из этого следует, что sync story становится очень простой:
-
workbench меняет;
-
publish фиксирует;
-
server читает.
Это и есть главная причина, почему такой вариант легче сопровождать.
7. Но разве сервер и клиент не должны использовать один и тот же движок
Должны. И это важный момент.
Нынешняя идея не в том, чтобы делать два разных engine.
Идея в том, чтобы один и тот же core engine использовать через разные
boundary.
То есть:
-
engine общий;
-
domain model общая;
-
renderer общий;
-
versioning logic общая.
Разница не в движке, а в том, какой слой имеет право вызывать какие операции.
8. Что значит "тот же engine, но другой boundary"
Это означает примерно следующее.
Workbench может использовать engine для:
-
draft editing;
-
validation;
-
publish;
-
deprecate/delete;
-
compare/update;
-
AI-assisted authoring workflows.
Prompt Server может использовать тот же engine только для:
-
read published asset;
-
resolve published composition;
-
validate runtime params;
-
deterministic render.
То есть engine один, а permission surface разная.
9. Как practically может быть устроена синхронизация published state
Есть три реалистичных варианта.
9.1. Общий storage
Смысл:
-
workbench и server смотрят в одно и то же versioned хранилище;
-
publish создаёт новую published version;
-
server начинает видеть её сразу или почти сразу.
Плюсы:
-
просто;
-
почти нет дополнительной sync-логики;
-
один source of truth.
Минусы:
-
tighter coupling;
-
server и authoring сильнее связаны инфраструктурно;
-
сложнее изолировать delivery environment.
9.2. Репликация published entities
Смысл:
-
publish в authoring системе создаёт published version;
-
затем published version реплицируется в server-side store;
-
server работает только со своей published replica.
Плюсы:
-
чище отделены authoring и delivery;
-
легче делать отдельный deployment;
-
можно контролировать release flow.
Минусы:
-
появляется replication lag;
-
нужен отдельный propagation pipeline.
9.3. Export/import published bundles
Смысл:
-
publish создаёт не просто запись в storage, а переносимый release artifact;
-
server импортирует такие published bundles.
Плюсы:
-
очень чистая release model;
-
хорошо для controlled environments;
-
удобно для auditable delivery.
Минусы:
-
heavier operational flow;
-
меньше ощущение "живой" синхронизации.
10. Какой вариант кажется самым естественным
Если говорить про эволюцию проекта по шагам:
-
сначала естественнее
shared storageили very thinpublished replication; -
позже, если появится отдельная server platform, логичнее перейти к
replicated published store.
Почему:
-
это сохраняет простую mental model;
-
это не требует сразу строить сложную release platform;
-
это согласуется с тем, что server работает только с published data.
11. Что ломается, если сервер тоже умеет authoring mutations
Теперь посмотрим на альтернативу:
-
server умеет
publish,update,delete,deprecate; -
возможно, умеет и draft operations.
Тогда система перестаёт быть простой.
Здесь уже возникает вопрос:
-
кто владелец draft;
-
как синхронизировать одновременные изменения;
-
как отлавливать конфликты между GUI и remote clients;
-
как представлять dirty state;
-
как устроены edit sessions;
-
где проходит review before publish.
То есть ты уже строишь не prompt registry/render server, а distributed authoring system.
12. Что это меняет в модели синхронизации
В authoring-capable server уже недостаточно publish propagation.
Нужна полноценная distributed sync model.
В такой системе уже нужны:
-
revision ids;
-
optimistic locking;
-
conflict resolution;
-
draft ownership model;
-
merge semantics;
-
edit session protocol.
Это не "плохая" система. Но это заметно более сложный продукт.
13. Почему текущая ставка архитектурно легче
Сравнение:
Published-only Prompt Server:
-
проще sync model;
-
проще security;
-
проще API compatibility;
-
проще observability of correctness;
-
проще объяснить пользователям.
Authoring-capable Server:
-
гибче;
-
сильнее как удалённая платформа;
-
но требует намного более сложного lifecycle and consistency model.
Поэтому текущая ставка не утверждает, что mutation endpoints "никогда нельзя". Она утверждает другое:
-
для первого server product layer лучше published-only model.
14. Что это означает для рендера
Важно: рендер всё равно остаётся на том же engine.
То есть render path не страдает от того, что server read-only. Наоборот, он становится чище:
-
server берёт published composition;
-
engine resolve-ит published block versions;
-
renderer строит deterministic output;
-
клиент получает результат и metadata.
15. Практический вывод
Если сформулировать совсем прямо:
-
да, клиент и сервер могут использовать один и тот же engine;
-
нет, это не требует, чтобы server умел все те же mutation operations;
-
в текущей модели синхронизация происходит через
publish, а не через distributed live editing; -
именно поэтому
published-only Prompt Serverпока выглядит более устойчивой и понятной архитектурной ставкой.
16. Когда стоит пересматривать эту модель
Текущую ставку стоит пересмотреть, если продукту действительно понадобится:
-
remote authoring from multiple clients;
-
shared draft editing;
-
server-side publish workflows;
-
multi-user collaborative prompt editing;
-
central admin/API control over prompt lifecycle.
Тогда уже нужно будет честно проектировать не просто Prompt Server, а
Remote Authoring Platform.