---
title: Как работает фреймворк написания статей
description: ~18-шаговый пайплайн под строгой хартией — одна забота, один владелец — с заземлённым драфтингом, schema-контролируемым выводом LLM и единственным гейтом качества в конце.
locale: ru
version: 0.2.0
canonical: https://enterium-developer-docs.pages.dev/developers/ru/how-it-works/writing-framework/
---

> Documentation index: https://enterium-developer-docs.pages.dev/developers/llms.txt — every page of this portal has a Markdown twin at <route>.md; the frozen API contract is at https://enterium-developer-docs.pages.dev/developers/api/openapi.json.

**Проблема:** LLM-генерация статей деградирует в энтропию, когда каждый
шаг может трогать каждую заботу: пять разных шагов, «улучшающих» тон,
дают шестой голос, которого никто не выбирал. Ответ фреймворка — хартия:
**одна забота, один владелец**, всё остальное — сантехника между
владельцами.

## Слой 1 — хартия

В пайплайне ~18 шагов, но статьёй владеют пять из них:

```mermaid
flowchart LR
    PLAN[PLAN<br/>structure +<br/>fact contract] --> WRITE[WRITE<br/>all prose is born here]
    WRITE --> VOICE[VOICE<br/>rhythm + voice rules]
    VOICE --> FRAME[FRAME<br/>intro · about ·<br/>conclusion · FAQ]
    FRAME --> GATE[GATE<br/>the single<br/>sanitize → score → verdict]
```

Всё до PLAN — подготовка (фетч, суммаризация, выравнивание по онтологии,
выбор автора); всё между владельцами — механика (картинки, референсы,
вёрстка). Ни один шаг вне WRITE не имеет права порождать прозу; ни один
шаг вне GATE — выносить вердикт. Практический выигрыш: когда регрессирует
тон, подозреваемый ровно один шаг.

## Слой 2 — заземлённый драфтинг

Драфтинг читает [исследовательский корпус](../rag-flywheel/) контракта в
трёх точках (планирование, письмо, гейт), а секция источников строится
**cited-first**: только источники, которые текст реально использовал, а
не стена извлечённых-но-проигнорированных ссылок. Кросс-энкодерный
реранкер переупорядочивает извлечённые факты перед промптом — измеренный
рычаг качества, который fail-open (падение реранкера ухудшает
ранжирование, но никогда не блокирует генерацию).

Автор выбирается из ростера контракта взвешенным случайным розыгрышем, и
его биография кормит владельца VOICE как сырьё — голос это per-author
свойство, а не глобальная константа.

## Слой 3 — schema-контролируемый вывод LLM

Структурные шаги требуют структурного вывода — буквально. LLM-вызовы,
обязанные вернуть JSON, используют **провайдерский JSON-schema decoding**
(грамматика ограничивает генерацию) — после живых проб, показавших, что
две правдоподобно выглядящие альтернативы были тихими no-op на
провайдере. Старый патч «чинить обрезанный JSON» удалён; провал парсинга
теперь идёт *измеряемым* фолбэк-путём вместо тихого, а guard-тест
пинует факты о провайдере, чтобы регрессия не прокралась обратно.

Генерация секций идёт **конкурентно** под семафором — секции независимы
по построению, как только владелец PLAN зафиксировал структуру и контракт
фактов, поэтому параллелизм ничего не стоит связности.

## Слой 4 — один гейт, отращивающий зубы

Шаг GATE — единственная точка вердикта пайплайна: механический sanitize,
скоринговая батарея, сигналы бренд-безопасности, проверки заземления —
скопленные последовательными поколениями спек в одном месте. Это самый
большой шаг пайплайна с большим отрывом, и это и есть дизайн: гейты
*должны* нарастать здесь, а не рассыпаться по шагам.

## Компромиссы

Числовые цели хартии выполнены не все — гейт-шаг разросся сильно за
целевой размер по мере приземления новых проверок, а одна запланированная
консолидация шагов не случилась. Параллелизм секций уехал вместе с
промоушеном версии без собственного выделенного A/B-протокола (дизайн-док
до сих пор числит это открытым). Оба отклонения видимы и трекаются —
хартия это направление, к которому пайплайн прижимают, а не миф о
совершенстве.

## Пощупать за две минуты

Запись прогона любой статьи перечисляет каждый шаг с таймингом и
исходом; страница [Жизненный цикл версий](../../pipelines/versioning/)
объясняет, почему каждое изменение этого фреймворка — новый неизменяемый
карв.
