Перейти к содержанию

Модель системы

Доменная модель

Реализованный домен - локально-ориентированный издатель плюс serverless-контур AI-трансформаций. Будущие концепции Compiler / Harness перечислены отдельно и не входят в текущую модель данных.

Реализованные концепции

Концепция Смысл
User Аутентифицированная идентичность из Cognito
Role USER, ADMIN, SUPER_ADMIN
Compiler Именованный тип трансформации (исторически «Template») для класса артефакта
Compiler version Исполняемая ревизия конфигурации Compiler / промпта
Output template Презентационная структура артефакта; сейчас слабее отделена от логики Compiler, чем в целевой модели
Compile run / transformation job Асинхронная серверная AI-задача со статусом, стоимостью и обработкой результата
Artifact Сгенерированный Markdown / документный выход запуска
Credit account Баланс пользователя для compute-тяжёлых операций
Credit ledger entry Атрибутируемое списание / начисление использования
Runtime configuration Серверные настройки, которые можно менять без деплоя
Prompt definition / prompt version Версионированное поведение ИИ с публикацией / откатом
Audit event След чувствительных административных действий и трансформаций

Точные имена таблиц и атрибуты в публичном пакете опущены.

Целевые / запланированные концепции

Их нельзя читать как реализованные сущности:

Концепция Смысл
Artifact Contract Объективное определение успеха для Compiler: разбор, схема, свидетельства, ограничения вёрстки
Fact Каноническое извлечённое утверждение со статусом (asserted / uncertain / conflicting / unknown)
Evidence Указатель происхождения от Fact обратно к исходному материалу
Situation Оркестрация нескольких Compiler вокруг одной цели пользователя
Artifact pack Набор связанных артефактов, которые должны оставаться согласованными
Patch Compile Brownfield-обновление существующего артефакта вместо полной регенерации

Контекстная диаграмма

    C4Context
    title Системный контекст DocCompile

    Person(author, "Автор")
    Person(admin, "Администратор")

    System(dc, "DocCompile", "Локально-ориентированный издатель и сервис AI-компиляции")

    System_Ext(llm, "LLM-провайдер", "Сменяемый API генерации")
    System_Ext(paddle, "Paddle", "Биллинг merchant of record")
    System_Ext(idp, "Amazon Cognito", "Идентичность")

    Rel(author, dc, "Рендерит локально; запрашивает компиляцию")
    Rel(admin, dc, "Конфиг, промпты, наблюдаемость")
    Rel(dc, idp, "Аутентифицирует")
    Rel(dc, llm, "Задачи трансформации")
    Rel(dc, paddle, "Checkout и webhooks")

Модель данных

Высокоуровневая реализованная модель

erDiagram
    USER ||--o{ CREDIT_ACCOUNT : holds
    USER ||--o{ TRANSFORMATION_JOB : requests
    USER ||--o{ AUDIT_EVENT : generates

    CREDIT_ACCOUNT ||--o{ CREDIT_LEDGER_ENTRY : records

    COMPILER ||--o{ COMPILER_VERSION : versions
    COMPILER_VERSION ||--o{ PROMPT_VERSION : uses
    COMPILER_VERSION ||--o{ TRANSFORMATION_JOB : executes

    RUNTIME_CONFIG ||--o{ PROMPT_VERSION : publishes

    TRANSFORMATION_JOB ||--o| ARTIFACT : produces
    TRANSFORMATION_JOB }o--|| CREDIT_LEDGER_ENTRY : meters

    USER {
        string id PK
        string role
    }

    COMPILER {
        string id PK
        string name
        string publication_state
    }

    COMPILER_VERSION {
        string id PK
        string compiler_id FK
        string status
    }

    PROMPT_VERSION {
        string id PK
        string body
        string published
    }

    TRANSFORMATION_JOB {
        string id PK
        string user_id FK
        string compiler_version_id FK
        string status
        string cost_units
    }

    ARTIFACT {
        string id PK
        string job_id FK
        string format
    }

    CREDIT_ACCOUNT {
        string id PK
        string user_id FK
        int balance
    }

    CREDIT_LEDGER_ENTRY {
        string id PK
        string account_id FK
        int delta
        string reason
    }

    RUNTIME_CONFIG {
        string id PK
        string key
        string value
    }

    AUDIT_EVENT {
        string id PK
        string actor_id FK
        string action
    }

publication_state (PUBLIC / INTERNAL / DISABLED) - целевой жизненный цикл Compiler. Если продуктовый репозиторий ещё не сохраняет его, считать запланированным.

Целевая модель фактов (не реализована)

Fact
├── id
├── concept
├── value
├── status: asserted | uncertain | conflicting | unknown
├── evidence[]
├── source
└── provenance

Примеры доменных фактов (планируются): RequirementFact, BusinessRuleFact, ConstraintFact, NfrFact, EndpointFact, EmploymentFact, SkillFact.

Ключевая идея модели

Центр тяжести реализации - transformation job: явный, тарифицируемый, асинхронный запрос компиляции. Локальные документы не являются источником истины системы в облаке; они остаются у пользователя, пока не запрошена задача.

Целевой центр тяжести - контракт Compiler: входной контракт, схема фактов, контракт артефакта, валидаторы, стратегии ремонта и метрики качества. Добавление Compiler не должно требовать изменения оркестрации Harness.

Концепция Compiler

Compiler - это не просто каркас Markdown. Это контракт трансформации для конкретного класса профессионального артефакта:

Compiler
├── Input Contract
├── Fact Schema
├── Artifact Contract
├── Evidence / Grounding Rules
├── Output Template
├── Validators
├── Repair Strategies
├── Presentation Constraints
└── Quality Metrics

Архитектурный принцип (целевой):

Artifact Contract
=
Compiler Invariants
+ Output Template
+ User Options
+ Organization Rules

Пользовательский шаблон может менять структуру артефакта, но не должен ослаблять гарантии Compiler.

Примеры текущих / планируемых Compiler: ADR; Requirements Specification; Resume / CV; API Contract; System Design; Meeting Summary; Proposal; Executive Summary. Как рабочие трансформации сегодня заявлены только первые из списка.

API-контракты

Имена эндпоинтов в публичном пакете иллюстративны. Бэкенд предоставляет REST/JSON API для SaaS-операций, закрытых идентичностью. Локальный рендеринг через этот API не идёт.

Группы возможностей:

  • аутентификация через Cognito;
  • submit / status / result задачи трансформации;
  • баланс кредитов и ledger;
  • административная runtime-конфигурация и версии промптов;
  • биллинговые webhooks от Paddle.

Слои безопасности:

  • JWT от Cognito на аутентифицированных маршрутах;
  • проверки ролей для операций ADMIN / SUPER_ADMIN;
  • секреты и ключи провайдера остаются на сервере;
  • маршруты webhook проверяют подписи Paddle;
  • результаты задач доступны владельцу, кроме административной наблюдаемости.

Жизненный цикл задачи трансформации (реализованное направление)

submit
-> queued / running
-> succeeded | failed
-> result available to owner

Имена статусов в коде могут отличаться. Инвариант: задача атрибутируема, тарифицируема и инспектируема; это не свободная чат-сессия.

Паттерн обработки ошибок

Типичные статусы:

200 OK                  успешное чтение
202 Accepted            задача принята
400 Bad Request         некорректный ввод
401 Unauthorized        отсутствует или невалидна идентичность
403 Forbidden           аутентифицирован, но не разрешено
404 Not Found           ресурс отсутствует или невидим
409 Conflict            конфликт состояния
429 Too Many Requests   лимит частоты или кредитов