{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/domfelipe/vibeflow-n8n/schemas/vibeflow-config.schema.json", "title": "Vibeflow configuration", "type": "object", "additionalProperties": false, "properties": { "$schema": { "type": "string" }, "rules": { "type": "object", "additionalProperties": false, "properties": { "VF001": { "$ref": "#/$defs/severity" }, "VF002": { "$ref": "#/$defs/severity" }, "VF003": { "$ref": "#/$defs/severity" }, "VF004": { "$ref": "#/$defs/severity" }, "VF005": { "$ref": "#/$defs/severity" }, "VF006": { "$ref": "#/$defs/severity" }, "VF007": { "$ref": "#/$defs/severity" }, "VF008": { "$ref": "#/$defs/severity" }, "VF009": { "$ref": "#/$defs/severity" }, "VF010": { "$ref": "#/$defs/severity" }, "VF011": { "$ref": "#/$defs/severity" }, "VF012": { "$ref": "#/$defs/severity" }, "VF013": { "$ref": "#/$defs/severity" } } }, "terms": { "type": "object", "additionalProperties": false, "properties": { "killSwitch": { "$ref": "#/$defs/terms" }, "humanHandoff": { "$ref": "#/$defs/terms" }, "idempotency": { "$ref": "#/$defs/terms" }, "approval": { "$ref": "#/$defs/terms" }, "audit": { "$ref": "#/$defs/terms" }, "failureNotification": { "$ref": "#/$defs/terms" }, "outcomeMoney": { "$ref": "#/$defs/terms" }, "outcomeCustomer": { "$ref": "#/$defs/terms" }, "outcomePrivileged": { "$ref": "#/$defs/terms" }, "outcomeData": { "$ref": "#/$defs/terms" }, "recovery": { "$ref": "#/$defs/terms" } } }, "bannedNodeTypes": { "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 200 }, "maxItems": 1000, "uniqueItems": true }, "outcomeContracts": { "type": "object", "description": "Static policy evidence keyed by the exact high-impact action node name.", "maxProperties": 1000, "propertyNames": { "minLength": 1, "maxLength": 200 }, "additionalProperties": { "$ref": "#/$defs/outcomeContract" } } }, "$defs": { "severity": { "enum": ["error", "warning", "off"] }, "terms": { "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 100 }, "minItems": 1, "maxItems": 100, "uniqueItems": true }, "nodeReference": { "type": "string", "minLength": 1, "maxLength": 200 }, "outcomeContract": { "type": "object", "additionalProperties": false, "required": ["impact"], "properties": { "impact": { "enum": ["money", "customer", "privileged", "data"] }, "approvalNode": { "$ref": "#/$defs/nodeReference" }, "auditNode": { "$ref": "#/$defs/nodeReference" }, "failureNotificationNode": { "$ref": "#/$defs/nodeReference" }, "amountGuard": { "type": "object", "additionalProperties": false, "required": ["node", "maximum", "currency"], "properties": { "node": { "$ref": "#/$defs/nodeReference" }, "maximum": { "type": "number", "exclusiveMinimum": 0 }, "currency": { "type": "string", "pattern": "^[A-Z]{3}$" } } }, "counterpartyGuard": { "type": "object", "additionalProperties": false, "required": ["node", "allowed"], "properties": { "node": { "$ref": "#/$defs/nodeReference" }, "allowed": { "type": "array", "minItems": 1, "maxItems": 100, "uniqueItems": true, "items": { "type": "string", "minLength": 1, "maxLength": 100 } } } }, "recovery": { "type": "object", "additionalProperties": false, "required": ["strategy", "node"], "properties": { "strategy": { "enum": ["compensate", "rollback", "replay"] }, "node": { "$ref": "#/$defs/nodeReference" } } } } } } }