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: 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 is not yet checked against a live endpoint in production (ADR-0013 step 6).

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.