Перейти к содержимому

ADR-0014: Полномочия задачи и делегирование

Статус: Принято — 2026-09-24. Владелец проекта утвердил это архитектурное направление. Контракты и ограничения ниже — выбранные правила проектирования; проверки реализации остаются невыполненными.

English | Русский

ADR-0005 привязывает личность и права к доверенному контексту ядра. ADR-0012 проверяет текущие полномочия при допуске действия. Однако агент, использующий модель команд и адаптер MCP, может запросить разрешённую операцию с посторонней целью, объединить операции или передать больше доступа, чем нужно задаче. Описание «подведи итоги по этой папке» не подтверждает личность и не является исполнимой политикой доступа.

Ядро не может гарантировать, что произвольный внешний агент понимает намерение пользователя или устойчив к prompt injection. Оно может ограничить действия, ресурсы и эффекты на контролируемых границах. Полномочия задачи должны сохранять свой смысл независимо от текста агента, а параллельные вызовы и перезапуск ядра не должны обнулять бюджет. Для этого не требуются среда исполнения агентов, планировщик задач, фоновая служба или корпоративная система входа.

  • Получать полномочия из политики владельца или доверенного ввода уполномоченного человека, а не из заявленной вызывающим цели.
  • Различать субъекта, чьи права применяются, и участника, действующего от его имени.
  • Сохранить простоту локального CLI и явную настройку машинного доступа.
  • Ограничивать делегирование и совокупное потребление во всём дереве задачи.
  • Связать авторизацию, бюджеты и фиксацию эффектов на одной границе окончательного допуска.
  • Точно указать, какие ресурсы способна контролировать выбранная граница исполнения.
ВариантПреимуществоОграничение
Считать текст запроса или область, заданную агентом, полномочиемМало интеграционной работыЗапрашивающий сам определяет свои права
Проверять только общие права пользователя на каждую операциюИспользует существующую политикуНе ограничивает задачу и потребление дочерними и параллельными участниками
Требовать удалённый сервер токенов и делегированияЦентрализованная выдачаИзбыточен для локальных инструментов; формат токена сам не обеспечивает область прав и бюджеты
Полномочия задачи в ядре с локальными ссылками и необязательными доверенными издателямиОдно правило допуска для локальной и интегрированной средыТребует доверенной выдачи, координации состояния и явных ограничений

Каждый вызов привязывается к полномочию, созданному доверенным путём ядра. Полномочия задачи сужают текущие права владельца и субъекта, но не заменяют их. Агент может предложить задачу, операцию или более узкую область, но не может выдавать, расширять, передавать или продлевать собственные полномочия. Входы через CLI, библиотеку и MCP используют одно правило.

Владелец регистрирует поддерживаемые пути выдачи при сборке CLI по ADR-0010. Утверждённая конфигурация выбирает их политики. Путь выдачи — это утверждённый владельцем готовый набор правил, доверенное взаимодействие с человеком, имеющим право предоставить запрошенную область, либо явно зарегистрированный внешний источник полномочий. Обычное расширение, аргумент инструмента, сообщение модели, запись каталога или значение MCP clientInfo никогда не выступает таким источником. Подтверждение человеком должно показывать разрешаемые действия, ресурсы, назначения, срок и пределы; ответ в обычном диалоге команды не является такой выдачей.

Минимальная конфигурация сохраняет один статический каталог и явный локальный набор правил по ADR-0009. Прямой вызов CLI автоматически создаёт локальную привязку задачи для этого вызова из утверждённых правил и проверенных входов команды; обычное доверенное локальное использование не требует отдельного взаимодействия для выдачи прав. Вход в учётную запись, JWT, сервер базы данных или удалённый брокер не нужны. Общие метаданные задач могут храниться в защищённых локальных файлах с блокировками и публикацией, устойчивой к сбоям. Готовый набор предоставляет только описанную область; выбор public-catalog не открывает агенту все команды и не разрешает все операции расширений.

Машинный клиент использует утверждённую владельцем настройку точки входа: она выбирает существующее полномочие задачи либо разрешает ограниченную выдачу из конкретного набора правил. Переданные клиентом ID задачи и произвольное описание цели не могут выбрать другое полномочие. Если профиль требует выдачи человеком, а её нет, возвращается interaction_required; скрытый диалог не запускается, а готовый набор не подменяет подтверждение. Когда точка входа допускает повторное создание задач, выдача из готового набора также подчиняется ограничениям владельца на число активных корневых задач и частоту создания. Бюджет одной задачи не ограничивает совокупную работу независимо разрешённых корневых задач. Если нужен общий предел, конфигурация должна проверять общую квоту владельца/субъекта при выдаче и допуске либо отклонять неподдерживаемое требование.

