removedInput schema / $defs
Removed value: -{
- "CompositionMetadata": {
- "description": "System-managed block describing which scope sources merged into the canonical card. Only returned when `?include_composition=true`.",
- "properties": {
- "canonical_id": {
- "type": "string"
- },
- "composed_at": {
- "format": "date-time",
- "type": "string"
- },
- "exemptions_applied": {
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "scopes_applied": {
- "items": {
- "properties": {
- "card_id": {
- "type": "string"
- },
- "scope": {
- "description": "`platform`, `org:<id>`, or `agent:<id>`.",
- "type": "string"
- },
- "template_version": {
- "type": "integer"
- },
- "version": {
- "type": "integer"
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- "source_card_id": {
- "type": "string"
- },
- "source_policy_id": {
- "type": "string"
- }
- },
- "type": "object"
- },
- "UnifiedProtectionCard": {
- "description": "Unified protection card (ADR-037). Safe House thresholds + trusted-source policy for a single agent. Shape matches src/composition/types.ts::UnifiedProtectionCard (canonical) and what the runtime validator at src/composition/validate.ts accepts. The customer-facing docs at /concepts/protection-card and /specifications/protection-card-schema document this same shape.",
- "properties": {
- "_composition": {
- "$ref": "#/$defs/CompositionMetadata"
- },
- "agent_id": {
- "type": "string"
- },
- "card_id": {
- "type": "string"
- },
- "card_version": {
- "type": "string"
- },
- "content_hash": {
- "description": "Response-only: content hash of the composed card (`sha256:<hex>`), injected by the GET/PUT response. Server-assigned — do not send on a PUT.",
- "type": "string"
- },
- "expires_at": {
- "format": "date-time",
- "type": [
- "string",
- "null"
- ]
- },
- "extensions": {
- "additionalProperties": true,
- "description": "Free-form extension slot for non-canonical fields. Ignored by the composer; preserved on read for tooling that needs an audit-tail metadata bag.",
- "type": "object"
- },
- "issued_at": {
- "format": "date-time",
- "type": "string"
- },
- "mode": {
- "description": "Strictest-wins composition: enforce > nudge > observe > off.",
- "enum": [
- "off",
- "observe",
- "nudge",
- "enforce"
- ],
- "type": "string"
- },
- "protected_surface": {
- "description": "Org-declared protected surface policy (MNE-830). Strengthen-only UNION across platform → org → team → agent: each scope may add entries; none may remove. The composer always emits this block; callers omit it to inherit the composed floor. See ADR-037 §protected_surface.",
- "properties": {
- "assets": {
- "description": "Protected assets. Intrinsic identity = `${kind}:${selector}` (normalized). Composer merges by identity, keeping the strictest entry per scope.",
- "items": {
- "properties": {
- "kind": {
- "description": "Asset kind (e.g. `row`, `field`, `resource`, `table`).",
- "type": "string"
- },
- "label": {
- "description": "Human-facing display label (optional).",
- "type": "string"
- },
- "reason": {
- "description": "Why this asset is protected (optional).",
- "type": "string"
- },
- "selector": {
- "description": "Asset selector (e.g. `customer:critical-0000`, `replica_dsn`).",
- "type": "string"
- },
- "source_scope": {
- "description": "Composer-assigned provenance (`platform`, `org:<id>`, `team:<id>`, `agent:<id>`). Server-assigned — do not send on a PUT.",
- "type": "string"
- }
- },
- "required": [
- "kind",
- "selector"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "escalation_required": {
- "description": "Operations that require escalation before proceeding. Same intrinsic-identity + union rules as forbidden_operations (minus severity).",
- "items": {
- "properties": {
- "applies_to": {
- "description": "Asset identities this escalation applies to. Empty/absent = GLOBAL.",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "pattern": {
- "description": "Operation pattern requiring escalation.",
- "type": "string"
- },
- "reason": {
- "description": "Why escalation is required (optional).",
- "type": "string"
- },
- "source_scope": {
- "description": "Composer-assigned provenance. Server-assigned — do not send on a PUT.",
- "type": "string"
- }
- },
- "required": [
- "pattern"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "forbidden_operations": {
- "description": "Operations that are unconditionally forbidden. Intrinsic identity = normalized `pattern`. Composer unions across scopes; on identity collision, severity → max.",
- "items": {
- "properties": {
- "applies_to": {
- "description": "Asset identities (`${kind}:${selector}`) this operation applies to. Empty/absent means GLOBAL.",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "pattern": {
- "description": "Operation pattern (e.g. `TRUNCATE`, `unscoped UPDATE/DELETE`, `exfiltrate:pii`).",
- "type": "string"
- },
- "reason": {
- "description": "Why this operation is forbidden (optional).",
- "type": "string"
- },
- "severity": {
- "description": "Severity level. Composer merges to strictest across scopes.",
- "enum": [
- "low",
- "medium",
- "high",
- "critical"
- ],
- "type": "string"
- },
- "source_scope": {
- "description": "Composer-assigned provenance. Server-assigned — do not send on a PUT.",
- "type": "string"
- }
- },
- "required": [
- "pattern"
- ],
- "type": "object"
- },
- "type": "array"
- }
- },
- "type": "object"
- },
- "review": {
- "description": "Review-hold policy (Safe House Review, Slice 2a — MNE-920 design). gate_on is the minimum verdict band per surface that escalates to a review-hold. Composition is strictest-wins; on_timeout defaults to 'reject' (fail-closed). reviewer.kind 'endpoint' is designed for MNE-1650 and not consumed yet.",
- "properties": {
- "enabled": {
- "type": "boolean"
- },
- "gate_on": {
- "properties": {
- "incoming": {
- "enum": [
- "off",
- "warn",
- "quarantine",
- "block"
- ],
- "type": "string"
- },
- "integrity": {
- "enum": [
- "off",
- "review_needed",
- "boundary_violation"
- ],
- "type": "string"
- },
- "outgoing": {
- "enum": [
- "off",
- "warn",
- "quarantine",
- "block"
- ],
- "type": "string"
- },
- "tool_calls": {
- "enum": [
- "off",
- "warn",
- "quarantine",
- "block"
- ],
- "type": "string"
- },
- "tool_responses": {
- "enum": [
- "off",
- "warn",
- "quarantine",
- "block"
- ],
- "type": "string"
- }
- },
- "type": "object"
- },
- "notify": {
- "properties": {
- "sse": {
- "type": "boolean"
- },
- "webhooks": {
- "type": "boolean"
- }
- },
- "type": "object"
- },
- "on_timeout": {
- "enum": [
- "reject",
- "release"
- ],
- "type": "string"
- },
- "quarantine_notice": {
- "maxLength": 2000,
- "type": "string"
- },
- "reviewer": {
- "properties": {
- "endpoint_url": {
- "format": "uri",
- "type": "string"
- },
- "kind": {
- "enum": [
- "builtin_opus",
- "endpoint"
- ],
- "type": "string"
- }
- },
- "required": [
- "kind"
- ],
- "type": "object"
- },
- "sla_seconds": {
- "minimum": 1,
- "type": "number"
- }
- },
- "required": [
- "enabled"
- ],
- "type": "object"
- },
- "screen_surfaces": {
- "description": "Which request surfaces Safe House inspects. Composed across scopes by OR-per-field (any scope requiring inspection wins).",
- "properties": {
- "incoming": {
- "description": "The user/principal prompt entering the agent.",
- "type": "boolean"
- },
- "outgoing": {
- "description": "The agent's response leaving the agent.",
- "type": "boolean"
- },
- "tool_calls": {
- "description": "Tool-use invocations the agent makes.",
- "type": "boolean"
- },
- "tool_responses": {
- "description": "Responses to tool calls returning to the agent.",
- "type": "boolean"
- }
- },
- "required": [
- "incoming",
- "outgoing",
- "tool_calls",
- "tool_responses"
- ],
- "type": "object"
- },
- "thresholds": {
- "description": "Score bands. Must satisfy warn <= quarantine <= block; each value in [0, 1].",
- "properties": {
- "block": {
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "quarantine": {
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "warn": {
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "warn",
- "quarantine",
- "block"
- ],
- "type": "object"
- },
- "trusted_sources": {
- "description": "Sources for which detectors short-circuit (each match logged in the trace). Composed as platform->agent intersection (compliance ceiling) with org+agent union inside that ceiling — an agent cannot widen trust beyond what the platform allows.",
- "properties": {
- "agent_ids": {
- "description": "Mnemom agent IDs (mnm-* / smolt-* prefixed).",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "domains": {
- "description": "DNS names or host:port entries.",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "ip_ranges": {
- "description": "IPv4 or IPv6 CIDR ranges.",
- "items": {
- "type": "string"
- },
- "type": "array"
- }
- },
- "required": [
- "domains",
- "agent_ids",
- "ip_ranges"
- ],
- "type": "object"
- },
- "version": {
- "description": "Response-only: monotonic card version, injected by the GET/PUT response. Server-assigned — do not send on a PUT.",
- "type": "integer"
- }
- },
- "required": [
- "card_version",
- "agent_id",
- "mode",
- "thresholds",
- "screen_surfaces",
- "trusted_sources"
- ],
- "type": "object"
- }
-}
changedInput schema / properties / agent_id / description
Previous value: -"Agent identifier (e.g. smolt-abc123)"New value: +"The agent this card belongs to (e.g. `smolt-abc123`). Identifier only — never place an API key, a secret, an email address, or any other personal data in this field."
addedInput schema / properties / agent_id / maxLength
Added value: +64
addedInput schema / properties / agent_id / minLength
Added value: +3
addedInput schema / properties / agent_id / pattern
Added value: +"^[A-Za-z0-9][A-Za-z0-9_-]{1,62}[A-Za-z0-9]$"
removedInput schema / properties / body
Removed value: -{
- "description": "Unified protection card (ADR-037). Safe House thresholds + trusted-source policy for a single agent. Shape matches src/composition/types.ts::UnifiedProtectionCard (canonical) and what the runtime validator at src/composition/validate.ts accepts. The customer-facing docs at /concepts/protection-card and /specifications/protection-card-schema document this same shape.",
- "properties": {
- "_composition": {
- "$ref": "#/$defs/CompositionMetadata"
- },
- "agent_id": {
- "type": "string"
- },
- "card_id": {
- "type": "string"
- },
- "card_version": {
- "type": "string"
- },
- "content_hash": {
- "description": "Response-only: content hash of the composed card (`sha256:<hex>`), injected by the GET/PUT response. Server-assigned — do not send on a PUT.",
- "type": "string"
- },
- "expires_at": {
- "format": "date-time",
- "type": [
- "string",
- "null"
- ]
- },
- "extensions": {
- "additionalProperties": true,
- "description": "Free-form extension slot for non-canonical fields. Ignored by the composer; preserved on read for tooling that needs an audit-tail metadata bag.",
- "type": "object"
- },
- "issued_at": {
- "format": "date-time",
- "type": "string"
- },
- "mode": {
- "description": "Strictest-wins composition: enforce > nudge > observe > off.",
- "enum": [
- "off",
- "observe",
- "nudge",
- "enforce"
- ],
- "type": "string"
- },
- "protected_surface": {
- "description": "Org-declared protected surface policy (MNE-830). Strengthen-only UNION across platform → org → team → agent: each scope may add entries; none may remove. The composer always emits this block; callers omit it to inherit the composed floor. See ADR-037 §protected_surface.",
- "properties": {
- "assets": {
- "description": "Protected assets. Intrinsic identity = `${kind}:${selector}` (normalized). Composer merges by identity, keeping the strictest entry per scope.",
- "items": {
- "properties": {
- "kind": {
- "description": "Asset kind (e.g. `row`, `field`, `resource`, `table`).",
- "type": "string"
- },
- "label": {
- "description": "Human-facing display label (optional).",
- "type": "string"
- },
- "reason": {
- "description": "Why this asset is protected (optional).",
- "type": "string"
- },
- "selector": {
- "description": "Asset selector (e.g. `customer:critical-0000`, `replica_dsn`).",
- "type": "string"
- },
- "source_scope": {
- "description": "Composer-assigned provenance (`platform`, `org:<id>`, `team:<id>`, `agent:<id>`). Server-assigned — do not send on a PUT.",
- "type": "string"
- }
- },
- "required": [
- "kind",
- "selector"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "escalation_required": {
- "description": "Operations that require escalation before proceeding. Same intrinsic-identity + union rules as forbidden_operations (minus severity).",
- "items": {
- "properties": {
- "applies_to": {
- "description": "Asset identities this escalation applies to. Empty/absent = GLOBAL.",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "pattern": {
- "description": "Operation pattern requiring escalation.",
- "type": "string"
- },
- "reason": {
- "description": "Why escalation is required (optional).",
- "type": "string"
- },
- "source_scope": {
- "description": "Composer-assigned provenance. Server-assigned — do not send on a PUT.",
- "type": "string"
- }
- },
- "required": [
- "pattern"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "forbidden_operations": {
- "description": "Operations that are unconditionally forbidden. Intrinsic identity = normalized `pattern`. Composer unions across scopes; on identity collision, severity → max.",
- "items": {
- "properties": {
- "applies_to": {
- "description": "Asset identities (`${kind}:${selector}`) this operation applies to. Empty/absent means GLOBAL.",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "pattern": {
- "description": "Operation pattern (e.g. `TRUNCATE`, `unscoped UPDATE/DELETE`, `exfiltrate:pii`).",
- "type": "string"
- },
- "reason": {
- "description": "Why this operation is forbidden (optional).",
- "type": "string"
- },
- "severity": {
- "description": "Severity level. Composer merges to strictest across scopes.",
- "enum": [
- "low",
- "medium",
- "high",
- "critical"
- ],
- "type": "string"
- },
- "source_scope": {
- "description": "Composer-assigned provenance. Server-assigned — do not send on a PUT.",
- "type": "string"
- }
- },
- "required": [
- "pattern"
- ],
- "type": "object"
- },
- "type": "array"
- }
- },
- "type": "object"
- },
- "review": {
- "description": "Review-hold policy (Safe House Review, Slice 2a — MNE-920 design). gate_on is the minimum verdict band per surface that escalates to a review-hold. Composition is strictest-wins; on_timeout defaults to 'reject' (fail-closed). reviewer.kind 'endpoint' is designed for MNE-1650 and not consumed yet.",
- "properties": {
- "enabled": {
- "type": "boolean"
- },
- "gate_on": {
- "properties": {
- "incoming": {
- "enum": [
- "off",
- "warn",
- "quarantine",
- "block"
- ],
- "type": "string"
- },
- "integrity": {
- "enum": [
- "off",
- "review_needed",
- "boundary_violation"
- ],
- "type": "string"
- },
- "outgoing": {
- "enum": [
- "off",
- "warn",
- "quarantine",
- "block"
- ],
- "type": "string"
- },
- "tool_calls": {
- "enum": [
- "off",
- "warn",
- "quarantine",
- "block"
- ],
- "type": "string"
- },
- "tool_responses": {
- "enum": [
- "off",
- "warn",
- "quarantine",
- "block"
- ],
- "type": "string"
- }
- },
- "type": "object"
- },
- "notify": {
- "properties": {
- "sse": {
- "type": "boolean"
- },
- "webhooks": {
- "type": "boolean"
- }
- },
- "type": "object"
- },
- "on_timeout": {
- "enum": [
- "reject",
- "release"
- ],
- "type": "string"
- },
- "quarantine_notice": {
- "maxLength": 2000,
- "type": "string"
- },
- "reviewer": {
- "properties": {
- "endpoint_url": {
- "format": "uri",
- "type": "string"
- },
- "kind": {
- "enum": [
- "builtin_opus",
- "endpoint"
- ],
- "type": "string"
- }
- },
- "required": [
- "kind"
- ],
- "type": "object"
- },
- "sla_seconds": {
- "minimum": 1,
- "type": "number"
- }
- },
- "required": [
- "enabled"
- ],
- "type": "object"
- },
- "screen_surfaces": {
- "description": "Which request surfaces Safe House inspects. Composed across scopes by OR-per-field (any scope requiring inspection wins).",
- "properties": {
- "incoming": {
- "description": "The user/principal prompt entering the agent.",
- "type": "boolean"
- },
- "outgoing": {
- "description": "The agent's response leaving the agent.",
- "type": "boolean"
- },
- "tool_calls": {
- "description": "Tool-use invocations the agent makes.",
- "type": "boolean"
- },
- "tool_responses": {
- "description": "Responses to tool calls returning to the agent.",
- "type": "boolean"
- }
- },
- "required": [
- "incoming",
- "outgoing",
- "tool_calls",
- "tool_responses"
- ],
- "type": "object"
- },
- "thresholds": {
- "description": "Score bands. Must satisfy warn <= quarantine <= block; each value in [0, 1].",
- "properties": {
- "block": {
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "quarantine": {
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- },
- "warn": {
- "maximum": 1,
- "minimum": 0,
- "type": "number"
- }
- },
- "required": [
- "warn",
- "quarantine",
- "block"
- ],
- "type": "object"
- },
- "trusted_sources": {
- "description": "Sources for which detectors short-circuit (each match logged in the trace). Composed as platform->agent intersection (compliance ceiling) with org+agent union inside that ceiling — an agent cannot widen trust beyond what the platform allows.",
- "properties": {
- "agent_ids": {
- "description": "Mnemom agent IDs (mnm-* / smolt-* prefixed).",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "domains": {
- "description": "DNS names or host:port entries.",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "ip_ranges": {
- "description": "IPv4 or IPv6 CIDR ranges.",
- "items": {
- "type": "string"
- },
- "type": "array"
- }
- },
- "required": [
- "domains",
- "agent_ids",
- "ip_ranges"
- ],
- "type": "object"
- },
- "version": {
- "description": "Response-only: monotonic card version, injected by the GET/PUT response. Server-assigned — do not send on a PUT.",
- "type": "integer"
- }
- },
- "required": [
- "card_version",
- "agent_id",
- "mode",
- "thresholds",
- "screen_surfaces",
- "trusted_sources"
- ],
- "type": "object"
-}
addedInput schema / properties / card_version
Added value: +{
+ "description": "Card schema version. REQUIRED by the server-side validator. Current canonical value: `protection/2026-04-26`.",
+ "maxLength": 40,
+ "minLength": 3,
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._/-]{1,38}[A-Za-z0-9]$",
+ "type": "string"
+}
addedInput schema / properties / mode
Added value: +{
+ "description": "Screening mode for the protection pipeline. Required. `off` disables screening; `observe` records only; `nudge` warns; `enforce` blocks.",
+ "enum": [
+ "off",
+ "observe",
+ "nudge",
+ "enforce"
+ ],
+ "type": "string"
+}
addedInput schema / properties / protected_surface
Added value: +{
+ "additionalProperties": false,
+ "description": "The assets and operations this agent must protect. Omit to accept the composed default (empty surface).",
+ "properties": {
+ "assets": {
+ "description": "The assets under protection.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "kind": {
+ "description": "Asset class — e.g. \"repo\", \"database\", \"bucket\".",
+ "maxLength": 64,
+ "minLength": 1,
+ "type": "string"
+ },
+ "label": {
+ "description": "Short human-readable name for the asset.",
+ "maxLength": 120,
+ "minLength": 1,
+ "type": "string"
+ },
+ "reason": {
+ "description": "Why it is protected, in one short sentence. Do NOT enter personal data (names, email addresses, phone numbers, postal addresses), and do NOT enter health, biometric, government-identifier (e.g. SSN) or payment-card data. This text is stored on the agent's governance card and is readable by everyone in the owning organization.",
+ "maxLength": 200,
+ "minLength": 1,
+ "type": "string"
+ },
+ "selector": {
+ "description": "Which instance — e.g. \"mnemom/mnemom-api\". A resource identifier only: no credentials, no connection strings, no personal data.",
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "selector"
+ ],
+ "type": "object"
+ },
+ "maxItems": 64,
+ "type": "array"
+ },
+ "escalation_required": {
+ "description": "Operations that require human approval before the agent may proceed.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "applies_to": {
+ "description": "Asset identities this entry applies to. Omit to apply to every protected asset.",
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 64,
+ "type": "array"
+ },
+ "pattern": {
+ "description": "Operation matcher — e.g. \"force_push\", \"drop_table*\". A short pattern, not a description.",
+ "maxLength": 200,
+ "minLength": 1,
+ "type": "string"
+ },
+ "reason": {
+ "description": "Why this entry exists, in one short sentence. Do NOT enter personal data (names, email addresses, phone numbers, postal addresses), and do NOT enter health, biometric, government-identifier (e.g. SSN) or payment-card data. This text is stored on the agent's governance card and is readable by everyone in the owning organization.",
+ "maxLength": 200,
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "pattern"
+ ],
+ "type": "object"
+ },
+ "maxItems": 64,
+ "type": "array"
+ },
+ "forbidden_operations": {
+ "description": "Operations the agent must never perform on the protected assets.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "applies_to": {
+ "description": "Asset identities this entry applies to. Omit to apply to every protected asset.",
+ "items": {
+ "maxLength": 256,
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 64,
+ "type": "array"
+ },
+ "pattern": {
+ "description": "Operation matcher — e.g. \"force_push\", \"drop_table*\". A short pattern, not a description.",
+ "maxLength": 200,
+ "minLength": 1,
+ "type": "string"
+ },
+ "reason": {
+ "description": "Why this entry exists, in one short sentence. Do NOT enter personal data (names, email addresses, phone numbers, postal addresses), and do NOT enter health, biometric, government-identifier (e.g. SSN) or payment-card data. This text is stored on the agent's governance card and is readable by everyone in the owning organization.",
+ "maxLength": 200,
+ "minLength": 1,
+ "type": "string"
+ },
+ "severity": {
+ "description": "How serious a violation of this entry is.",
+ "enum": [
+ "low",
+ "medium",
+ "high",
+ "critical"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "pattern"
+ ],
+ "type": "object"
+ },
+ "maxItems": 64,
+ "type": "array"
+ }
+ },
+ "type": "object"
+}
addedInput schema / properties / screen_surfaces
Added value: +{
+ "additionalProperties": false,
+ "description": "Which traffic surfaces are screened. Omit to accept the composed defaults.",
+ "properties": {
+ "incoming": {
+ "description": "Screen prompts arriving at the agent.",
+ "type": "boolean"
+ },
+ "outgoing": {
+ "description": "Screen the agent's outbound messages.",
+ "type": "boolean"
+ },
+ "tool_calls": {
+ "description": "Screen the tool calls the agent makes.",
+ "type": "boolean"
+ },
+ "tool_responses": {
+ "description": "Screen tool responses returned to the agent.",
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+}
addedInput schema / properties / thresholds
Added value: +{
+ "additionalProperties": false,
+ "description": "Risk-score cutoffs, each in [0, 1] and ordered warn ≤ quarantine ≤ block. All three are required if this object is sent at all — omit the whole object to accept the composed defaults.",
+ "properties": {
+ "block": {
+ "description": "Score at or above which the request is refused.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "quarantine": {
+ "description": "Score at or above which the request is held for review.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ },
+ "warn": {
+ "description": "Score at or above which the request is flagged.",
+ "maximum": 1,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "warn",
+ "quarantine",
+ "block"
+ ],
+ "type": "object"
+}
addedInput schema / properties / trusted_sources
Added value: +{
+ "additionalProperties": false,
+ "description": "Sources exempt from screening. Enumerate specific hosts — wildcards are rejected, and a server-side deny-list (public LLM/DNS endpoints, 0.0.0.0/0, ::/0, link-local, multicast) is always applied.",
+ "properties": {
+ "agent_ids": {
+ "description": "Trusted Mnemom agent IDs. Must be in canonical `mnm-*` form.",
+ "items": {
+ "maxLength": 64,
+ "minLength": 8,
+ "pattern": "^mnm-[A-Za-z0-9-]{4,}$",
+ "type": "string"
+ },
+ "maxItems": 64,
+ "type": "array"
+ },
+ "domains": {
+ "description": "Trusted DNS names, optionally with `:port`. No wildcards.",
+ "items": {
+ "maxLength": 253,
+ "minLength": 3,
+ "type": "string"
+ },
+ "maxItems": 64,
+ "type": "array"
+ },
+ "ip_ranges": {
+ "description": "Trusted CIDR ranges (e.g. `10.0.0.0/8`).",
+ "items": {
+ "maxLength": 43,
+ "minLength": 4,
+ "type": "string"
+ },
+ "maxItems": 64,
+ "type": "array"
+ }
+ },
+ "type": "object"
+}
changedInput schema / required
Previous value: -[
- "agent_id"
-]New value: +[
+ "agent_id",
+ "card_version",
+ "mode"
+]
addedOutput schema / properties / composition_valid
Added value: +{
+ "description": "True when the composed card is valid.",
+ "type": "boolean"
+}
removedOutput schema / properties / conflicts
Removed value: -{
- "additionalProperties": false,
- "properties": {
- "by_reason": {
- "additionalProperties": {
- "type": "integer"
- },
- "type": "object"
- },
- "not_shown": {
- "description": "Conflicts beyond the inline top-N (present only when > top-N).",
- "type": "integer"
- },
- "overrides": {
- "items": {
- "additionalProperties": false,
- "properties": {
- "field": {},
- "from": {},
- "reason": {},
- "to": {},
- "won_by": {}
- },
- "type": "object"
- },
- "type": "array"
- },
- "total": {
- "type": "integer"
- }
- },
- "required": [
- "total",
- "by_reason",
- "overrides"
- ],
- "type": "object"
-}
addedOutput schema / properties / conflicts_count
Added value: +{
+ "description": "Total number of conflicts detected (0 = none).",
+ "type": "integer"
+}
removedOutput schema / properties / effective
Removed value: -{
- "additionalProperties": false,
- "properties": {
- "mode": {
- "type": "string"
- },
- "screen_surfaces": {},
- "thresholds": {},
- "trusted_sources_counts": {
- "additionalProperties": false,
- "properties": {
- "agent_ids": {
- "type": "integer"
- },
- "domains": {
- "type": "integer"
- },
- "ip_ranges": {
- "type": "integer"
- }
- },
- "required": [
- "domains",
- "agent_ids",
- "ip_ranges"
- ],
- "type": "object"
- }
- },
- "required": [
- "trusted_sources_counts"
- ],
- "type": "object"
-}
removedOutput schema / properties / full_report / additionalProperties
Removed value: -false
addedOutput schema / properties / full_report / description
Added value: +"Optional pointer to the full /v1 conflict report (method + path)."
addedOutput schema / properties / full_report / oneOf
Added value: +[
+ {
+ "type": "null"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "method": {
+ "type": "string"
+ },
+ "note": {
+ "type": "string"
+ },
+ "path": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "method",
+ "path",
+ "note"
+ ],
+ "type": "object"
+ }
+]
removedOutput schema / properties / full_report / properties
Removed value: -{
- "method": {
- "type": "string"
- },
- "note": {
- "type": "string"
- },
- "path": {
- "type": "string"
- }
-}
removedOutput schema / properties / full_report / required
Removed value: -[
- "method",
- "path",
- "note"
-]
removedOutput schema / properties / full_report / type
Removed value: -"object"
addedOutput schema / properties / ok / description
Added value: +"True when composition succeeded (no blocking conflicts)."
addedOutput schema / properties / summary / description
Added value: +"One-line human-readable summary of composition status."
removedOutput schema / properties / summary / enum
Removed value: -[
- true
-]
changedOutput schema / properties / summary / type
Previous value: -"boolean"New value: +"string"
removedOutput schema / properties / tool
Removed value: -{
- "enum": [
- "preview_compose_protection_by_agent"
- ],
- "type": "string"
-}
removedOutput schema / properties / what_changed
Removed value: -{
- "type": "string"
-}
removedOutput schema / properties / what_to_do_next
Removed value: -{
- "type": "string"
-}
removedOutput schema / properties / what_would_break
Removed value: -{
- "type": "string"
-}
changedOutput schema / required
Previous value: -[
- "summary",
- "tool",
- "ok",
- "effective",
- "conflicts",
- "what_changed",
- "what_would_break",
- "what_to_do_next",
- "full_report"
-]New value: +[
+ "ok",
+ "composition_valid",
+ "conflicts_count",
+ "summary"
+]