{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://neosloc.github.io/neosloc/schema/report-v2.json",
  "title": "neosloc --json output",
  "description": "One report for one path; a list of reports and errors for several paths; or an error.",
  "oneOf": [
    {
      "$ref": "#/$defs/report"
    },
    {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "$ref": "#/$defs/report"
          },
          {
            "$ref": "#/$defs/error"
          }
        ]
      }
    },
    {
      "$ref": "#/$defs/error"
    }
  ],
  "$defs": {
    "report": {
      "type": "object",
      "properties": {
        "schema_version": {
          "const": 2
        },
        "target": {
          "type": "string",
          "description": "Absolute path of the assessed repository."
        },
        "inventory": {
          "type": "object",
          "properties": {
            "files": {
              "type": "integer",
              "minimum": 0
            },
            "source_files": {
              "type": "integer",
              "minimum": 0
            },
            "source_tokens": {
              "type": "integer",
              "minimum": 0
            },
            "languages": {
              "type": "object",
              "additionalProperties": {
                "type": "integer",
                "minimum": 0
              }
            },
            "git": {
              "type": "boolean"
            }
          },
          "required": [
            "files",
            "source_files",
            "source_tokens",
            "languages",
            "git"
          ],
          "additionalProperties": false
        },
        "surfaces": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/$defs/surfaces"
            }
          ]
        },
        "dimensions": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/dimension"
          }
        },
        "estimate": {
          "$ref": "#/$defs/estimate"
        },
        "not_implemented": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "value": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/$defs/value"
            }
          ]
        },
        "make_or_buy": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/$defs/make_or_buy"
            }
          ]
        },
        "agentic": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/$defs/agentic"
            }
          ],
          "description": "Present with --agentic or --judge."
        },
        "review": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/$defs/review"
            }
          ],
          "description": "Present with --review."
        },
        "spend": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "type": "object",
              "properties": {
                "usd": {
                  "type": "number"
                },
                "max_usd": {
                  "type": "number"
                },
                "unpriced_calls": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "required": [
                "usd",
                "max_usd",
                "unpriced_calls"
              ],
              "additionalProperties": false
            }
          ],
          "description": "Total model spend; present when an LLM evaluator ran."
        }
      },
      "required": [
        "schema_version",
        "target",
        "inventory",
        "surfaces",
        "dimensions",
        "estimate",
        "not_implemented",
        "value",
        "make_or_buy",
        "agentic",
        "review",
        "spend"
      ],
      "additionalProperties": false
    },
    "error": {
      "type": "object",
      "properties": {
        "schema_version": {
          "const": 2
        },
        "target": {
          "type": "string",
          "description": "The path the error is about, when there is one."
        },
        "error": {
          "type": "object",
          "properties": {
            "code": {
              "enum": [
                "usage",
                "unknown_dimension",
                "unknown_task",
                "bad_model_spec",
                "not_a_directory",
                "missing_dependency",
                "credentials",
                "provider_unreachable",
                "unknown_model",
                "model_unsupported",
                "interrupted",
                "internal"
              ]
            },
            "message": {
              "type": "string"
            },
            "exit_status": {
              "enum": [
                1,
                2,
                3,
                4,
                130
              ]
            },
            "details": {
              "type": "object"
            }
          },
          "required": [
            "code",
            "message",
            "exit_status",
            "details"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "schema_version",
        "error"
      ],
      "additionalProperties": false
    },
    "dimension": {
      "type": "object",
      "properties": {
        "key": {
          "enum": [
            "interface",
            "stability",
            "events",
            "identity",
            "portability",
            "ergonomics",
            "embeddability",
            "extensibility",
            "observability",
            "legibility"
          ]
        },
        "title": {
          "type": "string"
        },
        "question": {
          "type": "string"
        },
        "level": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 0,
          "maximum": 4,
          "description": "Best level among applicable surfaces; null when not applicable."
        },
        "level_name": {
          "enum": [
            "absent",
            "ad hoc",
            "partial",
            "solid",
            "exemplary",
            "n/a"
          ]
        },
        "applicable": {
          "type": "boolean"
        },
        "best_surface": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "service",
            "cli",
            "library",
            "desktop",
            "format",
            "frontend",
            "all",
            "none",
            null
          ]
        },
        "rationale": {
          "type": "string"
        },
        "evidence": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/evidence"
          },
          "description": "Met requirements of the best surface (signal = 'L<level> <id>')."
        },
        "gaps": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "First unmet requirement of each applicable surface."
        },
        "surfaces": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "level": {
                "type": "integer",
                "minimum": 0,
                "maximum": 4
              },
              "first_missing": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "id of the first unmet requirement."
              },
              "requirements": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "level": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 4
                    },
                    "id": {
                      "type": "string"
                    },
                    "text": {
                      "type": "string"
                    },
                    "met": {
                      "type": "boolean"
                    },
                    "evidence": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "path": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "detail": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "path",
                          "detail"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "note": {
                      "type": "string",
                      "description": "Why it isn't met (empty when met or unknown)."
                    }
                  },
                  "required": [
                    "level",
                    "id",
                    "text",
                    "met",
                    "evidence",
                    "note"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "level",
              "first_missing",
              "requirements"
            ],
            "additionalProperties": false
          },
          "description": "Ladder per applicable surface ('all' for universal dimensions)."
        },
        "metrics": {
          "type": "object",
          "description": "Measurements (open-ended)."
        }
      },
      "required": [
        "key",
        "title",
        "question",
        "level",
        "level_name",
        "applicable",
        "best_surface",
        "rationale",
        "evidence",
        "gaps",
        "surfaces",
        "metrics"
      ],
      "additionalProperties": false
    },
    "evidence": {
      "type": "object",
      "properties": {
        "signal": {
          "type": "string",
          "description": "What was observed, e.g. `routes:django`, `container-image`."
        },
        "detail": {
          "type": "string"
        },
        "path": {
          "type": [
            "string",
            "null"
          ],
          "description": "Repository-relative file that shows it."
        },
        "weight": {
          "type": "integer",
          "minimum": 0
        }
      },
      "required": [
        "signal",
        "detail",
        "path",
        "weight"
      ],
      "additionalProperties": false
    },
    "surfaces": {
      "type": "object",
      "properties": {
        "kinds": {
          "type": "array",
          "items": {
            "enum": [
              "service",
              "cli",
              "library",
              "desktop",
              "format",
              "frontend"
            ]
          }
        },
        "evidence": {
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "path": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "detail": {
                  "type": "string"
                }
              },
              "required": [
                "path",
                "detail"
              ],
              "additionalProperties": false
            }
          }
        },
        "long_running": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "path": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "detail": {
                "type": "string"
              }
            },
            "required": [
              "path",
              "detail"
            ],
            "additionalProperties": false
          }
        },
        "owns_data": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "path": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "detail": {
                "type": "string"
              }
            },
            "required": [
              "path",
              "detail"
            ],
            "additionalProperties": false
          }
        },
        "uses_credentials": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "path": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "detail": {
                "type": "string"
              }
            },
            "required": [
              "path",
              "detail"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "kinds",
        "evidence",
        "long_running",
        "owns_data",
        "uses_credentials"
      ],
      "additionalProperties": false
    },
    "make_or_buy": {
      "type": "object",
      "properties": {
        "verdict": {
          "enum": [
            "make",
            "buy",
            "toss-up"
          ]
        },
        "make_buy_ratio": {
          "type": "number",
          "description": "Total make cost / total buy cost over the horizon."
        },
        "horizon_years": {
          "type": "number"
        },
        "break_even_price_per_year": {
          "type": [
            "number",
            "null"
          ],
          "description": "Buy price per year at which both cost the same; <= 0 means make wins even if buying is free."
        },
        "make": {
          "type": "object",
          "properties": {
            "model": {
              "type": "string"
            },
            "tokens": {
              "type": "object",
              "properties": {
                "output": {
                  "type": "integer",
                  "minimum": 0
                },
                "input": {
                  "type": "integer",
                  "minimum": 0
                },
                "cached_input": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "required": [
                "output",
                "input",
                "cached_input"
              ],
              "additionalProperties": false
            },
            "final_tokens": {
              "type": "integer",
              "minimum": 0
            },
            "model_cost": {
              "type": [
                "number",
                "null"
              ]
            },
            "agent_hours": {
              "type": "number"
            },
            "human_days": {
              "type": "number"
            },
            "review_days": {
              "type": "number"
            },
            "rediscover_days": {
              "type": "number"
            },
            "calendar_days": {
              "type": "number"
            },
            "build_cost": {
              "type": "number"
            },
            "yearly_cost": {
              "type": "number"
            },
            "total_cost": {
              "type": "number"
            }
          },
          "required": [
            "model",
            "tokens",
            "final_tokens",
            "model_cost",
            "agent_hours",
            "human_days",
            "review_days",
            "rediscover_days",
            "calendar_days",
            "build_cost",
            "yearly_cost",
            "total_cost"
          ],
          "additionalProperties": false
        },
        "buy": {
          "type": "object",
          "properties": {
            "via": {
              "type": "object",
              "properties": {
                "install": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "use": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "install",
                "use"
              ],
              "additionalProperties": false
            },
            "adoption_minutes": {
              "type": "object",
              "properties": {
                "install": {
                  "type": "number"
                },
                "first_use": {
                  "type": "number"
                },
                "total": {
                  "type": "number"
                }
              },
              "required": [
                "install",
                "first_use",
                "total"
              ],
              "additionalProperties": false
            },
            "tokens": {
              "type": "object",
              "properties": {
                "output": {
                  "type": "integer",
                  "minimum": 0
                },
                "input": {
                  "type": "integer",
                  "minimum": 0
                },
                "cached_input": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "required": [
                "output",
                "input",
                "cached_input"
              ],
              "additionalProperties": false
            },
            "model_cost": {
              "type": [
                "number",
                "null"
              ]
            },
            "upgrade_minutes_per_year": {
              "type": "number"
            },
            "measured": {
              "oneOf": [
                {
                  "type": "null"
                },
                {
                  "type": "object",
                  "properties": {
                    "model": {
                      "type": "string"
                    },
                    "succeeded": {
                      "type": "boolean"
                    },
                    "outcomes": {
                      "type": "object"
                    },
                    "minutes": {
                      "type": "number"
                    },
                    "tokens": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "cost_usd": {
                      "type": [
                        "number",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "model",
                    "succeeded",
                    "outcomes",
                    "minutes",
                    "tokens",
                    "cost_usd"
                  ],
                  "additionalProperties": false
                }
              ],
              "description": "Adoption as the agentic probe measured it (docs-scope run + list tasks)."
            },
            "price_per_year": {
              "type": "number"
            },
            "fixed_cost": {
              "type": "number"
            },
            "yearly_cost": {
              "type": "number"
            },
            "total_cost": {
              "type": "number"
            }
          },
          "required": [
            "via",
            "adoption_minutes",
            "tokens",
            "model_cost",
            "upgrade_minutes_per_year",
            "measured",
            "price_per_year",
            "fixed_cost",
            "yearly_cost",
            "total_cost"
          ],
          "additionalProperties": false
        },
        "assumptions": {
          "type": "object"
        }
      },
      "required": [
        "verdict",
        "make_buy_ratio",
        "horizon_years",
        "break_even_price_per_year",
        "make",
        "buy",
        "assumptions"
      ],
      "additionalProperties": false
    },
    "estimate": {
      "type": "object",
      "properties": {
        "integrability_index": {
          "type": "number",
          "minimum": 0,
          "maximum": 4,
          "description": "Mean level of applicable dimensions."
        },
        "assessed_dimensions": {
          "type": "integer",
          "minimum": 0
        },
        "not_applicable": {
          "type": "array",
          "items": {
            "enum": [
              "interface",
              "stability",
              "events",
              "identity",
              "portability",
              "ergonomics",
              "embeddability",
              "extensibility",
              "observability",
              "legibility"
            ]
          }
        },
        "retrofit_person_days": {
          "type": "number",
          "minimum": 0
        },
        "retrofit_by_dimension": {
          "type": "object",
          "additionalProperties": {
            "type": "number"
          }
        },
        "wrappability": {
          "enum": [
            "already integrable",
            "cheap to wrap",
            "moderate retrofit",
            "expensive retrofit",
            "replace or wrap externally"
          ]
        },
        "assumptions": {
          "type": "object",
          "properties": {
            "target_level": {
              "type": "integer",
              "minimum": 0,
              "maximum": 4
            },
            "size_factor": {
              "type": "number"
            },
            "legibility_multiplier": {
              "type": "number"
            },
            "reference_tokens": {
              "type": "integer",
              "minimum": 0
            }
          },
          "required": [
            "target_level",
            "size_factor",
            "legibility_multiplier",
            "reference_tokens"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "integrability_index",
        "assessed_dimensions",
        "not_applicable",
        "retrofit_person_days",
        "retrofit_by_dimension",
        "wrappability",
        "assumptions"
      ],
      "additionalProperties": false
    },
    "value": {
      "type": "object",
      "properties": {
        "ksloc": {
          "type": "number"
        },
        "classic": {
          "type": "object",
          "properties": {
            "person_months": {
              "type": "number"
            },
            "schedule_months": {
              "type": "number"
            },
            "cost": {
              "type": "number"
            }
          },
          "required": [
            "person_months",
            "schedule_months",
            "cost"
          ],
          "additionalProperties": false
        },
        "capture": {
          "type": "object",
          "properties": {
            "tests": {
              "type": "number"
            },
            "contract": {
              "type": "number"
            },
            "docs": {
              "type": "number"
            },
            "capture": {
              "type": "number"
            }
          },
          "required": [
            "tests",
            "contract",
            "docs",
            "capture"
          ],
          "additionalProperties": false
        },
        "agent_factor": {
          "type": "number"
        },
        "reproduce_pm": {
          "type": "number"
        },
        "history": {
          "type": "object",
          "properties": {
            "commits": {
              "type": "integer",
              "minimum": 0
            },
            "fix_commits": {
              "type": "integer",
              "minimum": 0
            },
            "authors": {
              "type": "integer",
              "minimum": 0
            },
            "age_months": {
              "type": "number"
            },
            "months_since_last": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "required": [
            "commits",
            "fix_commits",
            "authors",
            "age_months",
            "months_since_last"
          ],
          "additionalProperties": false
        },
        "knowledge_pm": {
          "type": "number"
        },
        "rediscover_pm": {
          "type": "number"
        },
        "replacement_pm": {
          "type": "number"
        },
        "leverage": {
          "type": "number"
        },
        "obsolescence": {
          "type": "number"
        },
        "value_pm": {
          "type": "number"
        },
        "value_cost": {
          "type": "number"
        },
        "knowledge_at_risk": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "assumptions": {
          "type": "object",
          "properties": {
            "salary": {
              "type": "number"
            },
            "overhead": {
              "type": "number"
            },
            "cost_per_pm": {
              "type": "number"
            },
            "floor": {
              "type": "number"
            },
            "rediscover_share": {
              "type": "number"
            },
            "fix_pm": {
              "type": "number"
            },
            "change_pm": {
              "type": "number"
            }
          },
          "required": [
            "salary",
            "overhead",
            "cost_per_pm",
            "floor",
            "rediscover_share",
            "fix_pm",
            "change_pm"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "ksloc",
        "classic",
        "capture",
        "agent_factor",
        "reproduce_pm",
        "history",
        "knowledge_pm",
        "rediscover_pm",
        "replacement_pm",
        "leverage",
        "obsolescence",
        "value_pm",
        "value_cost",
        "knowledge_at_risk",
        "assumptions"
      ],
      "additionalProperties": false
    },
    "agentic": {
      "type": "object",
      "properties": {
        "runs": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/run"
          }
        },
        "panel": {
          "oneOf": [
            {
              "type": "null"
            },
            {
              "type": "object",
              "properties": {
                "models": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "success_share": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "number"
                  }
                },
                "agreement": {
                  "type": [
                    "number",
                    "null"
                  ]
                }
              },
              "required": [
                "models",
                "success_share",
                "agreement"
              ],
              "additionalProperties": false
            }
          ]
        }
      },
      "required": [
        "runs",
        "panel"
      ],
      "additionalProperties": false
    },
    "run": {
      "type": "object",
      "properties": {
        "model": {
          "type": "string"
        },
        "effort": {
          "type": [
            "string",
            "null"
          ]
        },
        "judge": {
          "type": [
            "string",
            "null"
          ]
        },
        "scopes": {
          "type": "array",
          "items": {
            "enum": [
              "docs",
              "source"
            ]
          }
        },
        "summary": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/$defs/scope_summary"
          }
        },
        "tasks": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/task"
          }
        },
        "documentation_gap": {
          "type": "number",
          "description": "Source success rate minus docs success rate (--scope both)."
        }
      },
      "required": [
        "model",
        "effort",
        "judge",
        "scopes",
        "summary",
        "tasks"
      ],
      "additionalProperties": false
    },
    "task": {
      "type": "object",
      "properties": {
        "task": {
          "type": "string"
        },
        "dimension": {
          "enum": [
            "interface",
            "stability",
            "events",
            "identity",
            "portability",
            "ergonomics",
            "embeddability",
            "extensibility",
            "observability",
            "legibility"
          ]
        },
        "scope": {
          "enum": [
            "docs",
            "source"
          ]
        },
        "model": {
          "type": "string"
        },
        "outcome": {
          "enum": [
            "solved",
            "ungrounded",
            "judged_wrong",
            "infeasible",
            "unverifiable",
            "no_submit",
            "turn_limit",
            "refusal",
            "budget",
            "error",
            "submitted"
          ]
        },
        "success": {
          "type": "boolean"
        },
        "turns": {
          "type": "integer",
          "minimum": 0
        },
        "tool_calls": {
          "type": "integer",
          "minimum": 0
        },
        "tool_errors": {
          "type": "integer",
          "minimum": 0
        },
        "problems": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "cost_usd": {
          "type": [
            "number",
            "null"
          ]
        },
        "answer": {
          "type": [
            "object",
            "null"
          ],
          "description": "What the probe submitted (submit_result input)."
        },
        "grounded_steps": {
          "type": "integer",
          "minimum": 0
        },
        "checked_steps": {
          "type": "integer",
          "minimum": 0
        },
        "judge": {
          "type": [
            "object",
            "null"
          ],
          "description": "The judge's verdict: works, reason, issues, model."
        },
        "seconds": {
          "type": "number"
        },
        "http_calls": {
          "type": "integer",
          "minimum": 0
        },
        "input_tokens": {
          "type": "integer",
          "minimum": 0
        },
        "output_tokens": {
          "type": "integer",
          "minimum": 0
        },
        "cache_read_input_tokens": {
          "type": "integer",
          "minimum": 0
        },
        "cache_creation_input_tokens": {
          "type": "integer",
          "minimum": 0
        }
      },
      "required": [
        "task",
        "dimension",
        "scope",
        "model",
        "outcome",
        "success",
        "turns",
        "tool_calls",
        "tool_errors",
        "problems",
        "cost_usd",
        "input_tokens",
        "output_tokens",
        "cache_read_input_tokens",
        "cache_creation_input_tokens"
      ],
      "additionalProperties": false
    },
    "scope_summary": {
      "type": "object",
      "properties": {
        "tasks": {
          "type": "integer",
          "minimum": 0
        },
        "succeeded": {
          "type": "integer",
          "minimum": 0
        },
        "success_rate": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "level": {
          "type": "integer",
          "minimum": 0,
          "maximum": 4
        },
        "tokens": {
          "type": "integer",
          "minimum": 0
        },
        "tokens_per_success": {
          "type": [
            "integer",
            "null"
          ]
        },
        "cost_usd": {
          "type": [
            "number",
            "null"
          ]
        },
        "by_dimension": {
          "type": "object",
          "additionalProperties": {
            "type": "boolean"
          }
        }
      },
      "required": [
        "tasks",
        "succeeded",
        "success_rate",
        "level",
        "tokens",
        "tokens_per_success",
        "cost_usd",
        "by_dimension"
      ],
      "additionalProperties": false
    },
    "review": {
      "type": "object",
      "properties": {
        "models": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "dimensions": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "static": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "reviews": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "level": {
                      "type": [
                        "integer",
                        "null"
                      ],
                      "minimum": 0,
                      "maximum": 4
                    },
                    "rationale": {
                      "type": "string"
                    },
                    "false_positives": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "missed_evidence": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "model": {
                      "type": "string"
                    },
                    "turns": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "cost_usd": {
                      "type": [
                        "number",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "level",
                    "rationale",
                    "false_positives",
                    "missed_evidence",
                    "model",
                    "turns",
                    "cost_usd"
                  ],
                  "additionalProperties": false
                }
              },
              "consensus": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "spread": {
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "required": [
              "static",
              "reviews",
              "consensus",
              "spread"
            ],
            "additionalProperties": false
          }
        },
        "reviewed_index": {
          "type": [
            "number",
            "null"
          ]
        },
        "disagreements": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "models",
        "dimensions",
        "reviewed_index",
        "disagreements"
      ],
      "additionalProperties": false
    }
  }
}