{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://agentdirective.org/schemas/review-report-v1.schema.json",
  "title": "AgentDirective Review Report v1",
  "description": "A bounded review of a directive, agent-reported status, and explicitly supplied sanitized evidence.",
  "type": "object",
  "additionalProperties": false,
  "required": ["report_id", "report_version", "directive_id", "directive_version", "reviewed_at", "review_scope", "inputs", "summary", "findings", "limitations", "disclaimer"],
  "properties": {
    "$schema": { "type": "string", "format": "uri-reference" },
    "report_id": { "type": "string", "pattern": "^RR-[A-Z0-9]{6,32}$" },
    "report_version": { "$ref": "#/$defs/semver" },
    "directive_id": { "type": "string", "pattern": "^AD-[A-Z0-9]{6,32}$" },
    "directive_version": { "$ref": "#/$defs/semver" },
    "methodology_version": { "$ref": "#/$defs/semver" },
    "reviewed_at": { "type": "string", "format": "date-time" },
    "review_scope": {
      "type": "object", "additionalProperties": false, "required": ["mode", "checks_performed", "source_code_reviewed", "runtime_reviewed"],
      "properties": {
        "mode": { "enum": ["sanitized_metadata", "extended_evidence", "source_review", "runtime_review"] },
        "checks_performed": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "enum": ["schema_validity", "directive_status_coverage", "evidence_presence", "test_summary_consistency", "integrity_digest", "limitation_completeness", "source_inspection", "runtime_observation", "other"] } },
        "source_code_reviewed": { "type": "boolean" },
        "runtime_reviewed": { "type": "boolean" },
        "notes": { "type": "string", "maxLength": 2000 }
      }
    },
    "inputs": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/input" } },
    "summary": {
      "type": "object", "additionalProperties": false, "required": ["total_findings", "by_result"],
      "properties": {
        "total_findings": { "type": "integer", "minimum": 0 },
        "by_result": {
          "type": "object", "additionalProperties": false, "required": ["supported", "unsupported", "contradicted", "unverifiable", "not_reviewed"],
          "properties": { "supported": { "type": "integer", "minimum": 0 }, "unsupported": { "type": "integer", "minimum": 0 }, "contradicted": { "type": "integer", "minimum": 0 }, "unverifiable": { "type": "integer", "minimum": 0 }, "not_reviewed": { "type": "integer", "minimum": 0 } }
        },
        "narrative": { "type": "string", "maxLength": 3000 }
      }
    },
    "findings": { "type": "array", "items": { "$ref": "#/$defs/finding" } },
    "limitations": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1, "maxLength": 2000 } },
    "recommendations": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["id", "description", "priority", "requirement_refs"], "properties": { "id": { "type": "string", "pattern": "^REC-[A-Z0-9]{4,32}$" }, "description": { "type": "string", "minLength": 1, "maxLength": 2000 }, "priority": { "enum": ["low", "moderate", "high", "critical"] }, "requirement_refs": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/requirementId" } } } } },
    "disclaimer": { "type": "string", "minLength": 1, "maxLength": 3000 },
    "integrity": { "type": "object", "additionalProperties": false, "properties": { "algorithm": { "const": "sha256" }, "report_digest": { "$ref": "#/$defs/digest" } } }
  },
  "$defs": {
    "semver": { "type": "string", "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$" },
    "requirementId": { "type": "string", "pattern": "^[A-Z]{2,10}-[0-9]{3,6}-R[0-9]{1,4}$" },
    "digest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
    "path": { "type": "string", "minLength": 1, "maxLength": 500, "not": { "pattern": "^(?:[A-Za-z]:|/|\\\\)" } },
    "input": {
      "type": "object", "additionalProperties": false, "required": ["name", "kind", "accepted", "contains_source_code"],
      "properties": { "name": { "$ref": "#/$defs/path" }, "kind": { "enum": ["directive", "control_status", "control_events", "test_summary", "evidence_index", "other"] }, "digest": { "$ref": "#/$defs/digest" }, "accepted": { "type": "boolean" }, "contains_source_code": { "type": "boolean" }, "rejection_reason": { "type": "string", "maxLength": 1000 } }
    },
    "evidenceRef": {
      "type": "object", "additionalProperties": false, "required": ["type", "description"],
      "properties": { "type": { "enum": ["status_claim", "test_summary", "implementation_path", "telemetry_reference", "integrity_digest", "source_excerpt", "runtime_observation", "other"] }, "description": { "type": "string", "minLength": 1, "maxLength": 1000 }, "input_name": { "$ref": "#/$defs/path" }, "digest": { "$ref": "#/$defs/digest" } }
    },
    "finding": {
      "type": "object", "additionalProperties": false, "required": ["finding_id", "requirement_id", "reported_status", "result", "confidence", "basis", "evidence_examined", "limitations"],
      "properties": {
        "finding_id": { "type": "string", "pattern": "^FND-[A-Z0-9]{4,32}$" },
        "requirement_id": { "$ref": "#/$defs/requirementId" },
        "reported_status": { "enum": ["implemented", "partial", "unresolved", "not_applicable", "rejected_by_user", "missing"] },
        "result": { "enum": ["supported", "unsupported", "contradicted", "unverifiable", "not_reviewed"] },
        "confidence": { "enum": ["low", "moderate", "high"] },
        "basis": { "type": "string", "minLength": 1, "maxLength": 3000 },
        "evidence_examined": { "type": "array", "items": { "$ref": "#/$defs/evidenceRef" } },
        "missing_evidence": { "type": "array", "uniqueItems": true, "items": { "type": "string", "minLength": 1, "maxLength": 500 } },
        "limitations": { "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 2000 } }
      },
      "allOf": [
        { "if": { "properties": { "result": { "enum": ["unsupported", "unverifiable"] } }, "required": ["result"] }, "then": { "required": ["missing_evidence"], "properties": { "missing_evidence": { "minItems": 1 } } } }
      ]
    }
  }
}
