Принципы
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— это применяемые границы, а не баги.
Связанное
- Безопасность — как гранты применяются.
- Архитектура — реестр и атомарность.
- API-ключи — матрица скоупов.