{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Document Review Findings",
  "description": "Structured output schema for document review persona agents",
  "type": "object",
  "required": ["reviewer", "findings", "residual_risks", "deferred_questions"],
  "properties": {
    "reviewer": {
      "type": "string",
      "description": "Persona name that produced this output (e.g., 'coherence', 'feasibility', 'product-lens')"
    },
    "findings": {
      "type": "array",
      "description": "List of document review findings. Empty array if no issues found.",
      "items": {
        "type": "object",
        "required": [
          "title",
          "severity",
          "section",
          "why_it_matters",
          "autofix_class",
          "confidence",
          "evidence"
        ],
        "properties": {
          "title": {
            "type": "string",
            "description": "Short, specific issue title. 10 words or fewer.",
            "maxLength": 100
          },
          "severity": {
            "type": "string",
            "enum": ["P0", "P1", "P2", "P3"],
            "description": "Issue severity level"
          },
          "section": {
            "type": "string",
            "description": "Document section where the issue appears (e.g., 'Requirements Trace', 'Implementation Unit 3', 'Overview')"
          },
          "why_it_matters": {
            "type": "string",
            "description": "Impact statement -- not 'what is wrong' but 'what goes wrong if not addressed'"
          },
          "autofix_class": {
            "type": "string",
            "enum": ["auto", "present"],
            "description": "How this issue should be handled. auto = local deterministic fix the orchestrator can apply without asking (terminology, formatting, cross-references). present = requires user judgment."
          },
          "suggested_fix": {
            "type": ["string", "null"],
            "description": "Concrete fix text. Omit or null if no good fix is obvious -- a bad suggestion is worse than none."
          },
          "confidence": {
            "type": "number",
            "description": "Reviewer confidence in this finding, calibrated per persona",
            "minimum": 0.0,
            "maximum": 1.0
          },
          "evidence": {
            "type": "array",
            "description": "Quoted text from the document that supports this finding. At least 1 item.",
            "items": { "type": "string" },
            "minItems": 1
          }
        }
      }
    },
    "residual_risks": {
      "type": "array",
      "description": "Risks the reviewer noticed but could not confirm as findings (below confidence threshold)",
      "items": { "type": "string" }
    },
    "deferred_questions": {
      "type": "array",
      "description": "Questions that should be resolved in a later workflow stage (planning, implementation)",
      "items": { "type": "string" }
    }
  },

  "_meta": {
    "confidence_thresholds": {
      "suppress": "Below 0.50 -- do not report. Finding is speculative noise.",
      "flag": "0.50-0.69 -- include only when the persona's calibration says the issue is actionable at that confidence.",
      "report": "0.70+ -- report with full confidence."
    },
    "severity_definitions": {
      "P0": "Contradictions or gaps that would cause building the wrong thing. Must fix before proceeding.",
      "P1": "Significant gap likely hit during planning or implementation. Should fix.",
      "P2": "Moderate issue with meaningful downside. Fix if straightforward.",
      "P3": "Minor improvement. User's discretion."
    },
    "autofix_classes": {
      "auto": "Local, deterministic document fix: terminology consistency, formatting, cross-reference correction. Must be unambiguous and not change the document's meaning.",
      "present": "Requires user judgment -- strategic questions, tradeoffs, meaning-changing fixes, or informational findings."
    }
  }
}