Эта граница действует для согласованно работающих ядер и опосредованных ими действий. Процесс, способный менять доверенное состояние владельца или обходить ядро с правами той же учётной записи ОС, находится вне этой защиты. ADR-0015 определяет, обеспечиваются ли более сильные ограничения. Недоступность обязательного источника полномочий или координатора никогда не приводит к выдаче из более слабого локального набора правил.

Ниже определён логический контракт ядра, а не опубликованная внешняя схема и не требование подписывать токен. Простой вариант разрешает непрозрачную ссылку taskAuthorityRef через защищённое локальное состояние. Знание ссылки само по себе не разрешает её использование. Зарегистрированный внешний формат должен проверить издателя, аудиторию, получателя, срок и привязку, затем привести данные к этому контракту; JWT необязателен.

ПолеСмысл и проверка
taskId, taskAuthorityRef, taskEpochСозданные ядром идентичность задачи, непрозрачная ссылка на полномочие и монотонный барьер отзыва. Не переиспользуются и не принимаются как самоподтверждающиеся заявления клиента.
issuerBinding, issuanceEvidenceЗарегистрированный издатель или доверенный локальный путь выдачи, утверждённая версия готовых правил/политики либо точная запись согласия человека и основание выдачи. Это доказательство существует независимо от области, запрошенной агентом.
principalBindingСуществующая привязка субъекта из ADR-0005 с проверенным контекстом аутентификации, когда он требуется. Локальный субъект остаётся явно локальным.
actorBindingОпределённая ядром идентичность действующего клиента, контекста запуска или делегированного участника с доверенной привязкой к точке входа/транспорту и допустимому получателю. Отображаемое имя, заявленная личность агента или одно транспортное соединение не подтверждают личность человека.
ownerNamespace, accessDomain, ownerConfigRevisionТочные владелец, область политики и конфигурация выдачи. Текущая политика должна продолжать разрешать эти привязки; сохранённая версия не замораживает старые права.
scopeКонечный набор зарегистрированных команд/действий и проверенных селекторов ресурсов по ADR-0009, а также поддерживаемые ограничения источников, назначений и эффектов. Неизвестные операции, пропущенные селекторы вместо явной общей области и необеспечиваемые ограничения отклоняются.
purposeНеобязательное ограниченное описание для показа и аудита. Оно не исполняется как политика на естественном языке и не расширяет scope.
issuedAt, notAfterДоверенное время выдачи и конечный непродлеваемый срок задачи. Более ранние пределы личности, издателя, владельца, предков и вызова всегда имеют приоритет.
parentAuthorityRef, rootAuthorityRef, delegationDepthЗащищённая цепочка происхождения; отсутствие родителя у корня задано явно. Ядро разрешает всю ограниченную цепочку; отсутствующие или противоречивые предки запрещают использование.
delegationAllowed, delegationLimitЯвное разрешение и конечные пределы оставшейся глубины и числа потомков. По умолчанию делегирование запрещено. Разрешение вызова не означает разрешения делегировать.
ledgerRef, budgetCeilingsОбщий корневой учёт и конечные типизированные пределы; дочерние пределы только сужают ограничения предков. Счётчики и резервы — авторитетное состояние координатора, а не переданный клиентом остаток.

Вызов фиксирует taskId, taskAuthorityRef, taskEpoch, actorBinding и principalBinding вместе с командой, выпуском и привязками владельца, уже требуемыми ADR-0002. Задача охватывает несколько вызовов только при явном разрешении политики выдачи. Запуск другого процесса, переподключение MCP, смена ID запроса или обновление учётных данных не создают новый бюджет задачи.

actorBinding отвечает на вопрос, кто действует; principalBinding — чьи права ограничивают действие. Собственные API-учётные данные службы ядра не отвечают ни на один вопрос за вызывающего. Утверждённый владельцем локальный запуск может определить локального участника, не заявляя корпоративную личность. Передача другому участнику требует явного пути делегирования ниже, а не копирования ссылки. Контекст запросов и аудита сохраняет обе привязки.

Эффективная область и поддерживаемые ограничения

Заголовок раздела «Эффективная область и поддерживаемые ограничения»

