@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/dist/vectors.cjs
CHANGED
|
@@ -719,6 +719,8 @@ var schema_hash_vectors_default = {
|
|
|
719
719
|
var evaluate_default = [
|
|
720
720
|
{ 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: 5e3, 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" } },
|
|
721
721
|
{ 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: 5e3, 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: 9e3 }, 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: [] } },
|
|
722
|
+
{ 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: 5e3, 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"] } } },
|
|
723
|
+
{ 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: 5e3, 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 } },
|
|
722
724
|
{ 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: 5e3, 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: 9e3 }, 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" }] } },
|
|
723
725
|
{ 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" } },
|
|
724
726
|
{ 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__*" } },
|
|
@@ -731,7 +733,13 @@ var evaluate_default = [
|
|
|
731
733
|
{ 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" } },
|
|
732
734
|
{ 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" } },
|
|
733
735
|
{ 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" } },
|
|
734
|
-
{ id: "VE-6", name: "unknown tool goes to
|
|
736
|
+
{ 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: 5e3, 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" } },
|
|
737
|
+
{ 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: 5e3, 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" } },
|
|
738
|
+
{ 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: 5e3, 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" } },
|
|
739
|
+
{ 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" } },
|
|
740
|
+
{ 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: 5e3, 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" } },
|
|
741
|
+
{ 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" } },
|
|
742
|
+
{ 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" } },
|
|
735
743
|
{ 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" } },
|
|
736
744
|
{ 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: 5e3, 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" } },
|
|
737
745
|
{ 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" } },
|
|
@@ -742,6 +750,15 @@ var evaluate_default = [
|
|
|
742
750
|
{ 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" } },
|
|
743
751
|
{ 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" } },
|
|
744
752
|
{ 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" } },
|
|
753
|
+
{ 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" } },
|
|
754
|
+
{ 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" } },
|
|
755
|
+
{ 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" } },
|
|
756
|
+
{ 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" } },
|
|
757
|
+
{ 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" } },
|
|
758
|
+
{ 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" } },
|
|
759
|
+
{ 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" } },
|
|
760
|
+
{ 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__*" } },
|
|
761
|
+
{ 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__*" } },
|
|
745
762
|
{ 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" } },
|
|
746
763
|
{ 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" } },
|
|
747
764
|
{ 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" } },
|
|
@@ -993,7 +1010,14 @@ var compile_default = [
|
|
|
993
1010
|
{ 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"] } },
|
|
994
1011
|
{ 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" } } },
|
|
995
1012
|
{ 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"] } },
|
|
996
|
-
{ 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"] } }
|
|
1013
|
+
{ 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"] } },
|
|
1014
|
+
{ 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"] } },
|
|
1015
|
+
{ 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"] } },
|
|
1016
|
+
{ 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"] } },
|
|
1017
|
+
{ 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"] } },
|
|
1018
|
+
{ 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"] } },
|
|
1019
|
+
{ 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: [] } },
|
|
1020
|
+
{ 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: [] } }
|
|
997
1021
|
];
|
|
998
1022
|
|
|
999
1023
|
// src/vectors.ts
|