@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/dist/{document-entry-CDOQVeis.d.cts → document-entry-iS3HikJ9.d.cts} +117 -3
- package/dist/{document-entry-CDOQVeis.d.ts → document-entry-iS3HikJ9.d.ts} +117 -3
- package/dist/document.cjs +86 -15
- package/dist/document.cjs.map +1 -1
- package/dist/document.d.cts +1 -1
- package/dist/document.d.ts +1 -1
- package/dist/document.js +85 -15
- package/dist/document.js.map +1 -1
- package/dist/index.cjs +85 -51
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +14 -44
- package/dist/index.d.ts +14 -44
- package/dist/index.js +84 -51
- package/dist/index.js.map +1 -1
- package/dist/vectors.cjs +26 -2
- package/dist/vectors.cjs.map +1 -1
- package/dist/vectors.js +26 -2
- package/dist/vectors.js.map +1 -1
- package/package.json +1 -1
- package/vectors/compile.json +8 -1
- package/vectors/evaluate.json +18 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@armoriq/policy-ir",
|
|
3
|
-
"version": "0.1.
|
|
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": {
|
package/vectors/compile.json
CHANGED
|
@@ -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
|
]
|
package/vectors/evaluate.json
CHANGED
|
@@ -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
|
|
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"}},
|