Допуск требует пересечения текущей политики владельца, текущих прав субъекта, оставшихся полномочий каждого предка, области текущей задачи, привязки действующего участника, ограничений доверенного расширения и команды и исходных пределов вызова. Каждый участник проверки может запретить действие; ничьё разрешение не отменяет чужой запрет. Повторное использование решения брокера по ADR-0012 также требует этого текущего пересечения. Недоступность данных, нужных для его установления, исключает допуск.

Доверенные регистрации операций выводят фактические ресурсы из проверенных параметров. Они определяют, какие поля, идентичности источников, назначения, перенаправления и категории эффектов можно проверить. Когда владелец требует ограничений потока информации или последовательности, зарегистрированная политика должна хранить нужное состояние и применять их на контролируемой границе. Разрешения читать и отправлять не доказывают допустимость конкретного сочетания чтения и отправки. Непрозрачная внешняя модель, уже получившая открытый текст, не является интерпретатором, сохраняющим происхождение данных: Rukh не может обещать отслеживание каждого преобразования или запрет раскрытия в обход ядра.

Заявленные командой эффекты и аннотации источников/назначений — запрос на проверку политики, а не механизм её обеспечения. Исполнение host-trusted может явно открывать доверенный нативный код в пределах политики владельца с признанием его обычных прав ОС. Набор правил машинного доступа не подразумевает песочницу ОС. Если владелец требует ограничений, которые исполнитель или зарегистрированная операция не способны обеспечить, до запуска или допуска эффекта возвращается unsupported; скрытый переход к host-trusted запрещён. Выбор изоляции и доказательства её возможностей определены в ADR-0015.

По умолчанию делегирование отключено. Разрешённый доверенный путь выдачи проверяет делегирующего участника, текущую цепочку предков, запрошенного дочернего участника, точную более узкую область и оставшиеся бюджеты. Ядро атомарно создаёт дочернюю запись и её происхождение до возврата ссылки. Переданная потомком цепочка или пересланный пользовательский токен не считаются достаточным доказательством делегирования.

Область потомка пересекается с областями всех предков; его срок не позже срока любого предка, а пределы не превышают их оставшихся возможностей. Потомок не может менять издателя, субъекта, область доступа, пространство владельца или ограничения исполнения. Обязательства и запреты сохраняются. Отзыв или истечение полномочий предка останавливает новые допуски потомков. Последующее изменение владельца может дополнительно сузить или отозвать существующую задачу, но не скрыто расширить выданные права.

Бюджеты соседних потомков не являются независимыми копиями бюджета родителя. Потомки и все участвующие процессы ядра расходуют общий корневой бюджет, дополнительно соблюдая пределы каждого предка и потомка. Запись делегирования и резерв его бюджета фиксируются вместе; частичная запись или потерянный ответ не разрешают выдавать дубликат потомка. Восстановление проверяет записанный переход, а не предполагает, что потомок не создан.

Схема показывает принятый поток полномочий, а не службу фоновых задач.

Принятые полномочия задачи и сужающее делегирование
Принятые полномочия задачи и сужающее делегированиеДоверенная политика владельца или уполномоченный человек выдаёт полномочия задачи. Участник может запросить только более узкие дочерние полномочия. Перед эффектами все действия задачи и потомков проходят текущую политику и общий корневой учёт.Доверенный путь выдачиПолномочия задачиПривязанный участникДелегирование разрешено?Полномочия потомкаТипизированная ошибкаТекущая политика иатомарный допуск бюджетаОбщий корневой учётГраница эффектов изADR-0016Утверждённая область ипределыЗапросить более узкогопотомкаТекущие пределы родителя ипредковДа, атомарная дочерняязаписьНетЗапрос действияЗапрос действияОстатки и резервыОдин допущенный эффектПринятые полномочия задачи и сужающее делегированиеДоверенная политика владельца или уполномоченный человек выдаёт полномочия задачи. Участник может запросить только более узкие дочерние полномочия. Перед эффектами все действия задачи и потомков проходят текущую политику и общий корневой учёт.Доверенный путь выдачиПолномочия задачиПривязанный участникДелегирование разрешено?Полномочия потомкаТипизированная ошибкаТекущая политика иатомарный допуск бюджетаОбщий корневой учётГраница эффектов изADR-0016Утверждённая область ипределыЗапросить более узкогопотомкаТекущие пределы родителя ипредковДа, атомарная дочерняязаписьНетЗапрос действияЗапрос действияОстатки и резервыОдин допущенный эффект

