{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://swl-ses.dev/schemas/instinct.json",
  "title": "SWL Instinct",
  "description": "Schema de validacion para instintos YAML del sistema SWL",
  "type": "object",
  "required": ["version", "instintos"],
  "properties": {
    "version": { "type": "string" },
    "generado": { "type": "string" },
    "total_instintos": { "type": "integer", "minimum": 0 },
    "instintos": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["id", "pattern", "confidence", "scope", "status"],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^inst-\\d{3,}$",
            "description": "Identificador unico secuencial"
          },
          "pattern": {
            "type": "string",
            "minLength": 10,
            "maxLength": 500,
            "description": "Descripcion del patron observado"
          },
          "confidence": {
            "type": "number",
            "minimum": 0.0,
            "maximum": 1.0,
            "description": "Nivel de confianza (0.0 bajo, 1.0 certeza)"
          },
          "scope": {
            "type": "string",
            "enum": ["project", "domain", "global"],
            "description": "Alcance del instinto"
          },
          "source": {
            "type": "string",
            "description": "ID de sesion o 'manual'"
          },
          "evidence_count": {
            "type": "integer",
            "minimum": 0,
            "description": "Veces que el patron ha sido observado"
          },
          "last_validated": {
            "type": "string",
            "description": "Fecha de ultima validacion (YYYY-MM-DD)"
          },
          "contradictions": {
            "type": "integer",
            "minimum": 0,
            "description": "Veces que el patron ha sido contradicho"
          },
          "status": {
            "type": "string",
            "enum": ["active", "degraded", "promoted", "archived"],
            "description": "Estado actual del instinto"
          },
          "tags": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Etiquetas para clasificacion"
          },
          "created_at": {
            "type": "string",
            "description": "Fecha de creacion (YYYY-MM-DD)"
          },
          "decay_half_life_days": {
            "type": "integer",
            "minimum": 1,
            "default": 90,
            "description": "Dias para que la confianza decaiga a la mitad. 90 dias por defecto."
          },
          "helpful_count": {
            "type": "integer",
            "minimum": 0,
            "default": 0,
            "description": "Numero de veces que el instinto fue util en una sesion"
          },
          "harmful_count": {
            "type": "integer",
            "minimum": 0,
            "default": 0,
            "description": "Numero de veces que el instinto guio a un resultado incorrecto"
          },
          "last_validated_at": {
            "type": "string",
            "description": "Timestamp ISO o YYYY-MM-DD de la ultima validacion via feedback (sustituye a last_validated en sistemas con scoring)"
          },
          "source_sessions": {
            "type": "array",
            "items": { "type": "string" },
            "uniqueItems": true,
            "description": "IDs de sesiones que contribuyeron a este instinto (para priorizacion por evidencia multiple)"
          },
          "source_agents": {
            "type": "array",
            "items": { "type": "string" },
            "uniqueItems": true,
            "description": "Nombres de agentes que validaron este instinto (cross-agent enrichment)"
          },
          "maturity": {
            "type": "string",
            "enum": ["candidate", "established", "proven", "deprecated"],
            "description": "Estado de maduracion derivado (computado, no persistente). Ver scripts/lib/scoring-instintos.js"
          }
        }
      }
    }
  }
}
