authority:
section behaves exactly as before, and the moment one exists every principal needs a grant and
no grant means denied.
Two axes, one action
runnable
decision:. How much autonomy stripe.refund has is the same for everybody;
what differs is whether they may ask. The two are evaluated separately, authority first, and
combine as the stricter of the pair: a €50,000 refund from the head of support is within the
grant and denied by the policy; a €500 refund from an agent with no grant is allowed by the
policy and denied by authority, before any approval request is written.
Delegation only narrows
A principal holding adelegable grant can hand a slice of it on at runtime with
ctrlrun delegate. The delegated grant is valid only if it is provably a subset of its parent
on every dimension, at creation and again at every evaluation, so narrowing the parent later
narrows every child. Omitting a dimension the parent constrains is rejected, not inherited: a
child that drops resources: would authorize resources its parent never could. delegable: true
requires expires_at, because authority that can mint more authority and never lapses is the one
shape this model refuses. ctrlrun revoke cuts a chain of any depth with one write; every
evaluation walks to the root.
Identity is consumed, never invented
The principal comes from an identity provider the operator installs:ctrlrun.context(agent=...)
for a process that knows who it is, a HeaderIdentityProvider behind a proxy that authenticates,
or a JWTIdentityProvider that verifies a bearer token against a JWKS or a pinned key and maps
the verified claims onto a principal. CTRLRun issues no credential and defines no identity
format. An expired credential is refused before authority and before policy.
The guarantee it supports
Authority and delegation: G7 (no principal refused), G8 (expired authority refused) and G9 (delegation cannot escalate, six dimensions) inctrlrun verify.
What it does not do
Authority does not authenticate the approver, does not propagate across an agent-to-agent hop, does not match a grant on a token claim, and does not hot-reload the file: revocation and expiry are live, an edit takes effect when the process next loads it. AHeaderIdentityProvider
is worth exactly what the thing setting the header is worth.
Next
- Authority YAML reference.
- Decisions: the axis authority sits beside.
- Authority and delegation, in plain language · Get started · Why.