{
  "version": "review-schema-c1",
  "type": "object",
  "additionalProperties": false,
  "required": ["verdict", "findings", "questions_for_human", "claim_assessments", "coverage_assessments", "threshold_assessments"],
  "properties": {
    "verdict": {
      "type": "string",
      "enum": ["revise", "clean"]
    },
    "findings": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["severity", "title", "detail", "suggestion"],
        "properties": {
          "severity": { "type": "string", "enum": ["high", "medium", "low"] },
          "title": { "type": "string", "description": "Short stable title — reuse the exact same title if re-raising an unresolved finding." },
          "detail": { "type": "string", "description": "What is wrong, quoting the exact passage from the draft." },
          "suggestion": { "type": "string", "description": "The concrete fix." }
        }
      }
    },
    "questions_for_human": {
      "type": "array",
      "items": { "type": "string" },
      "description": "Plain-English questions only the goal owner can answer. Empty when none."
    },
    "claim_assessments": {
      "type": "array",
      "description": "Exactly one assessment for every source marker in the supplied claim ledger. Empty when the draft has no cited claims.",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["marker", "decision", "evidence"],
        "properties": {
          "marker": { "type": "string", "pattern": "^\\[(?:H)?[0-9]+\\]$" },
          "decision": { "type": "string", "enum": ["supported", "unsupported", "unchecked"] },
          "evidence": { "type": "string", "description": "A concise supporting or contradicting passage, or the reason the source could not be checked." }
        }
      }
    },
    "coverage_assessments": {
      "type": "array",
      "description": "Exactly one assessment for every deterministically extracted acceptance criterion. Empty only when no contract criteria were supplied.",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["criterion_id", "decision", "evidence"],
        "properties": {
          "criterion_id": { "type": "string", "pattern": "^C[1-9][0-9]*$" },
          "decision": { "type": "string", "enum": ["met", "unmet", "unclear"] },
          "evidence": { "type": "string", "description": "A concise passage or observation proving the criterion met/unmet, or the reason it remains unclear." }
        }
      }
    },
    "threshold_assessments": {
      "type": "array",
      "description": "Exactly one assessment for every proposed-threshold line in the supplied ledger — lines the citation gate exempted because they are marked as decision policy. Empty when none were exempted.",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["id", "decision", "evidence"],
        "properties": {
          "id": { "type": "string", "pattern": "^T[1-9][0-9]*$" },
          "decision": { "type": "string", "enum": ["policy", "observed"] },
          "evidence": { "type": "string", "description": "Why the line is a genuine proposed decision policy, or which number it presents as real/achieved/observed performance (a statistic wearing the marker to dodge citation)." }
        }
      }
    }
  }
}
