Skip to content

No agent action without a signed human approval, reads included - #87

Merged
pavancharak merged 1 commit into
mainfrom
feat/approval-required-everywhere
Sep 30, 2026
Merged

pavancharak merged 1 commit into
mainfrom
feat/approval-required-everywhere

Conversation

@pavancharak

Copy link
Copy Markdown
Owner

What

No AI agent action is authorized without a signed approval from a trusted person, for that action and its resource. This now holds for every policy and every action, reads included (docs/CLAIMS.md 2.47, docs/VERIFICATION-GAPS.md G-80).

Before this, only refunds, merges and LLM tool calls needed a person. GitHub reads, HubSpot reads and updates, Slack posts and every reference policy were authorized on facts the agent declares, or on nothing.

How

  • PolicyValidator.validateEveryApprovalNeedsSignedApproval: every approve rule must require an approvalSignals fact with is_true, as its whole condition or directly inside its top level all. It runs on every policy load and on every proposed policy change.
  • RuntimeEngine refuses an approve decision when no approval verifier is configured.
  • New policy versions: github-pr-read 1.1.0, hubspot-deal-read 1.0.0 (new, bound to hubspot:deal-fetch), hubspot-deal-update 1.1.0, slack-post-message 1.1.0, plus approval backed versions of the nine reference policies. Older versions stay in policies/ as history and are refused at load.
  • HubSpotSignalStateVerifier skips its own pre authorization check when the policy declares approvalSignals, so one approval is not spent twice.
  • PARMANA_TEST_APPROVER_PUBLIC_KEY_FILE makes a NODE_ENV=test server trust a local test approver for the quickstarts. With any other NODE_ENV the server refuses to start while it is set.
  • Tests, SDK examples, tutorials, Python tests and the Docker offline check now sign approvals. New tutorials 120 to 122.
  • Docs, the docs site and every README are updated; llms.txt and the handbook PDF are regenerated.

Verified

  • Full suite: 2520 passed, 0 failed. Build, lint and typecheck clean.
  • Python SDK: 135 passed, including three tests that start a real server. ruff, black and mypy clean.
  • npm run examples: all 113 tutorials and 2 scenarios pass.
  • Docker offline check, with no internet route: 14 of 14. It adds a manager through maker checker and executes a refund carrying that manager's signed approval.

Before merging

  1. Approve the 13 new policy versions in production through maker checker: github-pr-read 1.1.0, hubspot-deal-read 1.0.0, hubspot-deal-update 1.1.0, slack-post-message 1.1.0, vendor-payment 2.1.0, access-control 1.1.0, agent-vendor-payment 1.1.0, api-key-issuance 1.1.0, connector-capability 1.1.0, database-change 3.1.0, expense-reimbursement 1.1.0, production-deployment 1.1.0, rag-document-access 1.1.0. CI's verify-policy-approvals job fails until each has an approval record.
  2. After deploy, agents calling GitHub reads, HubSpot or Slack must attach a signed approval; without one those requests are refused.

Not covered

  • An approval names the action and the resource, not every parameter. A Slack approval does not fix the message text, and a HubSpot approval does not fix the new stage or amount. Payment, expense and refund approvals do cover the amount.
  • Production trusts one approver today.

🤖 Generated with Claude Code

Every policy approve rule must now require an approvalSignals fact with
is_true, as its whole condition or directly inside its top level all.
PolicyValidator refuses any other policy on load and on proposal, and
RuntimeEngine refuses an approval when no approval verifier is set (G-80,
CLAIMS 2.47).

New policy versions that need a signed approval: github-pr-read 1.1.0,
hubspot-deal-read 1.0.0 (new, for hubspot:deal-fetch), hubspot-deal-update
1.1.0, slack-post-message 1.1.0, and approval backed versions of every
reference policy. Older versions stay as history and are refused at load.

A NODE_ENV=test server can trust a local test approver through
PARMANA_TEST_APPROVER_PUBLIC_KEY_FILE for the quickstarts. Tests, SDK
examples, tutorials and the offline check sign approvals; new tutorials
120 to 122. Docs, docs site and READMEs updated.

Production: approve the new policy versions through maker checker before
merging; until then GitHub reads, HubSpot and Slack are refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mintlify

mintlify Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
parmanasystems 🟢 Ready View Preview Sep 30, 2026, 9:28 AM

💡 Tip: Enable Automations to automatically generate PRs for you.

@vercel

vercel Bot commented Sep 30, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
parmana-api-real Ready Ready Preview Sep 30, 2026 9:27am UTC

@pavancharak
pavancharak merged commit e18ddae into main Sep 30, 2026
12 of 14 checks passed
@pavancharak
pavancharak deleted the feat/approval-required-everywhere branch September 30, 2026 13:51

This branch was successfully deployed

2 active deployments
staging - docs/site — 1f7ef3ad Deployed Sep 30, 2026 by mintlify[bot]
Preview — 1f7ef3ad Deployed Sep 30, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant