JSON output¶
With --json, everything neosloc prints on stdout is one JSON document, including
errors. Diagnostics stay on stderr. The shapes are specified by a JSON Schema (draft
2020-12) that ships with the package:
neosloc --schema > neosloc.schema.json
Documents¶
| Invocation | stdout |
|---|---|
neosloc --json PATH |
a report |
neosloc --json PATH1 PATH2 … |
a list of reports, with an error in place of each path that couldn't be assessed |
| any failure before reports exist | an error |
Every document has schema_version (currently 2). It changes only when a field is
removed or changes meaning; new optional fields are added without a bump.
Validate output in a pipeline:
neosloc --json . > report.json
neosloc --schema > schema.json
python -m jsonschema --instance report.json schema.json # or any draft 2020-12 validator
Report¶
| Field | Content |
|---|---|
target |
Absolute path of the repository. |
inventory |
files, source_files, source_tokens, languages (tokens per language), git. |
surfaces |
kinds (service, cli, library, frontend), the evidence for each, and the long_running, owns_data and uses_credentials properties. |
dimensions[] |
key, title, question, level (0–4, or null when not applicable), level_name (n/a when null), applicable, best_surface, rationale, evidence[] (met requirements of the best surface), gaps[] (first unmet requirement per surface), surfaces (the full ladder per surface: each requirement's level, id, text, met, evidence, note), metrics. |
estimate |
integrability_index (over applicable dimensions), assessed_dimensions, not_applicable, retrofit_person_days, retrofit_by_dimension, wrappability, assumptions. See Retrofit effort. |
value |
neoCOCOMO figures: classic, capture, agent_factor, history, knowledge_at_risk, value_pm, value_cost, assumptions. See Value. |
make_or_buy |
verdict (make, buy, toss-up), make_buy_ratio, horizon_years, break_even_price_per_year, make (tokens, model cost, agent hours, human days, calendar days, costs) and buy (integration days, upgrade days, price, costs). See Make or buy. |
agentic |
With --agentic/--judge: runs[] (one per probe model; per-scope summary, per-task records, documentation_gap) and panel. Otherwise null. |
review |
With --review: per-dimension reviews, consensus, spread, reviewed_index, disagreements. Otherwise null. |
spend |
With any evaluator: usd, max_usd, unpriced_calls. Otherwise null. |
Per-task records in agentic.runs[].tasks[] carry outcome (see
LLM evaluators), the submitted answer, the judge's verdict,
problems, and turn, token, time and cost counters.
Errors¶
{
"schema_version": 1,
"target": "/path/that/failed",
"error": {
"code": "not_a_directory",
"message": "not a directory: /path/that/failed",
"exit_status": 3,
"details": {"path": "/path/that/failed"}
}
}
target is present when the error concerns one path. Branch on code, not on message:
codes are part of the contract, messages are for humans.
code |
Meaning |
|---|---|
usage |
The command line is invalid (exit 2). |
unknown_dimension |
--only names a dimension that doesn't exist (exit 2). |
unknown_task |
--tasks names a task that doesn't exist (exit 2). |
bad_model_spec |
A model isn't written provider:model (exit 2). |
not_a_directory |
A path doesn't exist or isn't a directory (exit 3). |
missing_dependency |
An evaluator needs a package that isn't installed (exit 4). |
credentials |
API credentials are missing or were rejected (exit 4). |
provider_unreachable |
The model provider couldn't be reached (exit 4). |
unknown_model |
The provider has no such model (exit 4). |
model_unsupported |
The model can't call tools (exit 4). |
interrupted |
Interrupted by the user (exit 130). |
internal |
A bug in neosloc (exit 1); please report it with the details. |
Exit statuses: 0 ok · 1 internal error · 2 usage · 3 a path couldn't be assessed ·
4 LLM evaluator setup · 130 interrupted. With several paths, exit status 3 means at
least one failed; the others still have their reports.
The schema¶
Generated from neosloc/schema.py; identical to neosloc --schema.
{
"$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
}
}
}