@armoriq/policy-ir 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@armoriq/policy-ir",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "Armor Policy v2 intermediate representation: types, canonical serializer, policy hash, evaluator, compiler and the golden vectors every runtime must pass",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -14,5 +14,12 @@
14
14
  {"id":"VC-12","name":"a group target compiles with layer group","yaml":"apiVersion: armor.io/v2\nkind: Policy\nmetadata:\n name: vector\n orgId: 11111111-1111-4111-8111-111111111111\ntarget:\n group: payments\nspec:\n tools:\n default: hold\n rules:\n Read: allow\n approvalDefaults: {approvers: 1, roles: [admin]}\n","inventory":[{"name":"create_payment","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true},{"name":"Read","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","inputSchema":{"type":"object","properties":{"file_path":{"type":"string"}}},"declared":true},{"name":"create_issue","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__create_issue","capabilities":["destructive"]},{"name":"list_issues","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__list_issues","capabilities":[]},{"name":"delete_repo","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__delete_repo","capabilities":["destructive"]},{"name":"observed_only","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":null,"declared":false}],"expect":{"errors":[],"warnings":[],"statementIds":["st-read-0"]}},
15
15
  {"id":"VC-16","name":"member rule expiry earlier than its scope wins; scope expiry bounds a rule with none","yaml":"apiVersion: armor.io/v2\nkind: Policy\nmetadata:\n name: vector\n orgId: 11111111-1111-4111-8111-111111111111\ntarget:\n agent: aaaaaaaa-0000-4000-8000-000000000001\nspec:\n tools:\n default: hold\n rules:\n create_payment: block\n approvalDefaults: {approvers: 1, roles: [admin]}\n members:\n \"alice@armoriq.io\":\n tools:\n rules:\n create_payment:\n - action: allow\n expiresAt: 2026-06-01T00:00:00Z\n Read: allow\n expiresAt: 2026-12-31T00:00:00Z\n","inventory":[{"name":"create_payment","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true},{"name":"Read","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","inputSchema":{"type":"object","properties":{"file_path":{"type":"string"}}},"declared":true},{"name":"create_issue","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__create_issue","capabilities":["destructive"]},{"name":"list_issues","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__list_issues","capabilities":[]},{"name":"delete_repo","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__delete_repo","capabilities":["destructive"]},{"name":"observed_only","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":null,"declared":false}],"expect":{"errors":[],"warnings":["loosening_grant","loosening_grant"],"statementIds":["st-create-payment-0","st-create-payment-alice-armoriq-io-0","st-read-alice-armoriq-io-0"],"expiries":{"st-create-payment-alice-armoriq-io-0":"2026-06-01T00:00:00.000Z","st-read-alice-armoriq-io-0":"2026-12-31T00:00:00.000Z"}}},
16
16
  {"id":"VC-18c","name":"under device-first a products overlay may only tighten","yaml":"apiVersion: armor.io/v2\nkind: Policy\nmetadata:\n name: vector\ntarget: {device: local}\nspec:\n tools:\n default: hold\n rules:\n Bash: hold\n approvalDefaults: {approvers: 1, roles: [admin]}\n products:\n claude-code: {tools: {rules: {Bash: allow}}}\n","inventory":[],"expect":{"errors":["device_first_loosening"],"warnings":["loosening_grant","unknown_tool_key","unknown_tool_key"]}},
17
- {"id":"VC-18d","name":"under agent-first a products overlay may loosen, flagged for review","yaml":"apiVersion: armor.io/v2\nkind: Policy\nmetadata:\n name: vector\nprecedence: agent-first\ntarget: {device: local}\nspec:\n tools:\n default: hold\n rules:\n Bash: hold\n approvalDefaults: {approvers: 1, roles: [admin]}\n products:\n claude-code: {tools: {rules: {Bash: allow}}}\n","inventory":[],"expect":{"errors":[],"warnings":["loosening_grant","unknown_tool_key","unknown_tool_key"],"statementIds":["st-bash-0","st-bash-claude-code-0"]}}
17
+ {"id":"VC-18d","name":"under agent-first a products overlay may loosen, flagged for review","yaml":"apiVersion: armor.io/v2\nkind: Policy\nmetadata:\n name: vector\nprecedence: agent-first\ntarget: {device: local}\nspec:\n tools:\n default: hold\n rules:\n Bash: hold\n approvalDefaults: {approvers: 1, roles: [admin]}\n products:\n claude-code: {tools: {rules: {Bash: allow}}}\n","inventory":[],"expect":{"errors":[],"warnings":["loosening_grant","unknown_tool_key","unknown_tool_key"],"statementIds":["st-bash-0","st-bash-claude-code-0"]}},
18
+ {"id":"VC-18e","name":"under device-first a qualified product key may not loosen a bare base rule for the same tool","yaml":"apiVersion: armor.io/v2\nkind: Policy\nmetadata:\n name: vector\ntarget: {device: local}\nspec:\n tools:\n default: allow\n rules:\n create_issue: block\n products:\n editor: {tools: {rules: {mcp__github__create_issue: allow}}}","inventory":[{"name":"create_payment","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true},{"name":"Read","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","inputSchema":{"type":"object","properties":{"file_path":{"type":"string"}}},"declared":true},{"name":"create_issue","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__create_issue","capabilities":["destructive"]},{"name":"list_issues","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__list_issues","capabilities":[]},{"name":"delete_repo","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__delete_repo","capabilities":["destructive"]},{"name":"observed_only","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":null,"declared":false}],"expect":{"errors":["device_first_loosening"],"warnings":["loosening_grant"]}},
19
+ {"id":"VC-18f","name":"under device-first a bare product key may not loosen a qualified base rule for the same tool","yaml":"apiVersion: armor.io/v2\nkind: Policy\nmetadata:\n name: vector\ntarget: {device: local}\nspec:\n tools:\n default: allow\n rules:\n mcp__github__create_issue: block\n products:\n editor: {tools: {rules: {create_issue: allow}}}","inventory":[{"name":"create_payment","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true},{"name":"Read","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","inputSchema":{"type":"object","properties":{"file_path":{"type":"string"}}},"declared":true},{"name":"create_issue","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__create_issue","capabilities":["destructive"]},{"name":"list_issues","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__list_issues","capabilities":[]},{"name":"delete_repo","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__delete_repo","capabilities":["destructive"]},{"name":"observed_only","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":null,"declared":false}],"expect":{"errors":["device_first_loosening"],"warnings":["loosening_grant"]}},
20
+ {"id":"VC-18g","name":"under device-first a server glob in a product may not loosen a bare base rule it covers","yaml":"apiVersion: armor.io/v2\nkind: Policy\nmetadata:\n name: vector\ntarget: {device: local}\nspec:\n tools:\n default: allow\n rules:\n create_issue: block\n products:\n editor: {tools: {rules: {\"mcp__github__*\": allow}}}","inventory":[{"name":"create_payment","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true},{"name":"Read","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","inputSchema":{"type":"object","properties":{"file_path":{"type":"string"}}},"declared":true},{"name":"create_issue","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__create_issue","capabilities":["destructive"]},{"name":"list_issues","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__list_issues","capabilities":[]},{"name":"delete_repo","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__delete_repo","capabilities":["destructive"]},{"name":"observed_only","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":null,"declared":false}],"expect":{"errors":["device_first_loosening"],"warnings":["loosening_grant"]}},
21
+ {"id":"VC-18h","name":"under device-first a qualified product key may tighten a bare base rule","yaml":"apiVersion: armor.io/v2\nkind: Policy\nmetadata:\n name: vector\ntarget: {device: local}\nspec:\n tools:\n default: allow\n rules:\n create_issue: allow\n products:\n editor: {tools: {rules: {mcp__github__create_issue: block}}}","inventory":[{"name":"create_payment","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true},{"name":"Read","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","inputSchema":{"type":"object","properties":{"file_path":{"type":"string"}}},"declared":true},{"name":"create_issue","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__create_issue","capabilities":["destructive"]},{"name":"list_issues","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__list_issues","capabilities":[]},{"name":"delete_repo","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__delete_repo","capabilities":["destructive"]},{"name":"observed_only","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":null,"declared":false}],"expect":{"errors":[],"warnings":[],"statementIds":["st-create-issue-0","st-mcp-github-create-issue-editor-0"]}},
22
+ {"id":"VC-7c","name":"a qualified member key that loosens a bare base rule for the same tool is flagged","yaml":"apiVersion: armor.io/v2\nkind: Policy\nmetadata:\n name: vector\n orgId: 11111111-1111-4111-8111-111111111111\ntarget:\n agent: aaaaaaaa-0000-4000-8000-000000000001\nspec:\n tools:\n default: allow\n rules:\n create_issue: block\n members:\n \"alice@armoriq.io\":\n tools: {rules: {mcp__github__create_issue: allow}}\n expiresAt: 2026-12-31T00:00:00Z","inventory":[{"name":"create_payment","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true},{"name":"Read","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","inputSchema":{"type":"object","properties":{"file_path":{"type":"string"}}},"declared":true},{"name":"create_issue","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__create_issue","capabilities":["destructive"]},{"name":"list_issues","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__list_issues","capabilities":[]},{"name":"delete_repo","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__delete_repo","capabilities":["destructive"]},{"name":"observed_only","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":null,"declared":false}],"expect":{"errors":[],"warnings":["loosening_grant"],"statementIds":["st-create-issue-0","st-mcp-github-create-issue-alice-armoriq-io-0"]}},
23
+ {"id":"VC-4b","name":"two same-length globs in a member overlay matching one tool by its two names is a compile error","yaml":"apiVersion: armor.io/v2\nkind: Policy\nmetadata:\n name: vector\n orgId: 11111111-1111-4111-8111-111111111111\ntarget:\n agent: aaaaaaaa-0000-4000-8000-000000000001\nspec:\n tools:\n default: allow\n rules:\n Read: allow\n members:\n \"alice@armoriq.io\":\n tools: {rules: {\"mcp__git*\": allow, \"create_i*\": block}}\n expiresAt: 2026-12-31T00:00:00Z","inventory":[{"name":"create_payment","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true},{"name":"Read","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","inputSchema":{"type":"object","properties":{"file_path":{"type":"string"}}},"declared":true},{"name":"create_issue","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__create_issue","capabilities":["destructive"]},{"name":"list_issues","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__list_issues","capabilities":[]},{"name":"delete_repo","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__delete_repo","capabilities":["destructive"]},{"name":"observed_only","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":null,"declared":false}],"expect":{"errors":["ambiguous_glob"],"warnings":[]}},
24
+ {"id":"VC-4c","name":"two same-length globs in a product overlay matching one tool by its two names is a compile error","yaml":"apiVersion: armor.io/v2\nkind: Policy\nmetadata:\n name: vector\ntarget: {device: local}\nspec:\n tools:\n default: allow\n rules:\n Read: allow\n products:\n editor: {tools: {rules: {\"mcp__git*\": block, \"create_i*\": block}}}","inventory":[{"name":"create_payment","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true},{"name":"Read","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","inputSchema":{"type":"object","properties":{"file_path":{"type":"string"}}},"declared":true},{"name":"create_issue","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__create_issue","capabilities":["destructive"]},{"name":"list_issues","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__list_issues","capabilities":[]},{"name":"delete_repo","owner":{"type":"mcp_server","id":"srv-github","name":"github"},"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","inputSchema":{"type":"object","properties":{"amount":{"type":"number"},"recipient":{"type":"string"}}},"declared":true,"qualifiedName":"mcp__github__delete_repo","capabilities":["destructive"]},{"name":"observed_only","owner":{"type":"agent","id":"agent-1","name":"support-agent"},"schemaHash":null,"declared":false}],"expect":{"errors":["ambiguous_glob"],"warnings":[]}}
18
25
  ]
@@ -1,6 +1,8 @@
1
1
  [
2
2
  {"id":"VE-1","name":"absent argument in when falls through to the next variant","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-pay-hold","subject":null,"conditions":[{"field":"args.amount","op":"gt","value":5000,"schemaBinding":{"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"hold","approval":{"approvers":2,"roles":["finance_lead"]}},{"id":"st-pay-allow","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"create_payment","arguments":{"recipient":"acme"},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"allow","statementId":"st-pay-allow","layer":"agent","ruleKey":"create_payment"}},
3
3
  {"id":"VE-8","name":"hold carries its resolved approval","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-pay-hold","subject":null,"conditions":[{"field":"args.amount","op":"gt","value":5000,"schemaBinding":{"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"hold","approval":{"approvers":2,"roles":["finance_lead"]}},{"id":"st-pay-allow","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"create_payment","arguments":{"amount":9000},"timestamp":"2026-09-18T12:00:00Z","schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"expect":{"verdict":"hold","statementId":"st-pay-hold","layer":"agent","ruleKey":"create_payment","approval":{"approvers":2,"roles":["finance_lead"]},"obligations":[]}},
4
+ {"id":"VE-8b","name":"a hold from tools.default carries the document approvalDefaults","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow","approval":{"approvers":1,"roles":["registrar"]}},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-pay-hold","subject":null,"conditions":[{"field":"args.amount","op":"gt","value":5000,"schemaBinding":{"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"hold","approval":{"approvers":2,"roles":["finance_lead"]}},{"id":"st-pay-allow","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"brand_new_tool","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"hold","statementId":null,"layer":"agent","ruleKey":"tools.default","approval":{"approvers":1,"roles":["registrar"]}}},
5
+ {"id":"VE-8c","name":"an allow from tools.default carries no approval","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow","approval":{"approvers":1,"roles":["registrar"]}},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-pay-hold","subject":null,"conditions":[{"field":"args.amount","op":"gt","value":5000,"schemaBinding":{"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"hold","approval":{"approvers":2,"roles":["finance_lead"]}},{"id":"st-pay-allow","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"brand_new_tool","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"allow","statementId":null,"layer":"agent","ruleKey":"tools.default","approval":null}},
4
6
  {"id":"VE-2","name":"schema drift still evaluates by name and attaches schema_drift","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-pay-hold","subject":null,"conditions":[{"field":"args.amount","op":"gt","value":5000,"schemaBinding":{"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"hold","approval":{"approvers":2,"roles":["finance_lead"]}},{"id":"st-pay-allow","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"create_payment","arguments":{"amount":9000},"timestamp":"2026-09-18T12:00:00Z","schemaHash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"},"expect":{"verdict":"hold","statementId":"st-pay-hold","layer":"agent","ruleKey":"create_payment","obligations":[{"type":"schema_drift","statementId":"st-pay-hold","bound":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","observed":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}]}},
5
7
  {"id":"VE-3","name":"exact key beats glob key","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-glob","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"mcp__github__*","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"mcp__github__*","keyTier":"glob","order":0},"effect":"allow"},{"id":"st-exact","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"mcp__github__create_issue","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"mcp__github__create_issue","keyTier":"exact","order":0},"effect":"hold"}]}},"input":{"tool":"mcp__github__create_issue","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"hold","statementId":"st-exact","layer":"agent","ruleKey":"mcp__github__create_issue"}},
6
8
  {"id":"VE-3b","name":"longer glob beats shorter glob","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-short","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"mcp__*","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"mcp__*","keyTier":"glob","order":0},"effect":"allow"},{"id":"st-long","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"mcp__github__*","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"mcp__github__*","keyTier":"glob","order":0},"effect":"hold"}]}},"input":{"tool":"mcp__github__delete_repo","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"hold","statementId":"st-long","layer":"agent","ruleKey":"mcp__github__*"}},
@@ -13,7 +15,13 @@
13
15
  {"id":"VE-5d","name":"expired member rule is skipped","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-base","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"block"},{"id":"st-alice","subject":{"membershipId":"m-alice"},"conditions":[],"expiresAt":"2026-01-01T00:00:00Z","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"allow"}]}},"input":{"tool":"create_payment","arguments":{},"timestamp":"2026-09-18T12:00:00Z","member":{"membershipId":"m-alice"}},"expect":{"verdict":"block","statementId":"st-base","layer":"agent","ruleKey":"create_payment"}},
14
16
  {"id":"VE-5e","name":"member key specificity: membershipId beats email beats group","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-group","subject":{"group":"finance"},"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"x","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"x","keyTier":"exact","order":0},"effect":"block"},{"id":"st-email","subject":{"email":"alice@example.com"},"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"x","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"x","keyTier":"exact","order":0},"effect":"hold"},{"id":"st-id","subject":{"membershipId":"m-alice"},"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"x","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"x","keyTier":"exact","order":0},"effect":"allow"}]}},"input":{"tool":"x","arguments":{},"timestamp":"2026-09-18T12:00:00Z","member":{"membershipId":"m-alice","email":"alice@example.com","groups":["finance"]}},"expect":{"verdict":"allow","statementId":"st-id","layer":"member","ruleKey":"x"}},
15
17
  {"id":"VE-5f","name":"member key specificity: email beats group when no membershipId rule exists","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-group","subject":{"group":"finance"},"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"x","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"x","keyTier":"exact","order":0},"effect":"block"},{"id":"st-email","subject":{"email":"alice@example.com"},"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"x","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"x","keyTier":"exact","order":0},"effect":"hold"}]}},"input":{"tool":"x","arguments":{},"timestamp":"2026-09-18T12:00:00Z","member":{"membershipId":"m-alice","email":"alice@example.com","groups":["finance"]}},"expect":{"verdict":"hold","statementId":"st-email","layer":"member","ruleKey":"x"}},
16
- {"id":"VE-6","name":"unknown tool goes to the most specific tools.default, never a wildcard","bound":{"floor":{"schemaVersion":"armor.policy.v2","policyId":"p-floor","target":{"org":"*"},"layer":"floor","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[]},"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-pay-hold","subject":null,"conditions":[{"field":"args.amount","op":"gt","value":5000,"schemaBinding":{"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"hold","approval":{"approvers":2,"roles":["finance_lead"]}},{"id":"st-pay-allow","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"brand_new_tool","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"hold","statementId":null,"layer":"agent","ruleKey":"tools.default"}},
18
+ {"id":"VE-6","name":"unknown tool goes to tools.default, never a wildcard","bound":{"floor":{"schemaVersion":"armor.policy.v2","policyId":"p-floor","target":{"org":"*"},"layer":"floor","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[]},"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-pay-hold","subject":null,"conditions":[{"field":"args.amount","op":"gt","value":5000,"schemaBinding":{"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"hold","approval":{"approvers":2,"roles":["finance_lead"]}},{"id":"st-pay-allow","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"brand_new_tool","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"hold","statementId":null,"layer":"agent","ruleKey":"tools.default"}},
19
+ {"id":"VE-6b","name":"a floor default of block caps an agent default of allow","bound":{"floor":{"schemaVersion":"armor.policy.v2","policyId":"p-floor","target":{"org":"*"},"layer":"floor","defaults":{"tools":"block","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[]},"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-pay-hold","subject":null,"conditions":[{"field":"args.amount","op":"gt","value":5000,"schemaBinding":{"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"hold","approval":{"approvers":2,"roles":["finance_lead"]}},{"id":"st-pay-allow","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"brand_new_tool","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"block","statementId":null,"layer":"floor","ruleKey":"tools.default"}},
20
+ {"id":"VE-6c","name":"a group default of block caps an agent default of allow","bound":{"group":{"schemaVersion":"armor.policy.v2","policyId":"p-group","target":{"group":"payments"},"layer":"group","defaults":{"tools":"block","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[]},"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-pay-hold","subject":null,"conditions":[{"field":"args.amount","op":"gt","value":5000,"schemaBinding":{"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"hold","approval":{"approvers":2,"roles":["finance_lead"]}},{"id":"st-pay-allow","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"brand_new_tool","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"block","statementId":null,"layer":"group","ruleKey":"tools.default"}},
21
+ {"id":"VE-6d","name":"floor only: the floor default decides","bound":{"floor":{"schemaVersion":"armor.policy.v2","policyId":"p-floor","target":{"org":"*"},"layer":"floor","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[]}},"input":{"tool":"brand_new_tool","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"hold","statementId":null,"layer":"floor","ruleKey":"tools.default"}},
22
+ {"id":"VE-6e","name":"agent only: the agent default decides","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-pay-hold","subject":null,"conditions":[{"field":"args.amount","op":"gt","value":5000,"schemaBinding":{"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"hold","approval":{"approvers":2,"roles":["finance_lead"]}},{"id":"st-pay-allow","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"brand_new_tool","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"allow","statementId":null,"layer":"agent","ruleKey":"tools.default"}},
23
+ {"id":"VE-6f","name":"the floor default sits out when a floor statement decides the call","bound":{"floor":{"schemaVersion":"armor.policy.v2","policyId":"p-floor","target":{"org":"*"},"layer":"floor","defaults":{"tools":"block","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-f","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"x","variant":0,"source":"yaml","layer":"floor"},"match":{"tool":"x","keyTier":"exact","order":0},"effect":"allow"}]},"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[]}},"input":{"tool":"x","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"allow","statementId":null,"layer":"agent","ruleKey":"tools.default"}},
24
+ {"id":"VE-6g","name":"floor only: a floor statement that decides the call is not overridden by the floor default","bound":{"floor":{"schemaVersion":"armor.policy.v2","policyId":"p-floor","target":{"org":"*"},"layer":"floor","defaults":{"tools":"block","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-f","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"x","variant":0,"source":"yaml","layer":"floor"},"match":{"tool":"x","keyTier":"exact","order":0},"effect":"allow"}]}},"input":{"tool":"x","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"allow","statementId":"st-f","layer":"floor","ruleKey":"x"}},
17
25
  {"id":"VE-7","name":"variant order: first match wins","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-rm","subject":null,"conditions":[{"field":"args.command","op":"regex","value":"\\brm\\s+-rf\\b"}],"expiresAt":"never","provenance":{"ruleKey":"Bash","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"Bash","keyTier":"exact","order":0},"effect":"block"},{"id":"st-safe","subject":null,"conditions":[{"field":"program","op":"in","value":["git","ls","rm"]}],"expiresAt":"never","provenance":{"ruleKey":"Bash","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"Bash","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"Bash","arguments":{"command":"rm -rf /tmp/x"},"timestamp":"2026-09-18T12:00:00Z","derived":{"program":"rm"}},"expect":{"verdict":"block","statementId":"st-rm","layer":"agent","ruleKey":"Bash"}},
18
26
  {"id":"VE-9","name":"provenance names the deciding statement, key and variant","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-pay-hold","subject":null,"conditions":[{"field":"args.amount","op":"gt","value":5000,"schemaBinding":{"schemaHash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"hold","approval":{"approvers":2,"roles":["finance_lead"]}},{"id":"st-pay-allow","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"create_payment","arguments":{"amount":1},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"allow","statementId":"st-pay-allow","layer":"agent","ruleKey":"create_payment"}},
19
27
  {"id":"VE-11","name":"agent policy overrides group policy, loosening","bound":{"group":{"schemaVersion":"armor.policy.v2","policyId":"p-group","target":{"group":"payments"},"layer":"group","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-g","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"group"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"hold"}]},"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-a","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"create_payment","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"create_payment","keyTier":"exact","order":0},"effect":"allow"}]}},"input":{"tool":"create_payment","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"allow","statementId":"st-a","layer":"agent","ruleKey":"create_payment"}},
@@ -24,6 +32,15 @@
24
32
  {"id":"VE-14","name":"capability rule binds by tag only: tagged tool holds","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-destructive","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"destructive","variant":0,"source":"yaml","layer":"agent"},"match":{"capability":"destructive"},"effect":"hold"}]}},"input":{"tool":"mcp__jira__delete_issue","arguments":{},"timestamp":"2026-09-18T12:00:00Z","capabilities":["destructive"]},"expect":{"verdict":"hold","statementId":"st-destructive","layer":"agent","ruleKey":"destructive"}},
25
33
  {"id":"VE-14b","name":"capability rule binds by tag only: untagged tool on the same server gets tools.default","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-destructive","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"destructive","variant":0,"source":"yaml","layer":"agent"},"match":{"capability":"destructive"},"effect":"hold"}]}},"input":{"tool":"mcp__jira__list_issues","arguments":{},"timestamp":"2026-09-18T12:00:00Z","capabilities":[]},"expect":{"verdict":"allow","statementId":null,"layer":"agent","ruleKey":"tools.default"}},
26
34
  {"id":"VE-15","name":"an expired document contributes nothing","bound":{"group":{"schemaVersion":"armor.policy.v2","policyId":"p-group","target":{"group":"payments"},"layer":"group","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"2026-01-01T00:00:00Z","statements":[{"id":"st-g","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"x","variant":0,"source":"yaml","layer":"group"},"match":{"tool":"x","keyTier":"exact","order":0},"effect":"block"}]},"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[]}},"input":{"tool":"x","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"allow","statementId":null,"layer":"agent","ruleKey":"tools.default"}},
35
+ {"id":"VE-15b","name":"an expired floor default does not cap a live agent default","bound":{"floor":{"schemaVersion":"armor.policy.v2","policyId":"p-floor","target":{"org":"*"},"layer":"floor","defaults":{"tools":"block","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"2026-01-01T00:00:00Z","statements":[]},"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[]}},"input":{"tool":"x","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"allow","statementId":null,"layer":"agent","ruleKey":"tools.default"}},
36
+ {"id":"VE-15c","name":"when every bound document has expired, the most specific default still applies","bound":{"floor":{"schemaVersion":"armor.policy.v2","policyId":"p-floor","target":{"org":"*"},"layer":"floor","defaults":{"tools":"block","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"2026-01-01T00:00:00Z","statements":[]},"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"2026-01-01T00:00:00Z","statements":[]}},"input":{"tool":"x","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"allow","statementId":null,"layer":"agent","ruleKey":"tools.default"}},
37
+ {"id":"VE-16","name":"a qualified rule key matches a bare-name call that carries the qualified name","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-q","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"mcp__gt-data-mcp__share_dataset_external","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"mcp__gt-data-mcp__share_dataset_external","keyTier":"exact","order":0},"effect":"block"}]}},"input":{"tool":"share_dataset_external","arguments":{},"timestamp":"2026-09-18T12:00:00Z","qualifiedName":"mcp__gt-data-mcp__share_dataset_external"},"expect":{"verdict":"block","statementId":"st-q","layer":"agent","ruleKey":"mcp__gt-data-mcp__share_dataset_external"}},
38
+ {"id":"VE-16b","name":"a qualified rule key does not match the same bare name owned by another server","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-q","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"mcp__gt-data-mcp__share_dataset_external","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"mcp__gt-data-mcp__share_dataset_external","keyTier":"exact","order":0},"effect":"block"}]}},"input":{"tool":"share_dataset_external","arguments":{},"timestamp":"2026-09-18T12:00:00Z","qualifiedName":"mcp__other-mcp__share_dataset_external"},"expect":{"verdict":"hold","statementId":null,"layer":"agent","ruleKey":"tools.default"}},
39
+ {"id":"VE-16c","name":"a qualified rule key does not match a bare-name call with no qualified name","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-q","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"mcp__gt-data-mcp__share_dataset_external","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"mcp__gt-data-mcp__share_dataset_external","keyTier":"exact","order":0},"effect":"block"}]}},"input":{"tool":"share_dataset_external","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"hold","statementId":null,"layer":"agent","ruleKey":"tools.default"}},
40
+ {"id":"VE-17","name":"an exact qualified key beats a server glob","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-glob","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"mcp__gt-data-mcp__*","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"mcp__gt-data-mcp__*","keyTier":"glob","order":0},"effect":"allow"},{"id":"st-q","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"mcp__gt-data-mcp__share_dataset_external","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"mcp__gt-data-mcp__share_dataset_external","keyTier":"exact","order":0},"effect":"block"}]}},"input":{"tool":"share_dataset_external","arguments":{},"timestamp":"2026-09-18T12:00:00Z","qualifiedName":"mcp__gt-data-mcp__share_dataset_external"},"expect":{"verdict":"block","statementId":"st-q","layer":"agent","ruleKey":"mcp__gt-data-mcp__share_dataset_external"}},
41
+ {"id":"VE-17b","name":"with both a bare and a qualified exact key, the qualified key wins","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-bare","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"share_dataset_external","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"share_dataset_external","keyTier":"exact","order":0},"effect":"allow"},{"id":"st-q","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"mcp__gt-data-mcp__share_dataset_external","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"mcp__gt-data-mcp__share_dataset_external","keyTier":"exact","order":0},"effect":"block"}]}},"input":{"tool":"share_dataset_external","arguments":{},"timestamp":"2026-09-18T12:00:00Z","qualifiedName":"mcp__gt-data-mcp__share_dataset_external"},"expect":{"verdict":"block","statementId":"st-q","layer":"agent","ruleKey":"mcp__gt-data-mcp__share_dataset_external"}},
42
+ {"id":"VE-17c","name":"a server glob matches a bare-name call that carries the qualified name","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-glob","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"mcp__gt-data-mcp__*","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"mcp__gt-data-mcp__*","keyTier":"glob","order":0},"effect":"hold"}]}},"input":{"tool":"share_dataset_external","arguments":{},"timestamp":"2026-09-18T12:00:00Z","qualifiedName":"mcp__gt-data-mcp__share_dataset_external"},"expect":{"verdict":"hold","statementId":"st-glob","layer":"agent","ruleKey":"mcp__gt-data-mcp__*"}},
43
+ {"id":"VE-17d","name":"a longer server glob beats a shorter bare-name glob","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"hold","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-short","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"share_*","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"share_*","keyTier":"glob","order":0},"effect":"allow"},{"id":"st-glob","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"mcp__gt-data-mcp__*","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"mcp__gt-data-mcp__*","keyTier":"glob","order":0},"effect":"block"}]}},"input":{"tool":"share_dataset_external","arguments":{},"timestamp":"2026-09-18T12:00:00Z","qualifiedName":"mcp__gt-data-mcp__share_dataset_external"},"expect":{"verdict":"block","statementId":"st-glob","layer":"agent","ruleKey":"mcp__gt-data-mcp__*"}},
27
44
  {"id":"VX-1","name":"eq never equates true and 1","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-eq","subject":null,"conditions":[{"field":"args.flag","op":"eq","value":1}],"expiresAt":"never","provenance":{"ruleKey":"x","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"x","keyTier":"exact","order":0},"effect":"block"},{"id":"st-else","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"x","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"x","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"x","arguments":{"flag":true},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"allow","statementId":"st-else","layer":"agent","ruleKey":"x"}},
28
45
  {"id":"VX-2","name":"in compares by strict equality","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-in","subject":null,"conditions":[{"field":"args.n","op":"in","value":[1,2]}],"expiresAt":"never","provenance":{"ruleKey":"x","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"x","keyTier":"exact","order":0},"effect":"block"},{"id":"st-else","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"x","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"x","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"x","arguments":{"n":true},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"allow","statementId":"st-else","layer":"agent","ruleKey":"x"}},
29
46
  {"id":"VX-3","name":"exists false matches an absent argument","bound":{"agent":{"schemaVersion":"armor.policy.v2","policyId":"p-agent","target":{"agent":"aaaaaaaa-0000-4000-8000-000000000001"},"layer":"agent","defaults":{"tools":"allow","network":"block","files":"allow","skills":"allow"},"capture":{"arguments":true,"redact":["*token*"],"maxBytesPerCall":16384,"sample":1},"expiresAt":"never","statements":[{"id":"st-ex","subject":null,"conditions":[{"field":"args.note","op":"exists","value":false}],"expiresAt":"never","provenance":{"ruleKey":"x","variant":0,"source":"yaml","layer":"agent"},"match":{"tool":"x","keyTier":"exact","order":0},"effect":"block"},{"id":"st-else","subject":null,"conditions":[],"expiresAt":"never","provenance":{"ruleKey":"x","variant":1,"source":"yaml","layer":"agent"},"match":{"tool":"x","keyTier":"exact","order":1},"effect":"allow"}]}},"input":{"tool":"x","arguments":{},"timestamp":"2026-09-18T12:00:00Z"},"expect":{"verdict":"block","statementId":"st-ex","layer":"agent","ruleKey":"x"}},