У каждого измерения бюджета есть доверенная единица, конечный предел, правило измерения и правило резервирования. Локальный вариант считает допуски команд и защищаемых операций; обычные события вывода и логов сохраняют собственные квоты, а не тратят действие задачи на каждый байт. Дополнительными измерениями могут быть байты, переданные через контролируемый канал, или единицы стоимости поставщика. Название «стоимость» не делает величину измеримой. Жёсткий денежный предел требует доверенной максимальной цены, известной до отправки, включая применимые дополнительные расходы; оценки или итогового счёта после исполнения недостаточно.

Каждый учитываемый вызов команды или защищаемой операции до отправки атомарно и устойчиво расходует один допуск по корню, каждому предку и потомку, включая обычные доверенные вызовы. Тот же переход проверяет текущие полномочия, отзыв и применимые сроки; запрос из очереди не использует прежнюю проверку остатка. Потраченный допуск учитывает попытку независимо от её результата; для резервов переменной стоимости ниже действуют отдельные правила расчёта.

Для контролируемого эффекта по ADR-0016 координатор допуска атомарно проверяет все текущие привязки, барьеры, права и сроки, затем одним упорядоченным переходом резервирует доверенную максимальную стоимость операции в бюджетах корня, предков и потомка до отправки. Параллельные ядра и соседние потомки не могут одновременно потратить один остаток. Переход использует effectId и reservationId из ADR-0016; проверки личности и аутентификации и обязательный аудит перед действием сохраняются. Кэш авторизации никогда не кэширует резерв бюджета или разрешение эффекта. Запрос из очереди проходит эти проверки при фактическом допуске. Простые счётчики допусков команд не охватывают произвольные эффекты нативной программы: профиль, требующий предела эффектов, обязан выбрать обеспечиваемый контракт контролируемых эффектов либо отклонить операцию.

До отправки координатор надёжно записывает потраченные и зарезервированные суммы. Подтверждённо неотправленная попытка может освободить резерв; подтверждённый измеренный результат фиксирует фактическое потребление и освобождает только доказанно неиспользованную часть. Если эффект мог произойти, резерв сохраняется, пока авторитетная сверка по ADR-0016 не установит результат и стоимость. Отмена, тайм-аут, завершившийся процесс, истёкшая задача или потерянная блокировка не доказывают нулевую стоимость эффекта. Защитная запись может пережить задачу и её область исполнения на переднем плане. Очистка и истечение срока не обнуляют общий остаток; переподключение или перезапуск не воссоздают его из готовых правил.

Если требуется жёсткий предел, неизвестная или неограниченная максимальная стоимость делает операцию unsupported до отправки. Если поставщик не способен ограничить продолжающийся эффект, локальный тайм-аут не обеспечивает этот предел. Счётчики не переполняются и не становятся отрицательными; непредставимые значения отклоняются. Общий журнал ведёт учёт, но не гарантирует однократное исполнение или откат внешней службы.

Координатор задач может использовать локальную транзакционную инфраструктуру ADR-0007/0011/0012; демон и сервер базы данных не требуются. При этом он обязан обеспечивать устойчивый порядок резервирования, отзыва и восстановления между всеми процессами, использующими полномочие. Нечитаемое, повреждённое или неполное ранее инициализированное состояние исключает соответствующий допуск; оно не считается пустым бюджетом. Учёта только в памяти процесса недостаточно для задачи, доступной другому ядру или переживающей переподключение. Ожидание координации укладывается в предел ADR-0012 и оставшийся бюджет вызова.

Полномочие задачи отдельно от ExecutionScope из ADR-0004, владеющего исполнением и очисткой. Каждый вызов или операция проверяет собственный срок и срок допуска задачи, не меняя закреплённый срок самой задачи. Срок полномочия — не новый тайм-аут процесса: его истечение запрещает новые допуски, но автоматически не останавливает уже допущенную работу. Действительная задача не удерживает процесс, не отделяет работу переднего плана и не открывает завершённый вызов заново. Закрытие области исполнения не стирает учёт и не доказывает отсутствие внешнего эффекта. Обычно отзыв запрещает новые допуски; остановка выполняющейся работы сохраняет существующие правила отмены и финализации. Этот ADR не вводит фоновое исполнение или API возобновляемых заданий.

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

