Normalization PRD
1. Цель и продуктовый контекст
Normalization нужна для controlled semantic rewrite поверх deterministic
базового контура TextFoundry.
Проблема продукта:
-
пользователю часто нужен более согласованный tone, tense, language или стиль;
-
ручная правка после render занимает время;
-
при этом нельзя потерять детерминированный базовый output и исходные assets.
Цель функции:
-
дать explicit semantic rewrite по запросу пользователя;
-
сохранить разделение между canonical render и AI-derived output;
-
поддержать как text-level normalization, так и composition-level derivation.
2. Постановка проблемы
Обычный render в TextFoundry:
-
воспроизводим;
-
детерминирован;
-
не меняет семантику текста автоматически.
Этого достаточно для runtime truth, но недостаточно в сценариях, где нужно:
-
смягчить тон;
-
привести стиль к единому виду;
-
подготовить альтернативный вариант языка или подачи;
-
получить производную композицию, адаптированную под semantic style.
Почему deterministic rules недостаточны:
-
semantic rewrite плохо выражается набором жёстких правил;
-
качество результата зависит от контекста, значения и сохранения смысла.
3. Пользователи и сценарии
Основные пользователи:
-
пользователи render workflow;
-
авторы композиций;
-
владельцы prompt assets, которым нужны stylistic variants.
Ключевые сценарии:
-
normalize rendered text;
-
normalize composition blocks while preserving placeholders;
-
подготовить alternate tone/language variants;
-
получить производную normalized composition без изменения исходной.
4. Область охвата и не-цели
5. Критерии успеха
Функция считается успешной, если:
-
normalized result отражает requested semantic style;
-
исходный смысл остаётся приемлемо сохранённым;
-
placeholders и структурные ограничения не ломаются;
-
workflow остаётся optional и явно отделён от deterministic render.
Качественные индикаторы:
-
пользователи могут получать полезные normalized variants для common styles;
-
composition normalization даёт usable derived assets;
-
AI availability не воспринимается как обязательное условие базового render.
6. Функциональные требования
Система должна:
-
выполнять normalization только по explicit user action;
-
поддерживать text normalization через
INormalizer; -
поддерживать block-preserving normalization через
IBlockNormalizer; -
создавать derived composition и derived blocks, а не переписывать source;
-
проверять placeholders до публикации normalized block;
-
уметь повторно использовать cached normalized assets при совпадающем style и fingerprint.
Пользователь должен:
-
видеть различие между исходным и normalized результатом;
-
отдельно решать, использовать ли normalized output дальше.
7. Нефункциональные требования
Функция должна:
-
не влиять на базовый deterministic core;
-
явно деградировать при отсутствии normalizer;
-
не скрывать AI-derived semantics под обычным render result;
-
поддерживать понятные сообщения об ошибках;
-
сохранять трассируемость происхождения derived assets.
8. Ограничения и допущения
Ограничения:
-
AI provider может быть недоступен;
-
качество normalization зависит от source text и ясности style request;
-
derived assets увеличивают объём хранимых данных.
Допущения:
-
SemanticStyleзадан осмысленно и не пуст; -
пользователи понимают, что normalization - это optional rewrite, а не новая canonical truth;
-
reuse cached normalized blocks полезен для повторяющихся сценариев.
9. Зависимости и заинтересованные стороны
Зависимости:
-
INormalizer; -
IBlockNormalizer; -
SemanticStyle; -
RenderViewModel; -
CompositionsViewModel; -
OpenAI-compatible normalizer.
Заинтересованные стороны:
-
content authors;
-
владельцы composiion workflows;
-
AI workflow owner;
-
core engine owner.
10. Критерии приёмки
Пилот считается успешным, если:
-
common styles дают полезные normalized variants;
-
composition normalization создаёт пригодные derived compositions;
-
placeholders не ломаются на representative cases.
Функция считается готовой к регулярному использованию, если:
-
explicit workflow понятен пользователю;
-
stale-state и derived-result semantics не путают render truth;
-
отсутствие AI не ломает базовый deterministic продуктовый сценарий.