Skip to main content
Parmana’s guarantees are specific and tested, and each holds within a stated boundary. This chapter states both. The detailed threat model is Limitations; every claim and its evidence is in docs/CLAIMS.md; every known gap is in docs/VERIFICATION-GAPS.md, by number.

What Parmana guarantees

For a system whose actions go through Parmana:

What it assumes

  • Actions go through Parmana. The gateway is a property of systems that route through it. An agent that also holds a system’s credentials can act around it; give agents no credentials.
  • Keys stay with their owners. Parmana proves which key signed, never whose hand held it. Two keys held by one person make the record claim a second person who does not exist.
  • The signing key is safe. A stolen signing key signs records that verify. AWS KMS keeps the key from being released; rotation is a manual procedure.
  • Policies are written well. An over broad rule approves what it should not; no signature can detect that. The validator catches some mistakes, and two people review every version.
  • The operator is trusted with the database. An operator with direct database access can change rows outside maker checker (and, for emergencies, revoke an approver that way); those change rows record it.

What Parmana does not claim

  • That execution cannot be bypassed under any circumstances.
  • Mathematical proof of correct execution.
  • Regulatory compliance (SOC 2, GDPR, ISO 27001) by itself.
  • That an external system did what its endpoint says: the answer is recorded as its claim.

Known gaps

The open items that matter most when you build with Parmana. The full list, with the status of each, is under “Open issues at a glance” in docs/VERIFICATION-GAPS.md. Also scoped, not absent:
  • There is no automatic path. No action is authorized without a person, by design (G-80 closed the last policies that approved without one). Plan for the first request on every resource to wait for a person.
  • An approval covers the action and the resource, and the amount where the policy names one, not every parameter.
  • Single use is per nonce store. Instances that share the database share it; separate in memory stores do not.
  • Route access is not scoped per key. What is scoped is the action, the principal, and which records a caller can read.
  • Approval notifications are best effort. One attempt, no retry; the Refusal Records are the complete list.
  • Python verifies Ed25519 only. A record’s ML-DSA-65 signatures are checked by the TypeScript verifier.
  • Releasing to an external endpoint was checked live once, on 2026-10-01, with an endpoint that acts on nothing (docs/CLAIMS.md 2.50).

Reporting a vulnerability

Email founder@parmanasystems.com with the issue, its impact, steps to reproduce and the version affected, as SECURITY.md in the repository describes. Do not open a public issue for a vulnerability.