- Authority. May this kind of action be decided here at all?
- Business validity. Is this exact action valid for this exact business object, according to the system that owns the facts?
The flow
- The agent proposes an action and facts.
- The facts must describe the action being executed (
boundSignals). - Authority. The policy in force must be the approved, current one, and the capability must
be decided under its bound policy. At the API, the caller’s key must allow the capability. Under
a policy with
requireAuthorityGrant, the caller must also hold a grant in force for the action, and the request must be within its limits. If authority is not established the request is refused, and no business system is asked. - Business validation. For each fact the policy declares a source for, Parmana asks that source about the business object it reads from the request, never using the agent’s value. If the agent proposed a value, it must equal the source’s.
- The policy is evaluated on the values the sources established.
- The signed human approval is checked (Human approval), then the action is authorized and released, and a signed record is written.
Naming the source of a fact
source: the business system to ask, as registered through maker checker. Any system that answers the protocol can be one: an ERP, an order system, a CRM, a ledger.claim: what to ask it.subject: where the business object is in the request,targetor aparameterspath.maxAgeSeconds: how old the answer may be, from 1 to 86400, default 300.
GET /policies/in-effect lists the declarations under signals.sourced, so an agent knows it
need not send them.
Trusted Signal
Each answer is recorded as a Trusted Signal, bound to the business object and the action:sourceProof is the source’s own Ed25519 signature over its answer, which Parmana verified before
trusting it (sourceProofVerified: true). That proves the source said it. A source registered with
a key cannot give an unsigned answer: it is refused as SOURCE_UNAVAILABLE. A source registered
without one has no sourceProof; its answer is trusted on the pinned HTTPS connection alone.
Statuses
AUTHORIZEDmeans the action may be decided: the action type, and, under a policy that requires a grant, this request within the caller’s grant. It does not mean this action is valid or was executed.NOT_AUTHORIZED: the capability is decided under the wrong policy, or, under a policy that requires a grant, the caller holds none in force or the request is outside its limits.AUTHORITY_EXPIRED: the caller’s grant has passed itsvalidUntil.AUTHORITY_UNCLEAR: the policy in force could not be established as the approved one, or the caller’s grants could not be read.INVALID: the agent proposed a value the source contradicts, or proposed facts that do not describe the action.MISSING_DATA: the request names no business object, the source has no such fact, or it answered with the wrong type.CONFLICTING_DATA: the source holds contradictory facts.SOURCE_UNAVAILABLE: the source is not registered or was revoked, failed, took longer than 10 seconds (or its registered timeout), or gave an answer Parmana cannot trust: incomplete, not echoing the query, or not signed by its registered key.VALIDATION_EXPIRED: the answer is older thanmaxAgeSeconds, or past the source’s ownvalidUntil.NOT_EVALUATED: validation did not run, because authority was not established or the policy declares no sources. It is neverVALID.
VALID refuses the request, with one exception: NOT_EVALUATED under a
policy that declares no sources. Such a policy decides as it did before, and still needs a signed
approval to approve. No status is ever turned into another.
In the record
Every decision carriesassessment, inside the signed Execution Trust Record or
Refusal Record:
execution as NOT_EXECUTED. An approved decision’s execution
is in the Trust Record’s executions. The decision’s signals keep what the agent proposed, so a
reader sees the proposal and the source’s answer side by side. Changing any status fails
verification. Records made before this change have no assessment and still verify.
Limits today
- Not deployed yet. Registering sources and asking them is in the repository and tested, but no real business system has been connected. No shipped policy declares a source.
- Checked once. An answer is checked when the request is decided, not again when the action is released (phase 4).
- Grants are opt in, per policy. A policy without
requireAuthorityGrantkeeps today’s authority checks. No shipped policy requires a grant yet. Grant limits are per request, not per day. - Refund eligibility has no source yet.
refundEligibleandfraudCheckPassedincustomer-refundare still declared by the caller and can only refuse (see Limitations).