{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/lenz-io/json-schema/lenz-io-review-issues-out-schema.json",
  "title": "ReviewIssuesOut",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/lenz-io-openapi.json#/components/schemas/ReviewIssuesOut",
  "properties": {
    "review_id": {
      "title": "Review Id",
      "type": "string"
    },
    "status": {
      "description": "verifying: deep checks or citation checks are running. cancelled: you cancelled it (POST /reviews/{review_id}/cancel); only what it delivered before that is charged.",
      "enum": [
        "queued",
        "assessing",
        "verifying",
        "completed",
        "failed",
        "cancelled"
      ],
      "title": "Status",
      "type": "string"
    },
    "outcome": {
      "anyOf": [
        {
          "enum": [
            "clean",
            "issues_found",
            "incomplete",
            "unchecked"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Null until terminal. clean covers the selected claims at the policy's chosen depth. issues_found with an empty issues[] means the rows are in citation_issues[]. A deep check that reads \"No Public Record\" is an issue (not on the public record).",
      "title": "Outcome"
    },
    "created_at": {
      "title": "Created At",
      "type": "string"
    },
    "completed_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Completed At"
    },
    "language": {
      "description": "The language the review is written in, as an ISO 639-1 code. `auto` only while a review sent with `language: \"auto\"` on a draft that is one URL has not read its page yet; then the detected code, or `en` when the page could not be read.",
      "title": "Language",
      "type": "string"
    },
    "policy": {
      "$ref": "#/$defs/ReviewPolicyOut"
    },
    "summary": {
      "$ref": "#/$defs/ReviewSummaryOut"
    },
    "credits": {
      "$ref": "#/$defs/ReviewCreditsOut"
    },
    "poll_after_seconds": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Poll After Seconds"
    },
    "issues": {
      "items": {
        "$ref": "#/$defs/ReviewIssueOut"
      },
      "title": "Issues",
      "type": "array"
    },
    "failures": {
      "items": {
        "$ref": "#/$defs/ReviewFailedRowOut"
      },
      "title": "Failures",
      "type": "array"
    },
    "citation_issues": {
      "default": [],
      "description": "Citations whose source does not say what the draft says, the most serious first; partly_supported rows are not issues and are only in citations[]. [] when the check was not asked.",
      "items": {
        "$ref": "#/$defs/ReviewCitationIssueOut"
      },
      "title": "Citation Issues",
      "type": "array"
    },
    "citation_failures": {
      "default": [],
      "items": {
        "$ref": "#/$defs/ReviewCitationFailedRowOut"
      },
      "title": "Citation Failures",
      "type": "array"
    },
    "more_claims": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Claims found past max_assessments, in the draft's order: found but not checked; send them in a later request to check them. Null until the draft is read.",
      "title": "More Claims"
    },
    "more_claim_locations": {
      "anyOf": [
        {
          "items": {
            "$ref": "#/$defs/ClaimLocationOut"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Where the draft makes each of `more_claims`, in the same order: `{claim, positions}`, the shape `/extract` returns with `locate: true` (see a claim row's `positions`). Null until the draft is read.",
      "title": "More Claim Locations"
    },
    "more_citations": {
      "anyOf": [
        {
          "items": {
            "$ref": "#/$defs/ReviewMoreCitationOut"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Citations found past the ones selected (up to 100): found but not checked; send them in a later request to check them. Null until the draft is read.",
      "title": "More Citations"
    },
    "failure": {
      "anyOf": [
        {
          "$ref": "#/$defs/FailureOut"
        },
        {
          "type": "null"
        }
      ]
    },
    "view": {
      "const": "issues",
      "title": "View",
      "type": "string"
    }
  },
  "required": [
    "review_id",
    "status",
    "outcome",
    "created_at",
    "completed_at",
    "language",
    "policy",
    "summary",
    "credits",
    "poll_after_seconds",
    "issues",
    "failures",
    "failure",
    "view"
  ],
  "type": "object",
  "$defs": {
    "ClaimLocationOut": {
      "properties": {
        "claim": {
          "description": "The claim, exactly as it appears in the claim list it belongs to.",
          "title": "Claim",
          "type": "string"
        },
        "positions": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/PositionOut"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Every place the text makes the claim, in text order, at most 10. `null` only when this claim could not be placed (on /extract every returned claim was placed).",
          "title": "Positions"
        }
      },
      "required": [
        "claim",
        "positions"
      ],
      "title": "ClaimLocationOut",
      "type": "object"
    },
    "FailureOut": {
      "description": "Why an item failed, and what to do next. The same block everywhere an\nitem fails: a verification, an /assess row, a review, a review's claim\nrows and citation checks.\n\n``code`` is what failed, ``detail`` one sentence on it (the same sentence\nfor the same code on every endpoint), ``hint`` what to send next (null\nwhen there is nothing to change), ``failure_class`` why, ``retryable``\nwhether sending the same request again can succeed, ``docs_url`` where\nthat class is explained.\n\nAPI version ``2026-05-13`` sends each endpoint's earlier fields instead\n(flat ``error`` / ``failure_reason`` on a verification, ``error_code`` /\n``hint`` on an /assess row, ``failure.failure_reason`` on a review).",
      "properties": {
        "code": {
          "description": "What failed, one vocabulary everywhere: `no_checkable_claim`, `page_unreadable`, `upstream_unavailable`, `internal`, `cancelled`, `no_citations`, `insufficient_credits` (a verification only ever says the first, the third, the fourth and `cancelled`). Branch on `retryable` for whether to resend, and on the input codes for what to say; fall through on a value you do not know. `no_checkable_claim`: no claim in the input could be checked against public evidence (an opinion, a forecast, a claim about a private person, a statement whose only source is unidentified; on a review, also claims found that could not be traced back to the text); `hint` says which. `page_unreadable`: the link /review was sent could not be read. Version `2026-05-13` spells `no_checkable_claim` as `no_claim` (/assess, /review) or `not_a_claim` (/extract, a verification), and keeps the earlier causes as codes (`timeout`, `framing_failed`, `assessment_failed`, `citation_check_failed`, `invalid_input`).",
          "title": "Code",
          "type": "string"
        },
        "detail": {
          "description": "The cause, in one sentence (out of time, no row could be assessed, ...); the same sentence for the same cause everywhere.",
          "title": "Detail",
          "type": "string"
        },
        "hint": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "What to send next; null when there is nothing to change.",
          "title": "Hint"
        },
        "failure_class": {
          "enum": [
            "upstream_unavailable",
            "invalid_input",
            "cancelled",
            "internal"
          ],
          "title": "Failure Class",
          "type": "string"
        },
        "retryable": {
          "title": "Retryable",
          "type": "boolean"
        },
        "docs_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Docs Url"
        }
      },
      "required": [
        "code",
        "detail",
        "failure_class",
        "retryable",
        "docs_url"
      ],
      "title": "FailureOut",
      "type": "object"
    },
    "PositionOut": {
      "properties": {
        "start": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "description": "Where the passage starts in `text` as you sent it, in Unicode code points (not UTF-16 units or bytes). Half-open with `end`. `null` when `text` was a URL: the page is not returned, so there is nothing to index, and `text` carries the passage instead.",
          "title": "Start"
        },
        "end": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "description": "Where the passage ends, exclusive; `null` as for `start`.",
          "title": "End"
        },
        "text": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "The passage itself, as it appears in the text. `null` on a citation position, whose row already carries the statement.",
          "title": "Text"
        }
      },
      "required": [
        "start",
        "end",
        "text"
      ],
      "title": "PositionOut",
      "type": "object"
    },
    "ReviewAssessmentCountsOut": {
      "properties": {
        "completed": {
          "title": "Completed",
          "type": "integer"
        },
        "failed": {
          "title": "Failed",
          "type": "integer"
        }
      },
      "required": [
        "completed",
        "failed"
      ],
      "title": "ReviewAssessmentCountsOut",
      "type": "object"
    },
    "ReviewCitationCountsOut": {
      "description": "Three disjoint counts; once every check has ended they add up to citations_selected.",
      "properties": {
        "checked": {
          "description": "A finding other than unchecked.",
          "title": "Checked",
          "type": "integer"
        },
        "unchecked": {
          "description": "Could not be checked, for a reason of the page or the draft.",
          "title": "Unchecked",
          "type": "integer"
        },
        "failed": {
          "description": "No finding, for a reason of ours.",
          "title": "Failed",
          "type": "integer"
        }
      },
      "required": [
        "checked",
        "unchecked",
        "failed"
      ],
      "title": "ReviewCitationCountsOut",
      "type": "object"
    },
    "ReviewCitationFailedRowOut": {
      "properties": {
        "citation_index": {
          "title": "Citation Index",
          "type": "integer"
        },
        "reference": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Reference"
        },
        "cited_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Cited Url"
        },
        "doi": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Doi"
        },
        "failure": {
          "anyOf": [
            {
              "$ref": "#/$defs/FailureOut"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "citation_index",
        "reference",
        "cited_url",
        "doi",
        "failure"
      ],
      "title": "ReviewCitationFailedRowOut",
      "type": "object"
    },
    "ReviewCitationIssueOut": {
      "properties": {
        "citation_index": {
          "title": "Citation Index",
          "type": "integer"
        },
        "reference": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Reference"
        },
        "cited_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Cited Url"
        },
        "doi": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Doi"
        },
        "statement": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Statement"
        },
        "quotes": {
          "default": [],
          "items": {
            "type": "string"
          },
          "title": "Quotes",
          "type": "array"
        },
        "position": {
          "anyOf": [
            {
              "$ref": "#/$defs/PositionOut"
            },
            {
              "type": "null"
            }
          ]
        },
        "finding": {
          "enum": [
            "doi_not_found",
            "page_not_found",
            "contradicted",
            "quote_not_in_source",
            "not_in_source",
            "partly_supported",
            "metadata_mismatch",
            "supported",
            "unchecked"
          ],
          "title": "Finding",
          "type": "string"
        },
        "source": {
          "anyOf": [
            {
              "enum": [
                "doi",
                "page",
                "support",
                "quote",
                "metadata"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Source"
        },
        "snippet": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Set only when source is support.",
          "title": "Snippet"
        },
        "rationale": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Set only when source is support.",
          "title": "Rationale"
        },
        "metadata_differences": {
          "default": [],
          "items": {
            "$ref": "#/$defs/ReviewMetadataDifferenceOut"
          },
          "title": "Metadata Differences",
          "type": "array"
        },
        "missing_quote": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Set only when finding is quote_not_in_source.",
          "title": "Missing Quote"
        },
        "page_title": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Page Title"
        },
        "failure": {
          "anyOf": [
            {
              "$ref": "#/$defs/FailureOut"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "citation_index",
        "reference",
        "cited_url",
        "doi",
        "statement",
        "position",
        "finding",
        "source",
        "snippet",
        "rationale",
        "page_title",
        "failure"
      ],
      "title": "ReviewCitationIssueOut",
      "type": "object"
    },
    "ReviewCreditsOut": {
      "properties": {
        "charged": {
          "description": "Net credits this review cost the account, read from the ledger. Authoritative once no deep check is running.",
          "title": "Charged",
          "type": "integer"
        }
      },
      "required": [
        "charged"
      ],
      "title": "ReviewCreditsOut",
      "type": "object"
    },
    "ReviewEscalationOut": {
      "properties": {
        "matched_rules": {
          "items": {
            "enum": [
              "verdict",
              "confidence"
            ],
            "type": "string"
          },
          "title": "Matched Rules",
          "type": "array"
        },
        "disposition": {
          "enum": [
            "not_selected",
            "planned",
            "cap",
            "credits",
            "account_cap"
          ],
          "title": "Disposition",
          "type": "string"
        }
      },
      "required": [
        "matched_rules",
        "disposition"
      ],
      "title": "ReviewEscalationOut",
      "type": "object"
    },
    "ReviewFailedRowOut": {
      "properties": {
        "claim_index": {
          "title": "Claim Index",
          "type": "integer"
        },
        "claim": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Claim"
        },
        "stage": {
          "enum": [
            "assessment",
            "verification"
          ],
          "title": "Stage",
          "type": "string"
        },
        "failure": {
          "anyOf": [
            {
              "$ref": "#/$defs/FailureOut"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "claim_index",
        "claim",
        "stage",
        "failure"
      ],
      "title": "ReviewFailedRowOut",
      "type": "object"
    },
    "ReviewIssueOut": {
      "properties": {
        "claim_index": {
          "title": "Claim Index",
          "type": "integer"
        },
        "claim": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Claim"
        },
        "verified_claim": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Verified Claim"
        },
        "verdict": {
          "enum": [
            "True",
            "Mostly True",
            "Mixed",
            "Mostly False",
            "False",
            "No Public Record"
          ],
          "title": "Verdict",
          "type": "string"
        },
        "confidence": {
          "anyOf": [
            {
              "enum": [
                "low",
                "medium",
                "high"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Confidence"
        },
        "source": {
          "enum": [
            "assessment",
            "verification"
          ],
          "title": "Source",
          "type": "string"
        },
        "verification_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Verification Id"
        },
        "verification_status": {
          "anyOf": [
            {
              "enum": [
                "processing",
                "completed",
                "failed",
                "cancelled"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Verification Status"
        },
        "verification_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Verification Url"
        },
        "url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Url"
        },
        "escalation": {
          "anyOf": [
            {
              "$ref": "#/$defs/ReviewEscalationOut"
            },
            {
              "type": "null"
            }
          ]
        },
        "key_finding": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Key Finding"
        },
        "rationale": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Rationale"
        },
        "suggested_rewrite": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "The rewrite the row's edits come from: its completed deep check's, else (with `escalate.suggest_edits`) its quick check's; `source` says which. A suggestion, not itself verified.",
          "title": "Suggested Rewrite"
        },
        "failure": {
          "anyOf": [
            {
              "$ref": "#/$defs/FailureOut"
            },
            {
              "type": "null"
            }
          ]
        },
        "suggested_edits": {
          "anyOf": [
            {
              "$ref": "#/$defs/ReviewSuggestedEditsOut"
            },
            {
              "type": "null"
            }
          ],
          "description": "A copy of its claim row's `suggested_edits`. Asked with `escalate.suggest_edits`. They follow the row's suggested rewrite: its completed deep check's, else its quick check's (see the issue's `source`). `null` when not asked, when the claim has no suggested rewrite, when the draft's passage is not in a supported language or could not be placed, or once a zero-retention draft is gone. Guide: https://lenz.io/docs/citations#suggested-edits"
        }
      },
      "required": [
        "claim_index",
        "claim",
        "verified_claim",
        "verdict",
        "confidence",
        "source",
        "verification_id",
        "verification_status",
        "verification_url",
        "url",
        "escalation",
        "key_finding",
        "rationale",
        "suggested_rewrite",
        "failure"
      ],
      "title": "ReviewIssueOut",
      "type": "object"
    },
    "ReviewMetadataDifferenceOut": {
      "properties": {
        "field": {
          "enum": [
            "title",
            "authors",
            "year",
            "journal"
          ],
          "title": "Field",
          "type": "string"
        },
        "cited": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Cited"
        },
        "registered": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Registered"
        }
      },
      "required": [
        "field"
      ],
      "title": "ReviewMetadataDifferenceOut",
      "type": "object"
    },
    "ReviewMoreCitationOut": {
      "description": "A citation found in the draft and not checked by this request.",
      "properties": {
        "index": {
          "title": "Index",
          "type": "integer"
        },
        "reference": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Reference"
        },
        "cited_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Cited Url"
        },
        "doi": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Doi"
        },
        "sentence": {
          "description": "The draft sentence around the citation, at most 1,000 characters.",
          "title": "Sentence",
          "type": "string"
        },
        "position": {
          "anyOf": [
            {
              "$ref": "#/$defs/PositionOut"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "index",
        "sentence"
      ],
      "title": "ReviewMoreCitationOut",
      "type": "object"
    },
    "ReviewPolicyOut": {
      "properties": {
        "verdicts": {
          "items": {
            "enum": [
              "True",
              "Mostly True",
              "Mixed",
              "Mostly False",
              "False",
              "No Public Record"
            ],
            "type": "string"
          },
          "title": "Verdicts",
          "type": "array"
        },
        "confidence": {
          "items": {
            "enum": [
              "low",
              "medium",
              "high"
            ],
            "type": "string"
          },
          "title": "Confidence",
          "type": "array"
        },
        "max_verifications": {
          "title": "Max Verifications",
          "type": "integer"
        },
        "max_assessments": {
          "title": "Max Assessments",
          "type": "integer"
        },
        "depth": {
          "enum": [
            "standard",
            "low"
          ],
          "title": "Depth",
          "type": "string"
        },
        "max_citations": {
          "default": 0,
          "title": "Max Citations",
          "type": "integer"
        },
        "suggest_edits": {
          "default": false,
          "title": "Suggest Edits",
          "type": "boolean"
        }
      },
      "required": [
        "verdicts",
        "confidence",
        "max_verifications",
        "max_assessments",
        "depth"
      ],
      "title": "ReviewPolicyOut",
      "type": "object"
    },
    "ReviewSuggestedEditsOut": {
      "description": "The smallest edits to the draft that make it say what the claim's deep\ncheck rewrite says, in the draft's language. Review content, never part of\nthe verification: a verification is shared, your draft is not.",
      "properties": {
        "status": {
          "description": "`pending` while they are computed (poll the review); `completed` once SETTLED, which includes settling on no edit (`edits: []`).",
          "enum": [
            "pending",
            "completed"
          ],
          "title": "Status",
          "type": "string"
        },
        "edits": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/SuggestedEditOut"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "`null` while pending; `[]` when settled with no edit (the passage could not be edited safely, no edit passed the checks, or computing it failed on our side). Not itself verified: review it before you use it.",
          "title": "Edits"
        }
      },
      "required": [
        "status",
        "edits"
      ],
      "title": "ReviewSuggestedEditsOut",
      "type": "object"
    },
    "ReviewSummaryOut": {
      "properties": {
        "claims_found": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "description": "Claims found in the draft and traced back to it; null until the draft is read.",
          "title": "Claims Found"
        },
        "claims_selected": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "description": "Claims this review works on; null until the draft is read.",
          "title": "Claims Selected"
        },
        "claim_limit": {
          "description": "The resolved max_assessments.",
          "title": "Claim Limit",
          "type": "integer"
        },
        "claim_limit_exceeded": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "True when claims_found is more than claim_limit: the rest are in more_claims, found and not checked. False when every claim found was selected. Null until the draft is read.",
          "title": "Claim Limit Exceeded"
        },
        "input_truncated": {
          "title": "Input Truncated",
          "type": "boolean"
        },
        "assessments": {
          "anyOf": [
            {
              "$ref": "#/$defs/ReviewAssessmentCountsOut"
            },
            {
              "type": "null"
            }
          ]
        },
        "verifications": {
          "anyOf": [
            {
              "$ref": "#/$defs/ReviewVerificationCountsOut"
            },
            {
              "type": "null"
            }
          ]
        },
        "issues": {
          "title": "Issues",
          "type": "integer"
        },
        "citations_found": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "description": "Citations with a URL or DOI in the text the review read (after the 50,000 character cut); null until the draft is read, or when the check was not asked.",
          "title": "Citations Found"
        },
        "citations_selected": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "description": "The ones this review works on: the first in the draft's order.",
          "title": "Citations Selected"
        },
        "citation_limit": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "description": "The resolved cap.",
          "title": "Citation Limit"
        },
        "citation_limit_exceeded": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "True when citations_found is more than citation_limit: the rest are in more_citations, found and not checked. False when every citation found was selected, exactly citation_limit included. Null until the text is read.",
          "title": "Citation Limit Exceeded"
        },
        "citation_checks": {
          "anyOf": [
            {
              "$ref": "#/$defs/ReviewCitationCountsOut"
            },
            {
              "type": "null"
            }
          ]
        },
        "citation_issues": {
          "default": 0,
          "description": "Rows in citation_issues[]; 0 when the check was not asked.",
          "title": "Citation Issues",
          "type": "integer"
        },
        "citations_skipped": {
          "anyOf": [
            {
              "enum": [
                "url_input",
                "switched_off",
                "insufficient_credits"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Why the check was asked for and did not run.",
          "title": "Citations Skipped"
        },
        "claim_limit_reached": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "Sent only to callers on `2026-05-13`; use `claim_limit_exceeded`. It was true when `claims_found` was at least `claim_limit`, not more than it.",
          "deprecated": true
        },
        "citation_limit_reached": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "Sent only to callers on `2026-05-13`; use `citation_limit_exceeded`.",
          "deprecated": true
        }
      },
      "required": [
        "claims_found",
        "claims_selected",
        "claim_limit",
        "claim_limit_exceeded",
        "input_truncated",
        "assessments",
        "verifications",
        "issues"
      ],
      "title": "ReviewSummaryOut",
      "type": "object"
    },
    "ReviewVerificationCountsOut": {
      "properties": {
        "planned": {
          "title": "Planned",
          "type": "integer"
        },
        "completed": {
          "title": "Completed",
          "type": "integer"
        },
        "failed": {
          "title": "Failed",
          "type": "integer"
        }
      },
      "required": [
        "planned",
        "completed",
        "failed"
      ],
      "title": "ReviewVerificationCountsOut",
      "type": "object"
    },
    "SuggestedEditOut": {
      "description": "One replacement in the draft: a `PositionOut` whose span is always\nin `text` as you sent it.",
      "properties": {
        "start": {
          "description": "Where the replaced span starts in `text` as you sent it, in Unicode code points. Half-open with `end`, inside `positions[position]`.",
          "title": "Start",
          "type": "integer"
        },
        "end": {
          "description": "Where the replaced span ends, exclusive.",
          "title": "End",
          "type": "integer"
        },
        "text": {
          "description": "Exactly the slice of `text` at `start`..`end`, as you sent it.",
          "title": "Text",
          "type": "string"
        },
        "position": {
          "description": "Which of the claim row's `positions` the edit sits in (index); a grouping hint.",
          "minimum": 0,
          "title": "Position",
          "type": "integer"
        },
        "replacement": {
          "description": "What replaces it; '' deletes it.",
          "title": "Replacement",
          "type": "string"
        }
      },
      "required": [
        "start",
        "end",
        "text",
        "position",
        "replacement"
      ],
      "title": "SuggestedEditOut",
      "type": "object"
    }
  }
}