{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://metryval.com/data/framework-reception-ledger.schema.json",
  "title": "Metryval Framework Reception Ledger v1",
  "description": "Per-framework academic-reception status for every framework underlying the Metryval / RESONYR 17-dimension PAREN measurement instrument. Canonical source of truth lives in metryval-3d/docs/audit/framework_reception_ledger_v1.md; this schema governs the JSON projection served at /data/framework-reception-ledger.json. Track 4 of the HN launch plan (open-source GitHub repo) consumes this schema as the contract.",
  "type": "object",
  "required": ["schema_version", "ledger_version", "last_updated", "headline", "frameworks", "sidecar_frameworks", "retirements", "methodology_citations", "version_history"],
  "additionalProperties": false,
  "properties": {
    "schema_version": {
      "type": "string",
      "enum": ["1.0.0", "1.1.0"],
      "description": "Schema version. MAJOR bumped on breaking changes (consumers must update); MINOR bumped on additive optional fields (consumers can ignore safely). 1.1.0 adds optional reception_summary field to framework entries."
    },
    "ledger_version": {
      "type": "string",
      "pattern": "^v\\d+(\\.\\d+)*(\\.\\d+)*( .+)?$",
      "description": "Ledger version (e.g. 'v1.23'). Bumped on every entry change per the markdown ledger's change log."
    },
    "last_updated": {
      "type": "string",
      "format": "date",
      "description": "ISO date of the most recent ledger update."
    },
    "source_of_truth": {
      "type": "string",
      "description": "Path to the canonical markdown ledger, relative to repo root."
    },
    "public_surface": {
      "type": "string",
      "description": "Public route on the Metryval site that surfaces this ledger."
    },
    "headline": {
      "type": "object",
      "required": ["synthesized_count", "methodology_citation_count", "retired_count", "removed_count", "tier_distribution"],
      "additionalProperties": false,
      "properties": {
        "synthesized_count": {
          "type": "integer",
          "minimum": 0,
          "description": "Number of frameworks synthesized into the instrument (the public-facing count). Includes Tier-1 + Tier-2 + Tier-3 + sidecars (polarity-0 metadata frameworks)."
        },
        "methodology_citation_count": {
          "type": "integer",
          "minimum": 0,
          "description": "Number of frameworks cited as methodology precedents only (no dedicated items, no architectural-influence trail; cited as prior art)."
        },
        "retired_count": {
          "type": "integer",
          "minimum": 0,
          "description": "Number of frameworks retired from operationalization (construct remains scientifically valid; no longer measured by Metryval)."
        },
        "removed_count": {
          "type": "integer",
          "minimum": 0,
          "description": "Number of frameworks removed from the framework set (construct itself withdrawn as scientifically untenable per consensus paper)."
        },
        "tier_distribution": {
          "type": "object",
          "required": ["tier_1", "tier_2", "tier_3", "sidecar"],
          "additionalProperties": false,
          "properties": {
            "tier_1": { "type": "integer", "minimum": 0 },
            "tier_2": { "type": "integer", "minimum": 0 },
            "tier_3": { "type": "integer", "minimum": 0 },
            "sidecar": { "type": "integer", "minimum": 0 }
          }
        }
      }
    },
    "frameworks": {
      "type": "array",
      "description": "One entry per synthesized framework (Tier 1, Tier 2, Tier 3). Sidecar frameworks are in a separate array because their IDs use the S-NN convention. Per-framework verbose 2024-2026 reception rationale lives in the markdown ledger; this schema captures the structured summary fields.",
      "items": {
        "type": "object",
        "required": ["id", "name", "tier", "status"],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^F-\\d{2}$",
            "description": "Framework ID (F-NN). Never reused once assigned."
          },
          "name": {
            "type": "string",
            "description": "Canonical framework name + instrument abbreviation if relevant."
          },
          "tier": {
            "type": "string",
            "enum": ["tier_1", "tier_2", "tier_3"],
            "description": "Current tier classification. Sidecars live in sidecar_frameworks; this enum excludes them."
          },
          "grade": {
            "type": "string",
            "enum": ["A", "A-", "B", "C"],
            "description": "Letter-grade reception assessment."
          },
          "status": {
            "type": "string",
            "enum": ["STRONG", "STABLE", "STABLE→STRONG", "PROMOTED", "DEMOTED", "WEAKENED", "ARCHITECTURAL_INFLUENCE", "SIDECAR"],
            "description": "Current verdict status from the markdown ledger."
          },
          "year_added_to_ledger": {
            "type": "string",
            "description": "Ledger version when the framework was first added (e.g. 'v1.14', 'v1.19')."
          },
          "operationalized": {
            "type": "boolean",
            "description": "Whether the framework is operationalized by dedicated items in the instrument. False for ARCHITECTURAL_INFLUENCE retentions."
          },
          "reception_summary": {
            "type": "string",
            "maxLength": 600,
            "description": "Concise summary of the framework's 2024-2026 academic-reception status. Derived from the canonical markdown ledger's '2024-2026 reception' table cell. Single field, plain text, no markdown. Verbose multi-paragraph rationale stays in the markdown source of truth. Added in schema_version 1.1.0."
          }
        }
      }
    },
    "sidecar_frameworks": {
      "type": "array",
      "description": "Polarity-0 metadata sidecar frameworks. Cited but counted separately from the synthesized headline number.",
      "items": {
        "type": "object",
        "required": ["id", "name", "grade", "status"],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^S-\\d{2}$",
            "description": "Sidecar ID (S-NN)."
          },
          "name": { "type": "string" },
          "grade": { "type": "string", "enum": ["A", "A-", "B", "C"] },
          "status": {
            "type": "string",
            "enum": ["SIDECAR", "STABLE"],
            "description": "Current status. SIDECAR is the default classification; STABLE for sidecars with no reception concerns."
          }
        }
      }
    },
    "retirements": {
      "type": "array",
      "description": "Frameworks retired from operationalization. Distinct from removals: construct remains scientifically valid.",
      "items": {
        "type": "object",
        "required": ["id", "former_framework_id", "name", "kind", "date_retired", "rationale_summary"],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^R-\\d{2}$",
            "description": "Retirement entry ID (R-NN)."
          },
          "former_framework_id": {
            "type": "string",
            "description": "F-NN ID of the framework before retirement, or 'PVT' for the pre-numbering Polyvagal removal."
          },
          "name": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": ["removed", "retired"],
            "description": "REMOVED = construct withdrawn as scientifically untenable. RETIRED = construct valid but no longer operationalized by Metryval."
          },
          "date_retired": {
            "type": "string",
            "format": "date"
          },
          "rationale_summary": {
            "type": "string",
            "description": "One-paragraph rationale. Verbose detail in the markdown ledger."
          }
        }
      }
    },
    "methodology_citations": {
      "type": "array",
      "description": "Frameworks cited as methodology precedents only (no dedicated items, no architectural-influence trail). Counted separately from the synthesized count.",
      "items": {
        "type": "object",
        "required": ["id", "former_framework_id", "name", "citation_role"],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^M-\\d{2}$",
            "description": "Methodology citation ID (M-NN)."
          },
          "former_framework_id": {
            "type": "string",
            "description": "F-NN ID before demotion, if applicable."
          },
          "name": {
            "type": "string"
          },
          "citation_role": {
            "type": "string",
            "description": "What Metryval cites this framework for (e.g. 'LLM personality benchmarking methodology precedent')."
          }
        }
      }
    },
    "version_history": {
      "type": "array",
      "description": "Ledger version history. Most recent first.",
      "items": {
        "type": "object",
        "required": ["version", "date", "summary"],
        "additionalProperties": false,
        "properties": {
          "version": {
            "type": "string",
            "pattern": "^v\\d+(\\.\\d+)*(\\.\\d+)*$"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "summary": {
            "type": "string"
          }
        }
      }
    }
  }
}
