Arcana ARCANA/GOVERNANCE index 01 · THE AUTHORIZATION REQUEST ¬Authorized(q) ¬Executed(q)
~/arcana/governance/request.md
GOV / SPECREV CLAYER: KERNELCLASS: EVIDENCE-OBJECT
01

The Authorization Request

Every consequential action becomes one hashable object.

OBJ q · CANONICAL 4 SEMANTIC LAYERS H(q)-BOUND
AuthorizationRequestevidence object · canonical form
q.01 IdentityrequestId, requestHash, nonce, policyVersion, principalId, sessionId, workspaceId,
q.02 IntentcontractId, contractRevision, criterionIds[], riskClass, requestedAt,
q.03 Actionaction, tool, resource, executable, arguments[], cwd, destination,
q.04 Data LineageprovenanceLabels[], sensitivity, fieldLineage[]
requestHash=H(q) covers every consequential field
change one byte → different identity
/governance/request.md
# 01 · The Authorization Request

> Every consequential action becomes one hashable object.

## Overview

Before any tool runs — before a shell command spawns, before a file is
touched, before a network call leaves the machine — Arcana constructs a
canonical **AuthorizationRequest**. This object is the atom of the entire
security kernel: everything downstream (policy decisions, approvals,
capabilities, proofs) keys off it.

The defining property: the **requestHash covers every consequential field**.
Change the principal, any argument, the working directory, the destination,
a secret, the contract revision, the policy version, or the nonce — and you
get a *different authorization identity*. There is no such thing as "mostly
the same request".

## Canonical schema

```text
AuthorizationRequest {
  // identity
  requestId, requestHash, nonce,
  policyVersion, principalId,
  sessionId, workspaceId,

  // intent
  contractId, contractRevision,
  criterionIds[], riskClass, requestedAt,

  // action
  action, tool, resource,
  executable, arguments[], cwd, destination,

  // data lineage
  provenanceLabels[], sensitivity, fieldLineage[]
}
```

## Field reference

| Field group | Fields | Purpose |
|---|---|---|
| Identity | requestId, requestHash, nonce | Unique handle; H(q) binds every field; nonce blocks replay |
| Identity | policyVersion | Pins which policy snapshot the verdict must be evaluated against |
| Identity | principalId, sessionId, workspaceId | Who asks, inside which session and workspace boundary |
| Intent | contractId, contractRevision | Which objective justifies this request, at which revision |
| Intent | criterionIds[] | Active criteria that demand this exact action |
| Intent | riskClass, requestedAt | Control floor (LOW→CRITICAL) and wall-clock pin |
| Action | action, tool, resource | What kind of operation, through which tool, against what |
| Action | executable, arguments[], cwd, destination | The exact bytes that would run and where effects land |
| Lineage | provenanceLabels[], sensitivity | Origin classification of inputs feeding this request |
| Lineage | fieldLineage[] | Per-field origin history for consequential fields |

## Worked example

Agent proposes: `rm -rf ./build` in workspace W during session S.

- executable = `rm`, arguments = ["-rf", "./build"], cwd = /home/user/proj
- riskClass = HIGH (deletion)
- provenanceLabels include MODEL_OUTPUT (the idea originated from the model)
- requestHash = H(everything above, canonically serialized)

If the model next proposes `rm -rf ./build/` (trailing slash), that is a
**different hash**, a different request, and requires its own authorization.
No fuzzy matching. No "close enough".

## Edge cases and failure behavior

- **Argument reordering**: canonical serialization defines a deterministic
  ordering, so semantically identical requests hash identically — but any
  value change still changes the hash.
- **Missing lineage**: if a consequential field's origin cannot be established
  (UNKNOWN) on a HIGH or CRITICAL request, the request fails closed. See
  [Provenance](/governance/provenance.md).
- **Policy version skew**: a decision made against policyVersion P is stale
  the moment the active policy moves past P; the PEP rejects it. See
  [PDP ⇄ PEP](/governance/pdp-pep.md).

## Related

- Next: [PDP ⇄ PEP Split](/governance/pdp-pep.md)
- Consumed by: [Intent Binding](/governance/intent.md), [Approvals](/governance/approvals.md)