ОграничениеПринятое значение или правило
Локальный набор для прямого вызоваОдин вызов и не более 256 допусков защищаемых операций; без делегирования. Дополнительные ограничения ресурсов/эффектов задаёт явная политика владельца
Срок задачиНе более 1 часа от выдачи, дополнительно ограниченного всеми применимыми сроками издателя, личности, предков и владельца; без скользящего продления
Машинный набор или набор для нескольких вызововТребуются явные конечные пределы числа вызовов, операций, одновременных допусков и выдачи; неограниченный набор не выбирается неявно
ДелегированиеОтключено; явно включённый профиль по умолчанию допускает не более 4 переходов и 32 потомков на корень. Все используют общий корневой бюджет
Запись полномочияНе более 64 КиБ нормализованных данных, 256 записей области действий/ресурсов, 16 измерений бюджета и 2 КиБ текста цели в UTF-8
Логические ID и ссылкиНепрозрачные значения ядра; внешние поля идентификаторов — не более 2 КиБ UTF-8 каждое. Отклоняются некорректный Unicode, управляющие символы, неизвестные обязательные поля, повторяющиеся ключи и неразрешённые ссылки
Вместимость учётаПо умолчанию не более 1 024 активных корней и 10 000 сохраняемых записей эффектов/делегирования на пространство владельца; нехватка квоты отклоняет новую работу вместо удаления неразрешённых резервов

Пределы прямого набора ограничивают опосредованную ядром работу, но не обычные файловые и сетевые действия нативной программы. Задача, которой нужен более широкий профиль, выбирает его через доверенную политику владельца до выдачи. Запросы не продлевают существующую задачу после исчерпания бюджета или срока. Новая авторизация явна и не может освобождать старые неопределённые резервы или обходить обязательную общую квоту.

Некорректная область, неизвестный издатель, подделанная привязка или неверное происхождение дают invalid_request; недоступный доверенный издатель или координатор — unavailable, а повреждённое согласованное состояние использует существующий код storage_error. Отсутствие обязательного взаимодействия с человеком даёт interaction_required; обязательной аутентификации — authentication_required. Истёкшие, отозванные или заменённые привязки дают context_invalidated; превышение счётчиков/размеров — limit_exceeded; необеспечиваемое ограничение — unsupported. Полный запрет политики остаётся deny, а не транспортной ошибкой. Срок, отмена, конфликт версий и неопределённая фиксация сохраняют существующие типизированные значения. Это диагностика операций с отображением через ADR-0002, а не новые конечные исходы вызова. Поздние ответы о правах или учётных данных не снимают барьер задачи и не перепривязывают участника.

  • Произвольный клиент предлагает работу, не становясь источником собственных полномочий. Локальные готовые правила не требуют корпоративной инфраструктуры.
  • Доверенный код остаётся доступным для использования при явном описании фактической границы контроля.
  • Общий учёт и сужение делегирования не дают параллельным потомкам умножать бюджет задачи; сохранённая неопределённость может обоснованно удерживать квоту до сверки.
  • Ограничения задачи не гарантируют понимание намерения, корректность созданных артефактов или поведение в обход выбранной границы изоляции.

Владелец принял архитектуру 2026-09-24. Принятие не означает реализации выдачи полномочий задачи, координатора делегирования или общих бюджетов. Следующие проверки не выполнялись:

  1. Создать задачу из локального утверждённого набора без входа или удалённых служб; отклонить переданные агентом издателя, участника, субъекта, расширение области и чужую ссылку задачи. Проверить, что текст цели не влияет на политику.
  2. Состязать смену участника/учётной записи, отзыв задачи и предка, обновление учётных данных, фиксацию политики и поздние ответы брокера с окончательным допуском. Сохранить прежние сроки аутентификации, барьеры источников и привязки вызова.
  3. Выдать более узкого потомка, затем попытаться превысить общий бюджет соседними потомками, глубину/число потомков, изменить субъекта/область и воссоздать свежий бюджет после переподключения. Состязать несколько процессов ядра за последний остаток резерва.
  4. Вызвать сбой до/после надёжной записи резерва и отправки эффекта, потерять ответ, перезапуститься с отсутствующим/повреждённым состоянием и исчерпать место учёта. Неопределённый эффект не освобождает квоту и не исполняется дважды; подтверждённая сверка списывает только доказанную сумму.
  5. Отклонить эффекты неизвестной стоимости при жёстком денежном пределе и неподдерживаемые ограничения источников/назначений или изоляции. Проверить возможность явно разрешённого доверенного нативного профиля без заявления об изоляции ОС.
  6. Разделить срок задачи и жизненный цикл переднего плана: истечение задачи блокирует новые эффекты, отмена сохраняет первую причину, финализация использует прежний бюджет, а сохраняемые резервы не создают фоновых заданий.

Диаграмма

Перетаскивайте схему · + / − — масштаб · 0 — целиком · Esc — закрытьПеремещайте и увеличивайте схему двумя пальцами

100%