{
  "schema_spec_version": "1.0.0",
  "schema_type": "ai_protocol_schema",
  "updated_at": "2026-02-04T15:01:10Z",
  "rules": {
    "machine_first": true,
    "no_hardcoded_long_text": true,
    "no_mixed_layers": true,
    "must_include_contract_fields": true
  },
  "contract_required_fields": [
    "spec_version",
    "document_type",
    "id",
    "intended_use",
    "updated_at"
  ],
  "validation": {
    "strict_json": true,
    "unknown_fields_policy": "allow_with_prefix_x_",
    "reserved_prefixes": [
      "x_",
      "_"
    ]
  },
  "id": "schema.visual_style.v1",
  "document_type": "schema.visual_style",
  "title": "Visual Style Schema",
  "intended_use": "validate_visual_style_documents",
  "required": {
    "spec_version": "string",
    "document_type": "string",
    "style_id": "string",
    "display_name": "string",
    "updated_at": "string",
    "controls": "object",
    "generation": "object"
  },
  "fields": {
    "controls": {
      "required": [
        "color",
        "lighting",
        "composition"
      ],
      "types": {
        "color": "object",
        "lighting": "object",
        "composition": "object",
        "subject": "object",
        "setting": "object"
      }
    },
    "generation": {
      "required": [
        "keep",
        "avoid",
        "negatives",
        "defaults"
      ],
      "types": {
        "keep": "array[string]",
        "avoid": "array[string]",
        "negatives": "array[string]",
        "defaults": "object"
      }
    },
    "assertions": {
      "types": "array[object]",
      "optional": true
    }
  },
  "hard_constraints": [
    "controls.color.accent.accent_count_max must be integer",
    "generation.keep/avoid/negatives must be arrays of strings"
  ]
}