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. Область охвата и не-цели

В области охвата

  • text normalization;

  • composition normalization;

  • explicit semantic style application;

  • derived composition/block creation;

  • optional normalization of static text in composition.

Вне области охвата

  • automatic semantic mutation inside Render();

  • silent overwrite of source blocks или source compositions;

  • скрытая background normalization;

  • quality ranking between multiple normalized candidates.

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 продуктовый сценарий.