Skip to content

Принципы

Runne строится на трёх обязательствах. Они берут начало в философии рантайма Runne Engine и переносятся на managed API.

Контракты вместо заявлений

Клиенты запрашивают работу; платформа решает, что разрешено, и фиксирует, что произошло на самом деле. Ничто не принимается на слово только по утверждению вызывающего:

  • Каждый API-контракт валидируется (Zod) до того, как коснётся состояния.
  • Средства движутся только через явные, аудируемые операции реестра — никогда через неявный побочный эффект.
  • Биллинг вычисляется из измеренного потребления, а не из того, что заявляет вызывающий.

Доказательства проверки

«Готово» — это заявление, пока у него нет доказательств. Платформа хранит доказательство:

  • Каждое изменение баланса пишет строку в transactions со снимком balance_after — реестр и есть цепочка доказательств.
  • Каждый запрос пишет usage_record, связывая токены со стоимостью.
  • Каждая финансовая операция пишет запись в audit_log (credit, debit, reserve, refund, settle, adjust, suspend).

Тот же стандарт применяется к самому продукту: функции поставляются с доказательством в виде тестов и typecheck, а не правдоподобия.

Гранты возможностей

Опасные действия требуют явного гранта, а не «окружающих» полномочий:

  • API-ключи несут скоупы — ключ может вызывать только то, что ему выдано (chat:write, balance:read).
  • Воркспейсы изолированы — каждый запрос перепроверяет владение; нет межарендного доступа по id.
  • Admin-действия требуют явной роли platform-admin, читаемой из базы, а не самозаявленного claim.

Что это значит для интеграторов

  • Запрашивайте минимальный нужный скоуп и ротируйте ключи вместо расширения.
  • Считайте реестр источником истины для споров о биллинге — баланс выводится из него.
  • Ожидайте, что 403 insufficient scope и 402 insufficient balance — это применяемые границы, а не баги.

Связанное