The output of policy evaluation. What the runtime enforces.Documentation Index
Fetch the complete documentation index at: https://docs.brane.membranelabs.org/llms.txt
Use this file to discover all available pages before exploring further.
Definition
A Decision is what a policy returns. The runtime enforces it. There is no ambiguity: the Decision is the contract between policy and runtime. Start with two types. That is enough to build the first control loop:Decision Types
| Type | Status | Effect |
|---|---|---|
allow | Implemented | Execute the capability. The function runs normally. |
deny | Implemented | Block the capability. Raises CapabilityDeniedError. |
approval_required | Planned | Pause the action until a human approves. |
redact | Planned | Allow execution but remove fields from output before returning it. |
transform_input | Planned | Mutate the input before executing. |
transform_output | Planned | Mutate the output after executing. |
route | Planned | Redirect the action to a different capability, model, or provider. |
sandbox | Planned | Execute with constrained access. |
log_only | Planned | Allow execution and record the action for review. |
Fields
| Field | Type | Description | |
|---|---|---|---|
type | str | The decision type. | |
reason | `str | None` | Human-readable reason. Included in CapabilityDeniedError.reason. |
decision_id | str | Unique ID for this decision. Auto-generated. | |
action_id | `str | None` | The action this decision applies to. |
policy_name | `str | None` | Name of the policy that produced this decision. |
policy_version | `str | None` | Version of the policy that produced this decision. |
mutations | `dict | None` | Mutation payload for transform/redact decisions. Planned. |
approval | `dict | None` | Approval request payload. Planned. |
audit | `dict | None` | Audit metadata to attach to the action record. Planned. |
metadata | dict | Arbitrary metadata. |
Computed Properties
allowed:Trueiftype == "allow"denied:Trueiftype == "deny"requires_approval:Trueiftype == "approval_required"
Composition Rules
When multiple policies match a capability, the engine composes their decisions:- No policies match: allow by default
- Any matching policy denies: return that deny decision immediately
- All matching policies allow: return the last allow decision by priority order
allow and deny participate in composition today.
Examples
When using the
@runtime.before_capability decorator, policy name and version are annotated onto the Decision automatically.Future Decision Space
The Decision type space is intentionally structured for expansion:approval_required: pause the action, send an ApprovalRequest, resume when a human approves, or deny when they rejectredact: strip or mask sensitive fields from the output before returning ittransform_input: mutate the input before executiontransform_output: mutate the output after executionroute: redirect to a different model, tool, or capabilitysandbox: execute with constrained network, filesystem, or time accesslog_only: allow but record for later review
