Render Preview System Design
1. Краткое резюме
Функция строит отдельный preview workflow поверх composition model и deterministic render engine. Важное архитектурное решение здесь в том, что GUI поддерживает сразу три представления одного и того же asset:
-
raw preview
-
rendered output
-
normalized output
При этом только Rendered использует базовый deterministic render contract
как конечный пользовательский результат, а Raw и Normalized выступают как
сервисные preview-режимы для authoring и review.
2. Контекст и границы
-
In scope:
-
composition selection and version selection
-
runtime param parsing
-
deterministic render through engine
-
raw preview built from loaded composition snapshot
-
explicit normalization over current raw snapshot
-
clipboard actions and state reset
-
Out of scope:
-
composition mutation
-
remote runtime API
-
hidden semantic rewrite during render
-
Assumption: user chooses composition from local repository and works with the current session engine configuration.
3. Архитектурные требования
-
Functional:
-
load available compositions and versions
-
build raw preview from current composition snapshot
-
execute deterministic render with explicit params
-
allow optional semantic normalization
-
expose copy and clear actions
-
NFR:
-
reproducibility
-
explicit state transitions
-
understandable errors
-
no unintended storage writes
4. Components and Integrations
Компоненты:
-
RenderPage.qml- UI shell and action surface -
RenderViewModel- orchestration, state, validation and UX rules -
SessionViewModel- current engine instance and session-wide settings -
tf::Engine- composition loading, version listing, render and normalize APIs -
Renderer- deterministic fragment rendering and structural style application -
INormalizer- optional semantic rewrite for normalized preview
Связанные данные:
-
Composition -
Fragment -
RenderContext -
SemanticStyle -
RenderResult
6. Детализация runtime flow
6.1 Load and selection
-
RenderViewModel.reload()синхронизирует список composition ids -
при выборе composition view model загружает список версий и metadata для version list
-
при выборе версии view model refresh-ит raw preview без необходимости сразу запускать final render
6.2 Raw preview
-
raw preview строится через helper
BuildRawRender(…) -
helper загружает composition snapshot и подставляет block templates без runtime expansion
-
structural style composition при этом применяется
-
raw preview нужен как author-facing snapshot текущей composition structure
6.3 Deterministic render
-
пользователь запускает
Render -
view model валидирует composition id, version format и runtime params
-
после этого формируется
RenderContext -
Engine.Render(…)очищает block cache, загружает published composition и передает её вRenderer -
Rendererразворачивает block refs, применяет params и затем structural style
7. Надёжность и деградация
-
invalid params не должны приводить к частичному render
-
invalid version format должен останавливаться до engine call
-
missing composition или block resolution error должны surface-иться как явный error text
-
отсутствие normalizer не ломает основной render workflow
-
provider failure в normalization не меняет raw/rendered output
8. Модель данных и состояний
Ключевые состояния в RenderViewModel:
-
selected composition id
-
selected version
-
params text
-
render output text
-
raw output text
-
normalized output text
-
preview mode
-
semantic style fields
-
normalization stale flag
-
normalization status text
-
page-level status text
Это не просто UI fields, а state machine preview workflow:
-
raw snapshot может быть актуален даже без успешного render
-
normalized snapshot может быть stale относительно нового raw snapshot
-
displayed output зависит от выбранного preview mode
9. Операционные свойства
-
render preview - read-only capability относительно storage
-
normalization в этом workflow - текстовая утилита, а не publish action
-
source of truth для runtime output - deterministic
Renderer -
source of truth для raw preview - current loaded composition snapshot