Approve policies
In production, a policy authorizes nothing until one person proposes it and a second person approves it with a signed step up authorization. The same person cannot do both. See Policy governance.Review refused requests
Every request that a policy refuses is stored with a signed Refusal Record. To list recent refunds that were refused:caller_audit_events:
Approve a HubSpot amount change
Forhubspot:deal-update, an amount change above the configured threshold runs only with a
signed approval from a trusted approver, sent in signals.approvalArtifact. Parmana checks the
signature, the approver, the expiry, the deal, the amount, and that the approval has not been
used before.
No approver is configured in the current deployment, so every such approval is
refused. An operator adds one by placing the approver’s public key under
$PARMANA_KEY_DIR/approval-issuers/ and adding an entry to
TRUSTED_APPROVAL_ISSUERS.Not available yet
A refused request cannot be approved afterwards. A policy decision is approve or refuse. Nothing waits for a person. To act on a refused request, send a new one that the policy approves. Refunds have no checked approval. Thecustomer-refund policy reads managerApproved, but
nothing verifies it, so a caller can send true without a manager. Refunds above 10000 are
refused whatever managerApproved says. A signed approval for refunds is planned; see G-65 and
G-51 in docs/VERIFICATION-GAPS.md.
Why each action is bound to one policy
Each request names the policy that should judge it. If Parmana accepted any approved policy, a caller could send a refund and name a policy written for Slack messages, which has no refund limit. So each live action is bound to one policy:docs/VERIFICATION-GAPS.md.