{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://sakibshuvo.github.io/Entroping/schemas/agent-review-bundle.v1.schema.json",
  "title": "Entroping Agent Review Bundle v1",
  "type": "object",
  "additionalProperties": false,
  "required": ["schema_version", "scope", "summary", "roles", "findings"],
  "properties": {
    "schema_version": {"const": "entroping.agent-review-bundle.v1"},
    "scope": {"type": "string"},
    "summary": {
      "type": "object",
      "additionalProperties": false,
      "required": ["status", "roles", "configured_roles", "manifests", "findings"],
      "properties": {
        "status": {"enum": ["pass", "attention", "fail"]},
        "roles": {"type": "integer", "minimum": 0},
        "configured_roles": {"type": "integer", "minimum": 0},
        "manifests": {"type": "integer", "minimum": 0},
        "findings": {"type": "integer", "minimum": 0}
      }
    },
    "roles": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "role",
          "configured",
          "configured_model",
          "configured_persona_source",
          "manifests"
        ],
        "properties": {
          "role": {"enum": ["builder", "breaker", "auditor"]},
          "configured": {"type": "boolean"},
          "configured_model": {"type": ["string", "null"]},
          "configured_persona_source": {"type": ["string", "null"]},
          "manifests": {
            "type": "array",
            "items": {"$ref": "#/$defs/manifest"}
          }
        }
      }
    },
    "findings": {
      "type": "array",
      "items": {"$ref": "#/$defs/finding"}
    }
  },
  "$defs": {
    "manifest": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "manifest_path",
        "generated_at",
        "command",
        "mode",
        "agent",
        "model",
        "provider",
        "persona_source_path",
        "persona_sha256",
        "output_paths",
        "tags",
        "validation_status",
        "structured_output_validated",
        "hurl_validated",
        "latency_ms",
        "prompt_tokens",
        "completion_tokens",
        "total_tokens",
        "estimated_cost_usd"
      ],
      "properties": {
        "manifest_path": {"type": "string"},
        "generated_at": {"type": "string", "format": "date-time"},
        "command": {
          "enum": ["architect build", "architect refactor", "architect audit"]
        },
        "mode": {"enum": ["create", "merge", "refactor", "review"]},
        "agent": {"enum": ["builder", "breaker", "auditor"]},
        "model": {"type": "string"},
        "provider": {"type": ["string", "null"]},
        "persona_source_path": {"type": "string"},
        "persona_sha256": {"type": "string"},
        "output_paths": {"type": "array", "items": {"type": "string"}},
        "tags": {"type": "array", "items": {"type": "string"}},
        "validation_status": {"enum": ["passed", "failed"]},
        "structured_output_validated": {"type": "boolean"},
        "hurl_validated": {"type": "boolean"},
        "latency_ms": {"type": "integer", "minimum": 0},
        "prompt_tokens": {"type": ["integer", "null"], "minimum": 0},
        "completion_tokens": {"type": ["integer", "null"], "minimum": 0},
        "total_tokens": {"type": ["integer", "null"], "minimum": 0},
        "estimated_cost_usd": {"type": ["number", "null"], "minimum": 0}
      }
    },
    "finding": {
      "type": "object",
      "additionalProperties": false,
      "required": ["kind", "severity", "message", "role", "manifest_path", "path"],
      "properties": {
        "kind": {
          "enum": [
            "missing_role_config",
            "missing_manifest",
            "invalid_manifest",
            "unsafe_manifest",
            "invalid_provider_output",
            "unvalidated_hurl",
            "output_path_conflict"
          ]
        },
        "severity": {"enum": ["error", "warning", "notice"]},
        "message": {"type": "string"},
        "role": {"enum": ["builder", "breaker", "auditor", null]},
        "manifest_path": {"type": ["string", "null"]},
        "path": {"type": ["string", "null"]}
      }
    }
  }
}
