Render Preview PRD
1. Цель и продуктовый контекст
-
Business problem: пользователю нужен быстрый и предсказуемый способ проверить, как composition будет выглядеть в runtime, не переходя в код или внешний сервис.
-
Service goal: дать единое рабочее место для preview composition до, во время и после deterministic render.
-
Why now: render workflow уже является центральным сценарием GUI, но пока не описан как самостоятельная capability.
-
Expected effect: быстрее проверять composition versions, runtime params и итоговый render до использования в downstream системах.
2. Постановка проблемы
-
Current state: в проекте есть полноценный render UI, но он не выделен в отдельный function-level набор документов.
-
Pain points without this capability:
-
сложно объяснить пользователю разницу между raw snapshot, deterministic render и normalized text
-
часть поведения render path скрыта в
RenderViewModelиRenderer -
требования к published-state, runtime params и preview modes не зафиксированы в одном месте
-
Why current approach is insufficient: общие архитектурные страницы описывают render только на высоком уровне и не фиксируют пользовательские решения, ограничения и operational expectations.
3. Пользователи и сценарии
-
Primary users: prompt authors, composition authors, reviewers prompt assets.
-
Secondary users: инженер, проверяющий render output перед интеграцией; QA, проверяющий предсказуемость и error handling.
-
Main use cases:
-
выбрать composition и её версию для preview
-
просмотреть raw composition snapshot до final render
-
запустить deterministic render с runtime params
-
сравнить rendered output и raw snapshot в одном UI
-
выполнить semantic normalization поверх текущего raw snapshot
-
скопировать raw или rendered output для внешнего использования
4. Scope and Non-Goals
In Scope
-
list/select compositions for preview
-
select explicit composition version
-
parse runtime params and pass them into
RenderContext -
deterministic render through
Engine.Render(…) -
raw preview built from current composition snapshot
-
normalized preview as explicit text rewrite utility
-
copy raw/copy render/clear/reload UX
5. Критерии успеха
-
пользователь понимает, что именно он сейчас смотрит: raw, rendered или normalized output
-
runtime params и version selection дают воспроизводимый deterministic result
-
ошибки parse/render/normalization подаются явно и без скрытых side effects
-
render screen пригоден как основной preview workflow перед downstream usage
6. Функциональные требования
-
Система MUST поддерживать deterministic render отдельно от normalization.
-
Система MUST позволять выбрать composition version, если такая версия доступна.
-
Система MUST валидировать runtime params и version format до вызова engine.
-
Система MUST показывать raw preview даже без успешного final render, если source snapshot доступен.
-
Система MUST не менять composition, blocks или storage в рамках render screen.
-
Пользователь MUST иметь возможность явно запустить normalization поверх текущего raw snapshot, а не поверх неявного source.
7. Ограничения и допущения
-
базовый render path работает только для published compositions
-
raw preview в GUI собирается отдельным helper-путем и не является тем же самым вызовом, что
Renderer::Render -
normalization зависит от configured AI normalizer и может быть недоступна
-
render capability в текущем состоянии привязана к GUI и local engine, а не к внешнему runtime service
8. Зависимости и заинтересованные стороны
-
Dependencies:
-
RenderViewModel -
RenderPage.qml -
tf::Engine -
Renderer -
SessionViewModel -
INormalizer -
Stakeholders:
-
prompt author
-
composition author
-
AI workflow owner
-
core engine owner
-
GUI owner
9. Критерии приёмки
-
Pilot acceptance:
-
пользователь может выбрать composition, версию и параметры
-
raw preview и rendered output согласованы по source snapshot
-
основные ошибки parse/render surfaced в UI
-
Release acceptance:
-
render preview остается стабильным при смене engine configuration
-
deterministic output воспроизводим для одинаковых version + params
-
normalized preview явно помечен как derived text, а не как новый source of truth