> ## Documentation Index
> Fetch the complete documentation index at: https://docs.parmanasystems.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Claims and evidence

> Each core claim, where it is stated in full, and the tests and commands that check it.

Parmana states what it claims in
[docs/CLAIMS.md](https://github.com/pavancharak/parmana/blob/main/docs/CLAIMS.md). Every
claim there is scoped to its evidence: the code that implements it, the tests that check it,
and what it explicitly does not cover. This site mirrors that file and never overrides it.
When the two disagree, CLAIMS.md is authoritative and the site is wrong.

## How to read a claim

* **The heading states the claim.** A heading marked `(Scoped)` holds only within the
  boundary its text states.
* **Evidence lists the code and tests.** A claim is written in the present tense only when
  code and tests back it.
* **Dated updates record changes.** When a claim is narrowed, corrected or extended, a dated
  `Update` paragraph is added rather than the original text being rewritten, so the history
  stays readable.
* **What is not claimed is stated too.** See [Limitations](/security/limitations), and
  section 5 of CLAIMS.md.

Gaps that were found, and how each was closed or narrowed, are in
[docs/VERIFICATION-GAPS.md](https://github.com/pavancharak/parmana/blob/main/docs/VERIFICATION-GAPS.md).
Open work is in
[docs/REMAINING-WORK.md](https://github.com/pavancharak/parmana/blob/main/docs/REMAINING-WORK.md).

## Core claims

Each row has a command that reproduces its evidence. Run it after `npm ci` and
`npm run build`. `npm run evaluate -- EV-04` runs one attack scenario and reports whether it
was blocked; each scenario's test files are listed in
[evaluations/scenarios.json](https://github.com/pavancharak/parmana/blob/main/evaluations/scenarios.json)
([Run the attack scenarios](/evaluation/overview#3-run-the-attack-scenarios)). Every test also
runs in `npm test`.

| Claim | CLAIMS.md | Reproduce |
| - | - | - |
| Policy evaluation is deterministic: the same transaction and policy give the same decision | 2.2, 2.3 | `npx vitest run packages/policy/tests/unit/ReferencePoliciesDeterminism.test.ts packages/policy/tests/unit/PolicyEngine.test.ts` |
| An approved decision becomes a signed, single use, time bounded authorization | 2.8 | `npm run evaluate -- EV-01 EV-02 EV-03` |
| A forged, tampered, expired or replayed authorization is refused before anything executes | 2.10, 2.15 | `npm run evaluate -- EV-01 EV-02 EV-03` |
| Every caller is authenticated at the API boundary, and limited to its own principals and capabilities | 2.16, 3.16 | `npm run evaluate -- EV-12` |
| A duplicate business transaction is rejected atomically | 2.20 | `npm run evaluate -- EV-15` |
| No AI agent action is authorized without a signed human approval for that action and resource | 2.42, 2.47 | `npm run evaluate -- EV-04 EV-05` |
| Declared facts must match the action executed | 2.44 | `npm run evaluate -- EV-06` |
| A signal sent with a type other than the one the policy declares is refused before any rule runs | 2.52 | `npx vitest run packages/policy/tests/unit/signalTypes.test.ts` |
| A policy changes only through maker checker: one person proposes, another approves with a step up signature | 2.26, 2.34 | `npm run evaluate -- EV-13` |
| The gateway refuses an authorization whose policy is not the approved, current version | 2.27, 2.36 | `npm run evaluate -- EV-07 EV-08` |
| The gateway re-checks the signals an authorization was signed over | 2.29 | `npm run evaluate -- EV-09` |
| A connector's credential never reaches the caller, the decision or the evidence | 2.23 | `npm run evaluate -- EV-10` |
| Only the execution gateway can release an action to a connector | 3.1 | `npm run evaluate -- EV-11` |
| A signed Execution Intent exists before release, and a missing Trust Record can be rebuilt | 2.39 | `npx vitest run packages/runtime/tests/unit/execution-intent.test.ts packages/api/tests/integration/execution-intents.integration.test.ts` |
| Every approved action produces a signed Execution Trust Record, verifiable with only the record and public keys | 2.5, 2.6 | `npm run evaluate -- EV-14`, then `npx tsx scripts/verify-trust-record.ts <record.json> default=<key.pem>` |
| Records can carry hybrid Ed25519 and ML-DSA-65 signatures | 3.13 | `npx vitest run packages/crypto/tests/unit/hybrid-signature-provider.test.ts` |
| A self hosted deployment enforces policy with no internet route | 2.40 | `bash docker/local/offline-check/run.sh` (Docker) |
| `/execute`, failed authentication and the public routes are rate limited | 3.14 | `npx vitest run packages/api/tests/integration/rate-limit.integration.test.ts` |

Each claim's full text, scope and remaining limits are in the CLAIMS.md section named in the
middle column. Read it before relying on the one line summary here.

## Claims about live deployments

Statements about the hosted sandbox and production (sections 2.51, 3.8, 3.9 and 3.18 of
CLAIMS.md) describe what was checked on a stated date, against a stated deployment. They are
evidence that the code ran there on that date, not a continuous guarantee. Sections marked
`Historical` describe connectors that have since been removed.

## Changing a claim

A claim changes only together with its evidence, in the same pull request: CLAIMS.md first,
then this site. See
[CONTRIBUTING.md](https://github.com/pavancharak/parmana/blob/main/CONTRIBUTING.md) and
[Contributing to this documentation](/contributing).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.