{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://www.proofagent.ai/eio-agents/schema/per/2.0.0/per.schema.json",
  "title": "PER 2.0.0 — Portable Evaluation Record",
  "description": "Versioned Portable Evaluation Record with source-bound full reference scoring and explicit unevaluated minimum-score policy review.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "header",
    "provenance",
    "subject",
    "scope",
    "evidence",
    "claims",
    "coverage",
    "findings",
    "controls",
    "scores",
    "reliability",
    "release_recommendation",
    "limitations",
    "telemetry"
  ],
  "properties": {
    "header": {
      "$ref": "#/$defs/header",
      "description": "See header. [§7.1]"
    },
    "provenance": {
      "$ref": "#/$defs/provenance",
      "description": "See provenance. EIO: eio.entity.run, eio.entity.capsule. [§7.2]"
    },
    "subject": {
      "$ref": "#/$defs/subject",
      "description": "See subject. EIO: eio.entity.agent, eio.entity.ai-bom. [§7.3]"
    },
    "scope": {
      "$ref": "#/$defs/scope",
      "description": "See scope. EIO: eio.entity.governance-profile, eio.flow.qualify. [§7.4]"
    },
    "evidence": {
      "$ref": "#/$defs/evidence",
      "description": "See evidence. EIO: eio.entity.evidence-ref, eio.core.evidence. [§7.5]"
    },
    "claims": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/claim"
      },
      "description": "The only facts: one EvaluationClaim per mapped check verdict, ordered by (min(turn_indices), predicate, legacy_check). Ids unique. EIO: eio.entity.evaluation-claim. [§7.6]"
    },
    "coverage": {
      "$ref": "#/$defs/coverage",
      "description": "See coverage. EIO: eio.entity.coverage-report. [§7.7]"
    },
    "findings": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/finding"
      },
      "description": "One per fingerprint with at least one APPLICABLE_FAIL claim, plus CONTEXT_GAP findings. EIO: eio.entity.finding. [§7.8]"
    },
    "controls": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/control"
      },
      "description": "Controls of every APPLICABLE or REVIEW_REQUIRED framework in scope, sorted by (framework, control_id). EIO: eio.entity.control-status. [§7.9]"
    },
    "scores": {
      "anyOf": [
        {
          "$ref": "#/$defs/scores"
        },
        {
          "$ref": "#/$defs/native_full_scores"
        },
        {
          "type": "null"
        }
      ],
      "description": "A rederivable reference score block, historical score view, or explicit null."
    },
    "reliability": {
      "$ref": "#/$defs/reliability",
      "description": "See reliability. EIO: eio.reliability.ledgers, eio.entity.reliability-ledger. [§7.11]"
    },
    "release_recommendation": {
      "$ref": "#/$defs/release_recommendation",
      "description": "See release_recommendation. EIO: eio.entity.release-decision, eio.lifecycle.release. [§7.12]"
    },
    "limitations": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/limitation"
      },
      "description": "Sorted by (field_path, limitation_id). [§7.13]"
    },
    "telemetry": {
      "$ref": "#/$defs/telemetry",
      "description": "See telemetry. [§7.14]"
    }
  },
  "allOf": [
    {
      "if": {
        "properties": {
          "header": {
            "properties": {
              "release_semantics": {
                "const": "2.x"
              }
            },
            "required": [
              "release_semantics"
            ]
          }
        },
        "required": [
          "header"
        ]
      },
      "then": {
        "properties": {
          "release_recommendation": {
            "properties": {
              "semantics": {
                "const": "2.x"
              }
            }
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "header": {
            "properties": {
              "release_semantics": {
                "const": "3@"
              }
            },
            "required": [
              "release_semantics"
            ]
          }
        },
        "required": [
          "header"
        ]
      },
      "then": {
        "properties": {
          "release_recommendation": {
            "properties": {
              "semantics": {
                "const": "3@"
              }
            }
          }
        }
      }
    },
    {
      "$comment": "I-3 (03 §9.4): state BLOCK implies readiness band F. Distinct from eio.cap.blocked-run, which caps the band at F whenever a blocking gate is unmet, whatever the release state.",
      "if": {
        "properties": {
          "release_recommendation": {
            "properties": {
              "state": {
                "const": "BLOCK"
              }
            },
            "required": [
              "state"
            ]
          }
        },
        "required": [
          "release_recommendation"
        ]
      },
      "then": {
        "properties": {
          "scores": {
            "properties": {
              "readiness": {
                "properties": {
                  "band": {
                    "const": "F"
                  }
                }
              }
            }
          }
        }
      },
      "else": {
        "properties": {
          "scores": {
            "properties": {
              "readiness": {
                "if": {
                  "properties": {
                    "value": {
                      "type": "null"
                    }
                  },
                  "required": [
                    "value"
                  ]
                },
                "then": {
                  "properties": {
                    "band": {
                      "type": "null"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  ],
  "$defs": {
    "declared_limitation_catalogue": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id",
        "version",
        "sha256",
        "limitations"
      ],
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)+$"
        },
        "version": {
          "type": "string",
          "minLength": 1
        },
        "sha256": {
          "$ref": "#/$defs/sha256_digest"
        },
        "limitations": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "status",
              "paths",
              "raised_when",
              "reason",
              "impact",
              "next_step"
            ],
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)+$"
              },
              "status": {
                "enum": [
                  "NOT_SUPPLIED",
                  "NOT_CAPTURED",
                  "NOT_APPLICABLE"
                ]
              },
              "paths": {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "string",
                  "pattern": "^/"
                }
              },
              "raised_when": {
                "type": "string"
              },
              "reason": {
                "type": "string",
                "minLength": 1
              },
              "impact": {
                "type": "string",
                "minLength": 1
              },
              "next_step": {
                "type": "string",
                "minLength": 1
              }
            }
          }
        }
      }
    },
    "declared_template_catalogue": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id",
        "version",
        "sha256",
        "templates"
      ],
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)+$"
        },
        "version": {
          "type": "string",
          "minLength": 1
        },
        "sha256": {
          "$ref": "#/$defs/sha256_digest"
        },
        "templates": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "text",
              "params",
              "max_length"
            ],
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)+@[1-9][0-9]*$"
              },
              "text": {
                "type": "string",
                "minLength": 1
              },
              "params": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              },
              "max_length": {
                "type": "integer",
                "minimum": 1
              }
            }
          }
        }
      }
    },
    "anchor": {
      "enum": [
        "exact",
        "casefold",
        "receipt",
        "computed",
        "line",
        "turn",
        "document",
        "none"
      ],
      "description": "How a ref is bound to its source; identical to the 01 §6.4 anchor enum. exact / casefold: quote found by exact or casefold substring match, offsets into the original string; receipt: a tool call (or result) addressed by pointer; computed: a derived ref (TYPED_ABSENCE, CALCULATION, STATE_*) with a recorded statement; line: a whole context-artifact line located by a checklist-term search or a declared rule reference; turn: an unanchorable quote or an annotation replaced by the whole turn source [0, len); document: a context artifact identified by hash only; none: nothing to anchor (a juror citation found in no source of the turn). Witnessing anchored = can_prove_agent_behaviour AND anchor in {exact, casefold, receipt, computed}. [§7.5.1]"
    },
    "autonomy_id": {
      "type": "string",
      "pattern": "^eio[.]autonomy[.]l[0-4]$",
      "description": "An EIO autonomy level eio.autonomy.l0 … eio.autonomy.l4 (governance/gates.yaml). EIO: eio.entity.governance-profile. [§7.4]"
    },
    "axis_component": {
      "type": "object",
      "description": "One component of an axis. EIO: eio.entity.axis-score. [§7.10]",
      "additionalProperties": false,
      "required": [
        "id",
        "value"
      ],
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^(eio[.](context|metric|framework)[.][a-z0-9][a-z0-9_.-]*|[a-z][a-z0-9_]*)$",
          "description": "Component id: an EIO context criterion (Q), an EIO metric (E), an EIO framework (C), or a G component id declared by the scoring profile. Display labels are rendered, never stored. EIO: eio.entity.axis-score."
        },
        "value": {
          "anyOf": [
            {
              "$ref": "#/$defs/score_0_100"
            },
            {
              "type": "null"
            }
          ],
          "description": "Sub-score, or null when not evaluated."
        }
      }
    },
    "axis_id": {
      "enum": [
        "eio.axis.context",
        "eio.axis.behaviour",
        "eio.axis.compliance",
        "eio.axis.governance"
      ],
      "description": "One of the 4 EIO scoring axes (scoring/axes.yaml). EIO: eio.entity.axis-score. [§7.10]"
    },
    "axis_score": {
      "type": "object",
      "description": "One of the four axes Q, E, C, G. Semantics-2.x caveats (C legacy basis, Q assessor ratings) are stated in the explanation. EIO: eio.entity.axis-score. [§7.10]",
      "additionalProperties": false,
      "required": [
        "axis",
        "symbol",
        "value",
        "weight",
        "measurement_status",
        "components",
        "explanation"
      ],
      "properties": {
        "axis": {
          "$ref": "#/$defs/axis_id",
          "description": "See axis_id. EIO: eio.entity.axis-score."
        },
        "symbol": {
          "enum": [
            "Q",
            "E",
            "C",
            "G"
          ],
          "description": "Axis symbol. EIO: eio.scoring.axes."
        },
        "value": {
          "anyOf": [
            {
              "$ref": "#/$defs/score_0_100"
            },
            {
              "type": "null"
            }
          ],
          "description": "Axis value; null when NOT_EVALUATED (excluded from readiness). EIO: eio.entity.axis-score, eiop:value."
        },
        "weight": {
          "$ref": "#/$defs/fraction",
          "description": "Normalized weight (EIO declares 0.25 each). EIO: eio.scoring.axes."
        },
        "measurement_status": {
          "$ref": "#/$defs/measurement_status",
          "description": "See measurement_status. EIO: eio.floor.release-evidence, eio.floor.axis-evaluated-slots."
        },
        "components": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/axis_component"
          },
          "description": "Axis sub-scores. EIO: eio.entity.axis-score."
        },
        "explanation": {
          "$ref": "#/$defs/explanation",
          "description": "See explanation. EIO: eio.entity.release-decision. [§8]"
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "measurement_status": {
                "enum": [
                  "NOT_EVALUATED",
                  "NOT_APPLICABLE"
                ]
              }
            },
            "required": [
              "measurement_status"
            ]
          },
          "then": {
            "properties": {
              "value": {
                "type": "null"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "measurement_status": {
                "enum": [
                  "MEASURED",
                  "DIAGNOSTIC_ONLY"
                ]
              }
            },
            "required": [
              "measurement_status"
            ]
          },
          "then": {
            "properties": {
              "value": {
                "$ref": "#/$defs/score_0_100"
              }
            }
          }
        }
      ]
    },
    "cap_id": {
      "type": "string",
      "pattern": "^eio[.]cap[.][a-z0-9][a-z0-9_.-]*$",
      "description": "An EIO scoring cap: eio.cap.proven-critical-breach or eio.cap.blocked-run. EIO: eio.cap.proven-critical-breach. [§7.10]"
    },
    "cap_reason": {
      "type": "object",
      "description": "A cap applied after the factual claim, naming the claim, turn and evidence that caused it. EIO: eio.entity.readiness-index, eiop:cap_reasons. [§7.10]",
      "additionalProperties": false,
      "required": [
        "cap",
        "scope",
        "ceiling",
        "claim_id"
      ],
      "properties": {
        "cap": {
          "$ref": "#/$defs/cap_id",
          "description": "See cap_id. EIO: eio.cap.proven-critical-breach."
        },
        "scope": {
          "enum": [
            "readiness",
            "metric"
          ],
          "description": "What the cap lowered: the readiness value (the harness-2.x ceiling min(raw, 49), recorded under eio.cap.proven-critical-breach; the ceiling is declared by the EIO harness-2.x legacy profile) or a metric (EIO ceiling 3.0/10 = 30)."
        },
        "ceiling": {
          "$ref": "#/$defs/score_0_100",
          "description": "Ceiling on the 0–100 scale. EIO: eio.cap.proven-critical-breach."
        },
        "claim_id": {
          "$ref": "#/$defs/claim_id",
          "description": "The deterministic APPLICABLE_FAIL claim that applied the cap (axes.yaml)."
        },
        "turn": {
          "$ref": "#/$defs/turn_index",
          "description": "Turn of that claim (REQUIRED in readiness.cap_reasons)."
        },
        "ref": {
          "$ref": "#/$defs/evidence_ref_id",
          "description": "The first witnessing anchored ref of that claim (REQUIRED in readiness.cap_reasons)."
        }
      }
    },
    "capsule_field": {
      "enum": [
        "ontology_module_hashes",
        "agent_manifest_hash",
        "policy_hash",
        "tool_schema_hash",
        "domain_profile_hash",
        "template_ids",
        "binding_ids",
        "generator_version",
        "seed",
        "evidence_graph_schema",
        "evidence_source_hashes",
        "extractor_versions",
        "revision",
        "models",
        "prompt_hashes",
        "sampling_parameters",
        "cache_identity",
        "predicate_versions",
        "metric_view_versions",
        "patch",
        "lock_digest"
      ],
      "description": "Capsule field names used in capsule.missing_fields, grouped by the lines of eio.profile.required-capsule-fields: ontology; agent; template; evidence; resolver; claim; repository (patch, lock_digest). missing_fields lists them in this declaration order. EIO: eio.entity.capsule. [§7.2]"
    },
    "claim": {
      "type": "object",
      "description": "One EvaluationClaim per mapped check verdict — the ONLY facts in a PER. Strict profile of EIO schemas/evaluation-claim.schema.json: every instance valid here is valid there; PER closes parameters, requires 1-based turn_indices, pins id and digest patterns and forbids rationale, confidence, episode_id and subsumed_by. EIO: eio.entity.evaluation-claim. [§7.6]",
      "additionalProperties": false,
      "required": [
        "id",
        "run_id",
        "turn_indices",
        "predicate",
        "predicate_version",
        "state",
        "parameters",
        "evidence",
        "decided_by",
        "provenance"
      ],
      "properties": {
        "id": {
          "$ref": "#/$defs/claim_id",
          "description": "See claim_id. EIO: eio.entity.evaluation-claim. [§6]"
        },
        "run_id": {
          "$ref": "#/$defs/run_id",
          "description": "= provenance.run.run_id. EIO: eiop:run_id."
        },
        "turn_indices": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/turn_index"
          },
          "minItems": 1,
          "uniqueItems": true,
          "description": "Turns the predicate instance covers; for legacy claims [turn_index]. Sorted ascending. EIO: eiop:turn_indices."
        },
        "predicate": {
          "$ref": "#/$defs/predicate_id",
          "description": "Canonical predicate from the loaded EIO release."
        },
        "predicate_version": {
          "$ref": "#/$defs/semver",
          "description": "The declaring module's predicates[].version. EIO: eiop:predicate_version."
        },
        "state": {
          "$ref": "#/$defs/decision_state",
          "description": "Verbatim from the archive, or derived polarity-aware when the row has no state (§7.6.3; observed null -> NOT_APPLICABLE with applicability_basis.source observed_null); never changed by the converter (PROD-4). EIO: eiop:state."
        },
        "parameters": {
          "$ref": "#/$defs/claim_parameters",
          "description": "See claim_parameters. EIO: eiop:parameters."
        },
        "evidence": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/evidence_ref_id"
          },
          "uniqueItems": true,
          "description": "Supporting refs (eio.relation.supported-by), a set serialized in /evidence/refs order (§5.6). Every id resolves in /evidence/refs. Built by the recipes of §7.5.3 (R-ACT, R-MARKER, R-SENTINEL, R-FORBIDDEN/R-OOB, R-REQUIRED, R-PERSIST, R-PAIRED, R-GATE-TOOL, R-GATE-TEXT, R-SEM); no recipe reads the quote of a code or gated row. Non-empty for APPLICABLE_PASS and APPLICABLE_FAIL (enforced below); an APPLICABLE_FAIL claim additionally cites at least one agent ref (verifier). Empty for a premise-gated NOT_APPLICABLE claim (enforced below). EIO: eio.relation.supported-by, eiop:evidence."
        },
        "counterevidence": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/evidence_ref_id"
          },
          "uniqueItems": true,
          "description": "Refs considered against the adopted state (01 §6.5): an empty array asserts that a declared counterevidence search found nothing, so the member is present only when a recipe runs one. EIO: eiop:counterevidence."
        },
        "decided_by": {
          "$ref": "#/$defs/decided_by",
          "description": "decided_by of 01 §7.4, mapped from the archive decider (04 §5.2): code -> deterministic; gated with votes_total == 0 -> deterministic; gated with votes and llm -> semantic. EIO: eio.relation.resolved-by, eiop:decided_by. [§7.6.2]"
        },
        "resolver": {
          "$ref": "#/$defs/resolver_id",
          "description": "Emitted on a deterministic claim only when the recipe's natural resolver (R-ACT, R-FORBIDDEN, R-OOB, R-GATE-TOOL: tool-receipt; R-REQUIRED, and R-ACT on a turn without a tool call: typed-absence; R-MARKER, R-SENTINEL, gate reply_names: exact-span; gate field_overlap_exceeds: arithmetic) is listed in the predicate's resolvers; semantic claims carry none. EIO: eiop:resolver."
        },
        "risk": {
          "$ref": "#/$defs/risk_id",
          "description": "The predicate's risk; absent for safeguard and observation predicates. EIO: eiop:risk."
        },
        "provenance": {
          "$ref": "#/$defs/claim_provenance",
          "description": "See claim_provenance. EIO: eiop:provenance."
        },
        "rationale": {
          "not": {},
          "description": "MUST be absent: PER does not store claim rationale; renderers derive the claim 'why' on demand from the eio.why.claim.* templates of eio.template.why (§7.6.5). EIO: eiop:rationale."
        },
        "confidence": {
          "not": {},
          "description": "MUST be absent: a converter omits confidence (01 §7.4). EIO: eiop:confidence."
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "decided_by": {
                "const": "deterministic"
              }
            },
            "required": [
              "decided_by"
            ]
          },
          "then": {
            "properties": {
              "parameters": {
                "properties": {
                  "votes": {
                    "type": "null"
                  }
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "decided_by": {
                "const": "semantic"
              }
            },
            "required": [
              "decided_by"
            ]
          },
          "then": {
            "properties": {
              "parameters": {
                "properties": {
                  "votes": {
                    "$ref": "#/$defs/claim_votes"
                  }
                }
              },
              "provenance": {
                "required": [
                  "model"
                ]
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "decided_by": {
                "not": {
                  "const": "semantic"
                }
              }
            },
            "required": [
              "decided_by"
            ]
          },
          "then": {
            "properties": {
              "provenance": {
                "not": {
                  "required": [
                    "model"
                  ]
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "state": {
                "enum": [
                  "APPLICABLE_PASS",
                  "APPLICABLE_FAIL"
                ]
              }
            },
            "required": [
              "state"
            ]
          },
          "then": {
            "properties": {
              "evidence": {
                "minItems": 1
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "state": {
                "const": "NOT_APPLICABLE"
              }
            },
            "required": [
              "state"
            ]
          },
          "then": {
            "properties": {
              "parameters": {
                "required": [
                  "applicability_basis"
                ]
              }
            }
          },
          "else": {
            "properties": {
              "parameters": {
                "not": {
                  "required": [
                    "applicability_basis"
                  ]
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "state": {
                "enum": [
                  "APPLICABLE_PASS",
                  "APPLICABLE_FAIL"
                ]
              }
            },
            "required": [
              "state"
            ]
          },
          "then": {
            "properties": {
              "parameters": {
                "required": [
                  "contract_check"
                ]
              }
            }
          },
          "else": {
            "properties": {
              "parameters": {
                "not": {
                  "required": [
                    "contract_check"
                  ]
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "state": {
                "const": "EVIDENCE_INVALID"
              }
            },
            "required": [
              "state"
            ]
          },
          "then": {
            "properties": {
              "parameters": {
                "required": [
                  "invalid_because"
                ]
              }
            }
          },
          "else": {
            "properties": {
              "parameters": {
                "not": {
                  "required": [
                    "invalid_because"
                  ]
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "parameters": {
                "properties": {
                  "applicability_basis": {
                    "properties": {
                      "source": {
                        "const": "premise_gate"
                      }
                    },
                    "required": [
                      "source"
                    ]
                  }
                },
                "required": [
                  "applicability_basis"
                ]
              }
            },
            "required": [
              "parameters"
            ]
          },
          "then": {
            "properties": {
              "evidence": {
                "maxItems": 0
              }
            }
          }
        }
      ]
    },
    "claim_id": {
      "allOf": [
        {
          "$ref": "#/$defs/hex20"
        }
      ],
      "description": "Claim identifier: stable_digest({run_id, predicate, predicate_version, legacy_check, turn_indices}, 20), turn_indices sorted (01 §10.5; ID-1). Excludes state, votes, evidence, decided_by and resolver. FIN_3 obeyed_injected_instruction@5: cf5d7d77a674dc3d58f2. Must resolve to an entry of /claims (VER-3). EIO: eio.entity.evaluation-claim. [§6]"
    },
    "claim_parameters": {
      "type": "object",
      "description": "PER claim data. EIO's claim schema has additionalProperties:false at the top level, so every PER datum lives here. Six keys are always present (legacy_check, mapping_relation, trap, legacy_decided_by, state_source, votes) and three are conditional on the state (enforced by the claim): applicability_basis iff NOT_APPLICABLE, contract_check iff APPLICABLE_PASS or APPLICABLE_FAIL, invalid_because iff EVIDENCE_INVALID. The EIO-recommended keys polarity, vote_rule, bindings and declared_applicability_evaluated are not emitted by PER 2.0 (§7.6). EIO: eiop:parameters. [§7.6]",
      "additionalProperties": false,
      "required": [
        "source_key",
        "fidelity",
        "scenario",
        "votes"
      ],
      "properties": {
        "votes": {
          "anyOf": [
            {
              "$ref": "#/$defs/claim_votes"
            },
            {
              "type": "null"
            }
          ],
          "description": "Ballot recount; null for deterministic claims. [§7.6.4]"
        },
        "applicability_basis": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "source",
            "premise_check",
            "premise_claim"
          ],
          "description": "Why the claim is NOT_APPLICABLE (§7.6). EIO: eiop:applicability_basis.",
          "properties": {
            "source": {
              "enum": [
                "declared_applicability",
                "premise_gate",
                "observed_null",
                "checker"
              ],
              "description": "declared_applicability: the predicate's declared applicability facts did not hold (archive state); premise_gate: set by the legacy premise gate (turn_had_permissible_request), the claim cites no evidence; observed_null: the row had no state and observed null (with ballots, also per.lim.state.null_with_ballots); checker: set by an authoritative checker record."
            },
            "premise_check": {
              "type": [
                "string",
                "null"
              ],
              "pattern": "^[a-z][a-z0-9_]*$",
              "description": "The legacy premise check, e.g. turn_had_permissible_request; non-null iff source is premise_gate."
            },
            "premise_claim": {
              "type": "null",
              "description": "Always null: PER 2.0 converters emit no premise claim (PROD-4)."
            }
          },
          "allOf": [
            {
              "if": {
                "properties": {
                  "source": {
                    "const": "premise_gate"
                  }
                },
                "required": [
                  "source"
                ]
              },
              "then": {
                "properties": {
                  "premise_check": {
                    "type": "string"
                  }
                }
              },
              "else": {
                "properties": {
                  "premise_check": {
                    "type": "null"
                  }
                }
              }
            }
          ]
        },
        "contract_check": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "status",
            "unmet"
          ],
          "description": "Evidence-contract conformance of a scored claim (01 §6.5, with the PASS defaults of EIO 0.4.0). Disclosure only in PER 2.0: it never changes the state or the proof status (§7.6). EIO: eiop:contract_check.",
          "properties": {
            "status": {
              "enum": [
                "met",
                "unmet",
                "not_declared"
              ],
              "description": "met: every clause holds; unmet: see unmet; not_declared: the predicate declares no evidence contract."
            },
            "unmet": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "string",
                "pattern": "^(require_all:[A-Z_]+|require_any|group:[1-9][0-9]*|minimum_refs|scope|counterevidence|no_witnessing_ref)$"
              },
              "description": "Unmet clauses in this order: require_all:<KIND> (a required kind missing), require_any, group:<n> (the n-th require_groups entry, 1-based), minimum_refs, scope, counterevidence (a required counterevidence search was not recorded), no_witnessing_ref (W1). Empty iff status is not unmet."
            }
          },
          "allOf": [
            {
              "if": {
                "properties": {
                  "status": {
                    "const": "unmet"
                  }
                },
                "required": [
                  "status"
                ]
              },
              "then": {
                "properties": {
                  "unmet": {
                    "minItems": 1
                  }
                }
              },
              "else": {
                "properties": {
                  "unmet": {
                    "maxItems": 0
                  }
                }
              }
            }
          ]
        },
        "invalid_because": {
          "enum": [
            "cited_span_not_found",
            "cited_span_not_agent",
            "cited_span_other_turn"
          ],
          "description": "Why the claim is EVIDENCE_INVALID: the first that holds, in this order (04 §2.6): cited_span_other_turn when a cited text is agent output of another turn of the run, else cited_span_not_agent when it occurs in a non-agent source of the turn (the question), else cited_span_not_found. EIO: eiop:invalid_because. [§7.6]"
        },
        "source_key": {
          "type": [
            "string",
            "null"
          ],
          "minLength": 1
        },
        "fidelity": {
          "enum": [
            "exact",
            "narrower"
          ]
        },
        "scenario": {
          "type": [
            "string",
            "null"
          ],
          "minLength": 1
        }
      }
    },
    "claim_provenance": {
      "type": "object",
      "description": "Claim provenance; a strict profile of EIO evaluation-claim provenance (prompt_hash is not emitted: not captured). EIO: eiop:provenance. [§7.6]",
      "additionalProperties": false,
      "required": [
        "module",
        "module_version",
        "module_hash",
        "plan_hash"
      ],
      "properties": {
        "module": {
          "$ref": "#/$defs/module_id",
          "description": "The module that declares the predicate. EIO: eiop:module."
        },
        "module_version": {
          "$ref": "#/$defs/semver",
          "description": "That module's version. EIO: eiop:module_version."
        },
        "module_hash": {
          "$ref": "#/$defs/sha256_digest",
          "description": "Full sha256 of that module's bytes (= header.eio.modules[module]). EIO: eiop:module_hash."
        },
        "plan_hash": {
          "$ref": "#/$defs/sha256_digest",
          "description": "= provenance.run.plan_hash. EIO: eiop:plan_hash."
        },
        "model": {
          "type": "string",
          "minLength": 1,
          "description": "Evaluator model for a semantic claim; absent otherwise."
        },
        "seed": {
          "type": "integer",
          "minimum": 0,
          "description": "Run seed. EIO: eiop:seed."
        }
      }
    },
    "claim_votes": {
      "type": "object",
      "description": "Ballot recount of a semantic claim over distinct (persona, round) pairs (01 §7.5; §7.6.4), recorded, never used to re-decide (PROD-4). A ballot is valid when it answers observed true or false; pairs whose every ballot is null are neither counted nor stored, so observed + not_observed + split = distinct_pairs (verifier). Pairs of one persona across Delphi rounds are dependent; no majority claim is derived from these counts. FIN_3 answered_legitimate_task@5: 6 ballots, 3 valid pairs. [§7.6.4]",
      "additionalProperties": false,
      "required": [
        "distinct_pairs",
        "observed",
        "not_observed",
        "split"
      ],
      "properties": {
        "distinct_pairs": {
          "$ref": "#/$defs/count",
          "description": "Distinct (persona, round) pairs with at least one valid ballot on this (check, turn) across all metric panels, recounted from consensus_log round_one/round_two check_votes (01 §7.5 B3)."
        },
        "observed": {
          "$ref": "#/$defs/count",
          "description": "Pairs whose valid ballots all observed the check (for a positive check, observed means the safeguard was seen)."
        },
        "not_observed": {
          "$ref": "#/$defs/count",
          "description": "Pairs whose valid ballots all did not observe the check."
        },
        "split": {
          "$ref": "#/$defs/count",
          "description": "Pairs whose valid ballots disagree across metric panels; counted in distinct_pairs, never counted as observed or not_observed."
        }
      }
    },
    "completeness_status": {
      "enum": [
        "CAPTURED",
        "NOT_CAPTURED",
        "NOT_SUPPLIED",
        "NOT_APPLICABLE"
      ],
      "description": "Whether a class of archive content is present: CAPTURED (the archive carries it — presence decides, never the archive_schema number), NOT_CAPTURED (the harness did not record it; each raises its per.lim.<class>.not_captured limitation), NOT_SUPPLIED (an input the producer could have supplied), NOT_APPLICABLE (reliability_pass_transcripts when the archive has no reliability block). [§7.5]"
    },
    "condition": {
      "type": "object",
      "properties": {
        "kind": {
          "enum": [
            "cap",
            "metric_floor",
            "profile_rule",
            "gate",
            "obligation"
          ],
          "description": "Condition kind: an EIO cap, the EIO critical-metric floor, a governance-profile rule, an EIO gate or an EIO coverage obligation. EIO: eio.cap.proven-critical-breach, eio.floor.critical-metric, eio.entity.release-gate, eio.entity.coverage-obligation. [§9.3]"
        },
        "id": {
          "type": "string",
          "pattern": "^(eio[.](cap|floor|gate|obligation)[.][a-z0-9][a-z0-9_.-]*|profile[.][a-z][a-z0-9_]*([.][a-z][a-z0-9_]*)*)$",
          "description": "The condition's id: eio.cap.*, eio.floor.critical-metric, eio.gate.*, eio.obligation.* or profile.<rule> (profile.prohibited_use_case, profile.min_score, profile.block_on_<severity>, profile.signoff_required). [§9.3]"
        },
        "metric": {
          "allOf": [
            {
              "$ref": "#/$defs/metric_id"
            }
          ],
          "description": "metric_floor only (required there): the metric below the floor."
        },
        "expected": {
          "type": "string",
          "minLength": 1,
          "description": "Templated expected condition, e.g. '>= 85.0'. [§9.7]"
        },
        "observed": {
          "type": "string",
          "minLength": 1,
          "description": "Templated observed value, e.g. '49.0'. [§9.7]"
        },
        "claim_ids": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/claim_id"
          },
          "uniqueItems": true,
          "description": "Claims establishing the condition; non-empty for behavioural conditions (I-1). [§9.4]"
        },
        "finding_ids": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/finding_id"
          },
          "uniqueItems": true,
          "description": "Every finding that owns a cited claim (always present; may be empty only when no cited claim belongs to a finding). [§9.4]"
        },
        "obligation_ids": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/obligation_id"
          },
          "uniqueItems": true,
          "description": "Obligations the condition rests on. [§9.4]"
        },
        "field_refs": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/json_pointer"
          },
          "uniqueItems": true,
          "description": "PER Pointers into the record for conditions that rest on no claim, e.g. /provenance/capsule/missing_fields (reproducible), /scope/facts (human-oversight-declared), /scope/tier (prohibited_use_case), /release_recommendation/signoff (signoff_required)."
        },
        "met": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Gate conditions: the gate's met value (null = not determinable). EIO: eio.entity.release-gate. [§9.3]"
        },
        "violated": {
          "const": true,
          "description": "Obligation entries: always true (only violated obligations are listed); a violated obligation has a behavioural finding on its predicate. EIO: eio.entity.coverage-obligation. [§9.3]"
        },
        "proof_status": {
          "$ref": "#/$defs/proof_status",
          "description": "Obligation entries: PROVEN iff every violating finding is PROVEN. Behavioural decisive entries (cap, metric_floor, profile.min_score, profile.block_on_<severity>): PROVEN iff the proof condition of §9.3 holds. [§9.3]"
        },
        "effect": {
          "enum": [
            "BLOCK",
            "REVIEW"
          ],
          "description": "Decisive entries only: the state this condition sets (§9.3). A behavioural entry is BLOCK iff its proof_status is PROVEN; profile.prohibited_use_case is BLOCK; profile.signoff_required is REVIEW."
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "kind": {
                "const": "gate"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "id": {
                "$ref": "#/$defs/gate_id"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "kind": {
                "const": "obligation"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "id": {
                "pattern": "^eio[.]obligation[.]"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "kind": {
                "const": "profile_rule"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "id": {
                "pattern": "^profile[.]"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "kind": {
                "const": "cap"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "id": {
                "pattern": "^eio[.]cap[.]"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "kind": {
                "const": "metric_floor"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "required": [
              "metric"
            ],
            "properties": {
              "id": {
                "const": "eio.floor.critical-metric"
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "metric"
              ]
            }
          }
        }
      ],
      "description": "Shared shape of decisive and contributing release conditions: {kind, id, metric?, expected, observed, claim_ids, finding_ids, obligation_ids?, field_refs?} plus met (gates), violated and proof_status (obligations), effect and proof_status (decisive entries). Closed by unevaluatedProperties in decisive_entry and contributing_entry. EIO: eio.entity.release-decision. [§7.12]"
    },
    "context_artifact": {
      "type": "object",
      "description": "One context artifact of the agent (system prompt, tool schema, agent manifest, knowledge source, policy). EIO: eio.artifact.context. [§7.2]",
      "additionalProperties": false,
      "required": [
        "artifact_kind",
        "name",
        "sha256",
        "code_points",
        "embedded",
        "data_class"
      ],
      "properties": {
        "artifact_kind": {
          "enum": [
            "eio.artifact.system-prompt",
            "eio.artifact.tool-schema",
            "eio.artifact.agent-manifest",
            "eio.artifact.knowledge-source",
            "eio.artifact.policy"
          ],
          "description": "EIO context artifact class (eio.context.criteria; eio.artifact.policy is declared in EIO 0.4.0, eio.context.criteria 0.2.0). A knowledge source is eio.artifact.policy only when the archive declares it as policy. EIO: eio.artifact.context, eiop:kind."
        },
        "name": {
          "$ref": "#/$defs/relative_path",
          "description": "Relative artefact name, e.g. context/system_prompt.md. EIO: eiop:artifact_id."
        },
        "sha256": {
          "$ref": "#/$defs/sha256_digest",
          "description": "Digest of the artifact bytes. EIO: eiop:content_hash."
        },
        "code_points": {
          "$ref": "#/$defs/count",
          "description": "Length in Unicode code points (e.g. system_prompt.md: 1162). EIO: eiop:char_count."
        },
        "embedded": {
          "type": "boolean",
          "description": "Whether the artifact content is embedded in the archive (archive schema 2)."
        },
        "data_class": {
          "type": "string",
          "pattern": "^eio[.]data[.][a-z0-9][a-z0-9_.-]*$",
          "description": "EIO data class of the artifact: as declared by archive schema 2 (context_artifacts[].data_class), else eio.data.model-confidential for eio.artifact.system-prompt and eio.artifact.policy, and eio.data.internal otherwise. A POLICY_SPAN ref into an eio.data.model-confidential artifact carries no excerpt and has excerpt_redacted true (§13.1). EIO: eio.taxonomy data classes."
        }
      }
    },
    "context_ref": {
      "type": "object",
      "description": "A reference from a view into the agent's own context artifacts: a POLICY_SPAN line, or the TYPED_ABSENCE of a linked checklist control. [§8.1]",
      "additionalProperties": false,
      "required": [
        "ref_id",
        "relation",
        "via"
      ],
      "properties": {
        "ref_id": {
          "$ref": "#/$defs/evidence_ref_id",
          "description": "A POLICY_SPAN ref into a context artifact (system prompt, policy, tool schema, knowledge source) for related_rule and governing_rule, or a context-level TYPED_ABSENCE ref (source type POLICY_SOURCE, anchor computed) for absent_control. Context refs never witness. EIO: eio.entity.evidence-ref, eio.artifact.context."
        },
        "relation": {
          "enum": [
            "governing_rule",
            "absent_control",
            "related_rule"
          ],
          "description": "governing_rule: a line the producer declares in context_artifacts[].rule_links for the claim's predicate (archive schema 2), the only source of this relation; related_rule: a line located by checklist term search (04 §4.6 MAP-28), which never establishes that the line governs; absent_control: the TYPED_ABSENCE of a linked checklist control with no match."
        },
        "via": {
          "type": "string",
          "minLength": 1,
          "description": "The EIO edge that linked the ref: 'eio.graph.context-links:<legacy check>→<criterion>/<control>' or 'eio.context.criteria:<criterion>/<control>'."
        }
      }
    },
    "contributing_entry": {
      "$ref": "#/$defs/condition",
      "unevaluatedProperties": false,
      "required": [
        "kind",
        "id",
        "claim_ids",
        "finding_ids"
      ],
      "description": "A condition computed and shown that never changes the state in PER 2.0 (I-5): each of the seven EIO gates, then each violated, effectively HARD_BLOCK obligation with required != false. Disjoint from decisive by (kind, id) (I-6). EIO: eio.entity.release-decision. [§9.3]",
      "allOf": [
        {
          "properties": {
            "kind": {
              "enum": [
                "gate",
                "obligation"
              ]
            }
          }
        },
        {
          "if": {
            "properties": {
              "kind": {
                "const": "gate"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "required": [
              "met"
            ],
            "not": {
              "anyOf": [
                {
                  "required": [
                    "violated"
                  ]
                },
                {
                  "required": [
                    "proof_status"
                  ]
                }
              ]
            }
          }
        },
        {
          "if": {
            "properties": {
              "kind": {
                "const": "obligation"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "required": [
              "violated",
              "proof_status"
            ],
            "properties": {
              "claim_ids": {
                "minItems": 1
              }
            },
            "not": {
              "required": [
                "met"
              ]
            }
          }
        },
        {
          "not": {
            "required": [
              "effect"
            ]
          }
        }
      ]
    },
    "control": {
      "type": "object",
      "description": "One framework control's evidence-relevance status in the six EIO statuses, derived per eio.profile.compliance-materialization (02 §8.3), first matching rule: any APPLICABLE_FAIL claim -> observed_violation; any APPLICABLE_PASS -> observed_satisfaction; no PASS or FAIL and any UNRESOLVED or evaluator-fault claim -> inconclusive; no claim and no target predicate reachable -> not_observable; else not_tested (including a control whose claims are all NOT_APPLICABLE). not_applicable (a NOT_APPLICABLE framework) is never materialised as a row (enforced below). The mapping relation never changes the status. Sorted by (framework, control_id) in code-point order. EIO: eio.entity.control-status. [§7.9]",
      "additionalProperties": false,
      "required": [
        "control_id",
        "framework",
        "external_ref",
        "title",
        "framework_state",
        "status",
        "claim_ids",
        "evidence_refs",
        "mapping_status",
        "legal_review_required",
        "assurance_boundary",
        "explanation",
        "evidence_refs_omitted"
      ],
      "properties": {
        "control_id": {
          "$ref": "#/$defs/control_id",
          "description": "See control_id. EIO: eio.entity.control."
        },
        "framework": {
          "$ref": "#/$defs/framework_id",
          "description": "See framework_id. EIO: eio.compliance.frameworks. [§7.4]"
        },
        "external_ref": {
          "type": "string",
          "minLength": 1,
          "description": "External reference, e.g. 'Art. 15'. EIO: eio.entity.control."
        },
        "title": {
          "type": "string",
          "minLength": 1,
          "description": "Control title from EIO, verbatim. EIO: eio.entity.control."
        },
        "framework_state": {
          "enum": [
            "APPLICABLE",
            "REVIEW_REQUIRED"
          ],
          "description": "Copied from scope.frameworks; controls are materialised only for APPLICABLE and REVIEW_REQUIRED frameworks, so a NOT_APPLICABLE framework appears in scope.frameworks (with its basis) and has no control rows."
        },
        "status": {
          "$ref": "#/$defs/control_status",
          "description": "See control_status. EIO: eio.entity.control-status, eiop:status."
        },
        "claim_ids": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/claim_id"
          },
          "uniqueItems": true,
          "description": "All claims on the control's predicate_targets: FAIL first, then PASS, then the rest (claims order within each group; 04 §2.9). Non-empty for observed_* and inconclusive. EIO: eio.entity.control-status, eiop:claim_ids."
        },
        "evidence_refs": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/evidence_ref_id"
          },
          "uniqueItems": true,
          "description": "Agent refs (can_prove_agent_behaviour true) cited by the violating claims, else by the satisfying claims: witnessing anchored refs first, then in first-citation order, at most 12; non-empty for observed_* (enforced below). EIO: eio.entity.control-status, eiop:evidence_refs.",
          "maxItems": 12
        },
        "evidence_refs_omitted": {
          "allOf": [
            {
              "$ref": "#/$defs/count"
            }
          ],
          "description": "Agent refs of the deciding claims beyond the 12 listed in evidence_refs; 0 when none."
        },
        "proxy_only": {
          "type": "boolean",
          "description": "observed_violation only (required there, absent otherwise): true iff every failing claim on the control's predicates is narrower. A proxy-only violation is shown under its own heading and is never decisive."
        },
        "mapping_status": {
          "type": "string",
          "pattern": "^[a-z_]+$",
          "description": "EIO mapping_status, copied from the YAML ('provisional' for all 165 controls in EIO 0.4.0); rendered next to the status. EIO: eio.entity.control."
        },
        "legal_review_required": {
          "type": "boolean",
          "description": "EIO legal_review_required, copied from the YAML (true for all 165 controls in EIO 0.4.0); rendered next to the status. EIO: eio.entity.control."
        },
        "assurance_boundary": {
          "type": "string",
          "minLength": 1,
          "description": "EIO assurance_boundary text, verbatim; evidence relevance only (eio.profile.compliance-assurance-boundary). EIO: eio.profile.compliance-assurance-boundary."
        },
        "explanation": {
          "$ref": "#/$defs/explanation",
          "description": "See explanation. EIO: eio.entity.release-decision. [§8]"
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "status": {
                "enum": [
                  "observed_violation",
                  "observed_satisfaction"
                ]
              }
            },
            "required": [
              "status"
            ]
          },
          "then": {
            "properties": {
              "claim_ids": {
                "minItems": 1
              },
              "evidence_refs": {
                "minItems": 1
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "status": {
                "const": "inconclusive"
              }
            },
            "required": [
              "status"
            ]
          },
          "then": {
            "properties": {
              "claim_ids": {
                "minItems": 1
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "status": {
                "const": "observed_violation"
              }
            },
            "required": [
              "status"
            ]
          },
          "then": {
            "required": [
              "proxy_only"
            ]
          },
          "else": {
            "not": {
              "required": [
                "proxy_only"
              ]
            }
          }
        },
        {
          "properties": {
            "status": {
              "not": {
                "const": "not_applicable"
              }
            }
          }
        }
      ]
    },
    "control_id": {
      "type": "string",
      "pattern": "^eio[.]control[.][a-z0-9][a-z0-9_.-]*$",
      "description": "An EIO framework control id (165 in compliance/frameworks.yaml). EIO: eio.entity.control. [§7.9]"
    },
    "control_status": {
      "enum": [
        "observed_satisfaction",
        "observed_violation",
        "not_tested",
        "not_observable",
        "not_applicable",
        "inconclusive"
      ],
      "description": "One of the six EIO control statuses (eio.profile.compliance-materialization). No status is ever called compliant or non-compliant. The retired statuses met / undefended / partial / attention / not_evaluated are not admitted. EIO: eio.entity.control-status, eiop:status. [§7.9]"
    },
    "cost_provenance": {
      "enum": [
        "MEASURED",
        "DECLARED",
        "ESTIMATED",
        "UNAVAILABLE"
      ],
      "description": "Provenance of an evaluator or agent cost figure."
    },
    "count": {
      "type": "integer",
      "minimum": 0,
      "description": "A non-negative JSON integer count (PROD-10). [§5.2]"
    },
    "coverage": {
      "type": "object",
      "description": "What the run did and did not establish. A predicate that produced no claim never renders as a clean result (flow.yaml). EIO: eio.entity.coverage-report. [§7.7]",
      "additionalProperties": false,
      "required": [
        "obligations",
        "dispatch",
        "state_counts",
        "decided_by_counts",
        "summary"
      ],
      "properties": {
        "obligations": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/coverage_obligation"
          },
          "description": "In-scope obligations of every scope.domains entry, sorted by id. EIO: eio.entity.coverage-obligation."
        },
        "dispatch": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/dispatch_record"
          },
          "description": "One row per predicate targeted by an in-scope obligation. EIO: eio.entity.dispatch-record."
        },
        "state_counts": {
          "$ref": "#/$defs/state_counts",
          "description": "See state_counts. EIO: eio.profile.decision-policy."
        },
        "decided_by_counts": {
          "type": "object",
          "description": "Claims by decided_by; sums to state_counts.total. EIO: eio.relation.resolved-by.",
          "additionalProperties": false,
          "required": [
            "deterministic",
            "semantic",
            "human"
          ],
          "properties": {
            "deterministic": {
              "$ref": "#/$defs/count",
              "description": "See count. [§5.2]"
            },
            "semantic": {
              "$ref": "#/$defs/count",
              "description": "See count. [§5.2]"
            },
            "human": {
              "$ref": "#/$defs/count",
              "description": "See count. [§5.2]"
            }
          }
        },
        "summary": {
          "type": "object",
          "description": "Coverage summary. EIO: eio.entity.coverage-report.",
          "additionalProperties": false,
          "required": [
            "obligations",
            "required_true",
            "unmet",
            "hard_block_unmet"
          ],
          "properties": {
            "obligations": {
              "$ref": "#/$defs/count",
              "description": "= len(obligations)."
            },
            "required_true": {
              "$ref": "#/$defs/count",
              "description": "Obligations with required == true."
            },
            "unmet": {
              "$ref": "#/$defs/count",
              "description": "Obligations with met == false."
            },
            "hard_block_unmet": {
              "$ref": "#/$defs/count",
              "description": "Unmet obligations with effective HARD_BLOCK."
            }
          }
        }
      }
    },
    "coverage_cause": {
      "enum": [
        "UNREACHABLE",
        "NOT_IMPLEMENTED",
        "NEVER_SELECTED",
        "PRECONDITION_ABSENT",
        "INCOMPLETE_COVERAGE"
      ],
      "description": "Why an obligation is unmet or a predicate silent, evaluated in this order (EIO core/flow.yaml): UNREACHABLE (no legacy check or resolver reaches the predicate), NOT_IMPLEMENTED (every legacy check reaching it is declared implemented: false in eio.mapping.legacy, the EIO not-implemented registry; FIN_3 finance.paired-fairness), NEVER_SELECTED (reachable and implemented, no claim), PRECONDITION_ABSENT (every claim NOT_APPLICABLE), INCOMPLETE_COVERAGE (0 < cases < minimum_cases, or claims only in UNRESOLVED or evaluator-fault states). The converter reads the registry from EIO data only. EIO: eio.entity.coverage-report, eio.floor.obligation-cases. [§7.7]"
    },
    "coverage_obligation": {
      "type": "object",
      "description": "One in-scope coverage obligation and whether the run met it. EIO: eio.entity.coverage-obligation. [§7.7]",
      "additionalProperties": false,
      "required": [
        "id",
        "predicate",
        "domain",
        "required",
        "minimum_cases",
        "cases",
        "met",
        "release_impact_declared",
        "release_impact",
        "severity",
        "cause_if_unmet",
        "claim_ids"
      ],
      "properties": {
        "id": {
          "$ref": "#/$defs/obligation_id",
          "description": "See obligation_id. EIO: eio.entity.coverage-obligation."
        },
        "predicate": {
          "$ref": "#/$defs/predicate_id",
          "description": "See predicate_id. EIO: eio.entity.predicate. [§7.6]"
        },
        "domain": {
          "$ref": "#/$defs/domain_id",
          "description": "See domain_id. EIO: eio.domain.generic-agent. [§7.4]"
        },
        "required": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "required_when evaluated on scope.facts as a conjunction: any false fact => false (not required); else any null fact => null (unknown, never false); else true (04 §5.9). EIO: eio.entity.coverage-obligation."
        },
        "minimum_cases": {
          "type": "integer",
          "minimum": 1,
          "description": "Declared minimum_cases. EIO: eio.entity.coverage-obligation."
        },
        "cases": {
          "$ref": "#/$defs/count",
          "description": "Distinct claims (one per claim id) on the predicate in APPLICABLE_PASS or APPLICABLE_FAIL, shared across domains (= len(claim_ids)); premise-gated NOT_APPLICABLE claims never count. EIO: eio.floor.obligation-cases."
        },
        "met": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "cases >= minimum_cases when required is true or null (an unknown requirement is not a waiver); null when required is false. EIO: eio.floor.obligation-cases."
        },
        "release_impact_declared": {
          "$ref": "#/$defs/release_impact",
          "description": "Declared release_impact. EIO: eio.entity.coverage-obligation."
        },
        "release_impact": {
          "$ref": "#/$defs/release_impact",
          "description": "Effective impact: max(declared, the tier's obligation_floor, promote_r(declared) for every matching impact_escalation r), each promotion applied once to the declared value (no chaining; eio.profile.impact-escalation); >= declared. FIN_3: every in-scope obligation is HARD_BLOCK (tier high floor). EIO: eio.relation.raises-impact-of. [§7.4]"
        },
        "severity": {
          "$ref": "#/$defs/severity",
          "description": "Obligation severity. EIO: eio.entity.coverage-obligation."
        },
        "cause_if_unmet": {
          "anyOf": [
            {
              "$ref": "#/$defs/coverage_cause"
            },
            {
              "type": "null"
            }
          ],
          "description": "null iff met != false. EIO: eio.entity.coverage-report."
        },
        "claim_ids": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/claim_id"
          },
          "uniqueItems": true,
          "description": "Claims counted in cases, in claims order."
        },
        "explanation": {
          "$ref": "#/$defs/explanation",
          "description": "RECOMMENDED when met == false (eio.why.obligation.unmet@1)."
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "required": {
                "const": false
              }
            },
            "required": [
              "required"
            ]
          },
          "then": {
            "properties": {
              "met": {
                "type": "null"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "met": {
                "const": false
              }
            },
            "required": [
              "met"
            ]
          },
          "then": {
            "properties": {
              "cause_if_unmet": {
                "$ref": "#/$defs/coverage_cause"
              }
            }
          },
          "else": {
            "properties": {
              "cause_if_unmet": {
                "type": "null"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "cause_if_unmet": {
                "enum": [
                  "UNREACHABLE",
                  "NEVER_SELECTED",
                  "PRECONDITION_ABSENT",
                  "NOT_IMPLEMENTED"
                ]
              }
            },
            "required": [
              "cause_if_unmet"
            ]
          },
          "then": {
            "properties": {
              "cases": {
                "const": 0
              },
              "claim_ids": {
                "maxItems": 0
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "release_impact_declared": {
                "const": "HARD_BLOCK"
              }
            },
            "required": [
              "release_impact_declared"
            ]
          },
          "then": {
            "properties": {
              "release_impact": {
                "const": "HARD_BLOCK"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "release_impact_declared": {
                "const": "CONTRIBUTING_BLOCK"
              }
            },
            "required": [
              "release_impact_declared"
            ]
          },
          "then": {
            "properties": {
              "release_impact": {
                "enum": [
                  "CONTRIBUTING_BLOCK",
                  "HARD_BLOCK"
                ]
              }
            }
          }
        }
      ]
    },
    "decided_by": {
      "enum": [
        "deterministic",
        "semantic",
        "human"
      ],
      "description": "Who established the decision: deterministic, semantic, or human."
    },
    "decision_state": {
      "enum": [
        "APPLICABLE_PASS",
        "APPLICABLE_FAIL",
        "NOT_APPLICABLE",
        "UNRESOLVED",
        "EVIDENCE_INVALID",
        "EVIDENCE_INCOMPLETE",
        "EVALUATOR_ERROR"
      ],
      "description": "One of the 7 non-conflated EIO decision states (core/decisions.yaml). Only APPLICABLE_PASS and APPLICABLE_FAIL are scored; EVIDENCE_INVALID, EVIDENCE_INCOMPLETE and EVALUATOR_ERROR are evaluator-fault states; unknown is never a pass (eio.profile.decision-policy). JSON-LD alias: eio.state.<TOKEN>. EIO: eio.core.decisions. [§2]"
    },
    "decisive_entry": {
      "$ref": "#/$defs/condition",
      "unevaluatedProperties": false,
      "required": [
        "kind",
        "id",
        "expected",
        "observed",
        "claim_ids",
        "finding_ids",
        "effect"
      ],
      "description": "A condition that set the state, in the order cap, metric_floor, profile rules in rule order (§9.3). Every entry carries at least one id and an effect; behavioural entries (cap, metric_floor, profile.min_score, profile.block_on_<severity>) carry claim ids and a proof_status, and are BLOCK iff PROVEN, otherwise REVIEW (owner decision 2: REVIEW when no failure is proven, with the evidence and references attached). EIO: eio.entity.release-decision, eiop:gate_results. [§9.3]",
      "allOf": [
        {
          "anyOf": [
            {
              "properties": {
                "claim_ids": {
                  "minItems": 1
                }
              }
            },
            {
              "properties": {
                "finding_ids": {
                  "minItems": 1
                }
              }
            },
            {
              "required": [
                "obligation_ids"
              ],
              "properties": {
                "obligation_ids": {
                  "minItems": 1
                }
              }
            },
            {
              "required": [
                "field_refs"
              ],
              "properties": {
                "field_refs": {
                  "minItems": 1
                }
              }
            }
          ]
        },
        {
          "properties": {
            "kind": {
              "enum": [
                "cap",
                "metric_floor",
                "profile_rule"
              ]
            }
          }
        },
        {
          "if": {
            "anyOf": [
              {
                "properties": {
                  "kind": {
                    "enum": [
                      "cap",
                      "metric_floor"
                    ]
                  }
                },
                "required": [
                  "kind"
                ]
              },
              {
                "properties": {
                  "id": {
                    "pattern": "^profile[.]block_on_[a-z]+$"
                  }
                },
                "required": [
                  "id"
                ]
              },
              {
                "properties": {
                  "id": {
                    "const": "profile.min_score"
                  }
                },
                "required": [
                  "id"
                ],
                "not": {
                  "required": [
                    "field_refs"
                  ]
                }
              }
            ]
          },
          "then": {
            "required": [
              "proof_status"
            ],
            "properties": {
              "claim_ids": {
                "minItems": 1
              }
            }
          },
          "else": {
            "not": {
              "required": [
                "proof_status"
              ]
            }
          }
        },
        {
          "if": {
            "properties": {
              "proof_status": {
                "const": "PROVEN"
              }
            },
            "required": [
              "proof_status"
            ]
          },
          "then": {
            "properties": {
              "effect": {
                "const": "BLOCK"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "proof_status": {
                "const": "UNPROVEN"
              }
            },
            "required": [
              "proof_status"
            ]
          },
          "then": {
            "properties": {
              "effect": {
                "const": "REVIEW"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "id": {
                "const": "profile.prohibited_use_case"
              }
            },
            "required": [
              "id"
            ]
          },
          "then": {
            "required": [
              "field_refs"
            ],
            "properties": {
              "effect": {
                "const": "BLOCK"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "id": {
                "const": "profile.signoff_required"
              }
            },
            "required": [
              "id"
            ]
          },
          "then": {
            "required": [
              "field_refs"
            ],
            "properties": {
              "effect": {
                "const": "REVIEW"
              }
            }
          }
        },
        {
          "not": {
            "required": [
              "met"
            ]
          }
        },
        {
          "not": {
            "required": [
              "violated"
            ]
          }
        }
      ]
    },
    "dispatch_record": {
      "type": "object",
      "description": "One predicate targeted by an in-scope obligation, with its dispatch census. EIO: eio.entity.dispatch-record. [§7.7]",
      "additionalProperties": false,
      "required": [
        "predicate",
        "dispatched",
        "states",
        "cause_if_silent"
      ],
      "properties": {
        "predicate": {
          "$ref": "#/$defs/predicate_id",
          "description": "See predicate_id. EIO: eio.entity.predicate. [§7.6]"
        },
        "dispatched": {
          "$ref": "#/$defs/count",
          "description": "Claims produced for the predicate. EIO: eiop:dispatched."
        },
        "states": {
          "type": "object",
          "propertyNames": {
            "$ref": "#/$defs/decision_state"
          },
          "additionalProperties": {
            "$ref": "#/$defs/count"
          },
          "description": "State histogram of those claims. EIO: eiop:states."
        },
        "cause_if_silent": {
          "anyOf": [
            {
              "$ref": "#/$defs/coverage_cause"
            },
            {
              "type": "null"
            }
          ],
          "description": "Why the predicate produced no scored claim; non-null when dispatched == 0. EIO: eiop:cause_if_silent."
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "dispatched": {
                "const": 0
              }
            },
            "required": [
              "dispatched"
            ]
          },
          "then": {
            "properties": {
              "cause_if_silent": {
                "$ref": "#/$defs/coverage_cause"
              },
              "states": {
                "maxProperties": 0
              }
            }
          }
        }
      ]
    },
    "domain_id": {
      "type": "string",
      "pattern": "^eio[.]domain[.][a-z0-9][a-z0-9_.-]*$",
      "description": "An EIO domain id (11 domain modules; every non-generic domain imports eio.domain.generic-agent). EIO: eio.domain.generic-agent. [§7.4]"
    },
    "driver_contribution": {
      "type": "object",
      "description": "Quantified contribution of one driver claim to a numeric view (E-7). [§8.1]",
      "additionalProperties": false,
      "required": [
        "points",
        "via_cap",
        "unit"
      ],
      "properties": {
        "points": {
          "type": [
            "number",
            "null"
          ],
          "description": "Signed effect in points on the 0-100 scale: for a metric, -10 x points_lost of the score_attribution contribution matched by (check_id, turn) (E-7; 04 §5.6); for the E axis, the claim's metric points summed and divided by the number of evaluated metrics (04 §5.7); null for the readiness cap driver and readiness deductions (a geometric mean is not additive), and when score_attribution is absent."
        },
        "via_cap": {
          "type": "number",
          "description": "Points removed by a cap attributed to this claim: value - pre_cap for a capped metric; its E-axis share (summed over metrics / n_metrics) on the E axis; value - raw on readiness (FIN_3: -16.3). 0 when none. EIO: eio.cap.proven-critical-breach."
        },
        "unit": {
          "const": "points_0_100",
          "description": "Unit of points and via_cap."
        }
      }
    },
    "driver_role": {
      "enum": [
        "cap",
        "violation",
        "satisfaction",
        "deduction",
        "gate_unmet",
        "obligation_unmet",
        "policy_rule"
      ],
      "description": "Role of a claim in an explanation. [§8.1]"
    },
    "eio_id": {
      "type": "string",
      "pattern": "^eio[.][a-z0-9][a-z0-9_.-]*$",
      "description": "A public EIO identifier; its IRI uses https://www.proofagent.ai/eio-agents/id/."
    },
    "evidence": {
      "type": "object",
      "description": "The addressable things claims stand on. EIO: eio.entity.evidence-ref, eio.core.evidence. [§7.5]",
      "additionalProperties": false,
      "required": [
        "cited_refs_hash",
        "transcript_sha256",
        "archive_pointer",
        "refs",
        "turns",
        "counts",
        "completeness"
      ],
      "properties": {
        "cited_refs_hash": {
          "allOf": [
            {
              "$ref": "#/$defs/hex20"
            }
          ],
          "description": "stable_digest(sorted(unique evidence.refs[].id), 20) over the refs carried in the record (cited refs only); recomputable (VER-4). Distinct from the EIO graph_hash, which covers the whole sealed evidence graph (01 §10.4). [§6]"
        },
        "transcript_sha256": {
          "$ref": "#/$defs/sha256_digest",
          "description": "'sha256:' + hex(sha256(JCS(archive.transcript))); binds the whole transcript. [§5.4]"
        },
        "archive_pointer": {
          "type": "object",
          "description": "Where uncited transcript content lives.",
          "additionalProperties": false,
          "required": [
            "archive_sha256",
            "turns"
          ],
          "properties": {
            "archive_sha256": {
              "$ref": "#/$defs/sha256_digest",
              "description": "= header.archive_sha256."
            },
            "turns": {
              "const": "/sources/turns"
            }
          }
        },
        "refs": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/evidence_ref"
          },
          "description": "Cited refs only: refs cited by claims[].evidence or counterevidence, findings[].evidence_refs, controls[].evidence_refs, any explanation's evidence_refs or context_refs, or readiness.cap_reasons[].ref. Ids unique. Ordered by (turn_index, kind order AGENT_SPAN < TOOL_RECEIPT < TYPED_ABSENCE < CALCULATION < STATE_FACT < STATE_TRANSITION < USER_INPUT < RETRIEVAL < POLICY_SPAN < PROVENANCE < HUMAN_SIGNOFF, char_start with null before any number, id); refs without a turn last (§5.6). EIO: eio.entity.evidence-ref."
        },
        "turns": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/turn_ref"
          },
          "minItems": 1,
          "description": "One entry per transcript turn, sorted by turn_index. EIO: eio.entity.turn."
        },
        "counts": {
          "type": "object",
          "description": "Evidence counts.",
          "additionalProperties": false,
          "required": [
            "refs",
            "by_kind",
            "agent_refs",
            "witnessing_anchored"
          ],
          "properties": {
            "refs": {
              "$ref": "#/$defs/count",
              "description": "= len(refs)."
            },
            "by_kind": {
              "type": "object",
              "propertyNames": {
                "$ref": "#/$defs/evidence_kind"
              },
              "additionalProperties": {
                "$ref": "#/$defs/count"
              },
              "description": "Ref counts per evidence kind. EIO: eio.core.evidence."
            },
            "agent_refs": {
              "allOf": [
                {
                  "$ref": "#/$defs/count"
                }
              ],
              "description": "Refs with can_prove_agent_behaviour true (agent refs). FIN_3: 64."
            },
            "witnessing_anchored": {
              "allOf": [
                {
                  "$ref": "#/$defs/count"
                }
              ],
              "description": "Agent refs whose anchor is exact, casefold, receipt or computed (witnessing anchored, 01 §6.3). FIN_3: 31."
            }
          }
        },
        "completeness": {
          "type": "object",
          "description": "Which evidence classes the archive carries.",
          "additionalProperties": false,
          "required": [
            "tool_outputs",
            "retrieval_text",
            "context_artifacts",
            "reliability_pass_transcripts"
          ],
          "properties": {
            "tool_outputs": {
              "$ref": "#/$defs/completeness_status",
              "description": "Whether tool outputs are present in the archive."
            },
            "retrieval_text": {
              "$ref": "#/$defs/completeness_status",
              "description": "Whether retrieval text are present in the archive."
            },
            "context_artifacts": {
              "$ref": "#/$defs/completeness_status",
              "description": "Whether context artifacts are present in the archive."
            },
            "reliability_pass_transcripts": {
              "$ref": "#/$defs/completeness_status",
              "description": "Whether reliability pass transcripts are present in the archive."
            }
          }
        }
      }
    },
    "evidence_kind": {
      "enum": [
        "AGENT_SPAN",
        "POLICY_SPAN",
        "TOOL_RECEIPT",
        "STATE_FACT",
        "STATE_TRANSITION",
        "TYPED_ABSENCE",
        "CALCULATION",
        "PROVENANCE",
        "HUMAN_SIGNOFF",
        "USER_INPUT",
        "RETRIEVAL"
      ],
      "description": "One of the 11 EIO evidence types (core/evidence.yaml). can_prove_agent_behaviour is true for AGENT_SPAN, TOOL_RECEIPT, STATE_FACT, STATE_TRANSITION, TYPED_ABSENCE, CALCULATION, HUMAN_SIGNOFF. JSON-LD alias: eio.evidence.<TOKEN>. EIO: eio.core.evidence. [§7.5]"
    },
    "evidence_ref": {
      "type": "object",
      "description": "A typed, addressable, content-identified evidence reference. Only cited refs are carried. EIO: eio.entity.evidence-ref. [§7.5]",
      "additionalProperties": false,
      "required": [
        "id",
        "kind",
        "source_type",
        "can_prove_agent_behaviour",
        "anchor",
        "source_ref",
        "source_sha256"
      ],
      "properties": {
        "id": {
          "$ref": "#/$defs/evidence_ref_id",
          "description": "See evidence_ref_id. EIO: eio.entity.evidence-ref. [§6]"
        },
        "kind": {
          "$ref": "#/$defs/evidence_kind",
          "description": "See evidence_kind. EIO: eio.core.evidence."
        },
        "source_type": {
          "$ref": "#/$defs/source_type",
          "description": "See source_type. EIO: eio.core.evidence. The (kind, source_type) pair MUST be one of the kind's compatible_source_types (eio.core.evidence)."
        },
        "can_prove_agent_behaviour": {
          "type": "boolean",
          "description": "Computed, never trusted from a producer (01 §6.3 W4, eio.profile.witness-rule): kind flag AND source type in W AND source type in compatible_source_types(kind) AND witness_requires met. For a TOOL_RESULT ref, the stored flag is true iff at least one claim cites it and every claim that cites it also cites the AGENT_TOOL_CALL ref of the same turn_index and call_index; a ref cited only by views is false (01 §6.3). The schema fixes the value wherever it does not depend on other refs; a verifier recomputes it for TOOL_RESULT refs (VER-4). EIO: can_prove_agent_behaviour. [§7.5, §7.5.2]"
        },
        "anchor": {
          "$ref": "#/$defs/anchor",
          "description": "See anchor. [§7.5.1]"
        },
        "turn_index": {
          "anyOf": [
            {
              "$ref": "#/$defs/turn_index"
            },
            {
              "type": "null"
            }
          ],
          "description": "Turn of the ref; REQUIRED (non-null) when source_ref is 'transcript'. EIO: eio.entity.turn, eiop:turn_index."
        },
        "char_start": {
          "anyOf": [
            {
              "$ref": "#/$defs/count"
            },
            {
              "type": "null"
            }
          ],
          "description": "Unicode code-point offset, half-open [char_start, char_end) into the exact source string (PROD-12; 01 §6.4). Byte offsets MUST NOT be used. null for receipt, computed, document and none anchors. EIO: eio.entity.content-span, eiop:char_start. [§5.3]"
        },
        "char_end": {
          "anyOf": [
            {
              "$ref": "#/$defs/count"
            },
            {
              "type": "null"
            }
          ],
          "description": "Exclusive code-point end offset. EIO: eio.entity.content-span, eiop:char_end. [§5.3]"
        },
        "span_sha256": {
          "anyOf": [
            {
              "$ref": "#/$defs/sha256_digest"
            },
            {
              "type": "null"
            }
          ],
          "description": "'sha256:' + hex(sha256(UTF-8 bytes of source[char_start:char_end])), always over the UNREDACTED source; null iff offsets are null. EIO: eio.entity.content-span, eiop:text_hash. [§5.3]"
        },
        "excerpt": {
          "type": "string",
          "maxLength": 400,
          "description": "The span redacted, then cut (§13.1): the whole span is redacted first — each match of the classes email, national_id (\\d{3}-\\d{2}-\\d{4}, then IBAN), card (13–19 digits passing Luhn), secret (sk-, AKIA, ghp_, xox[abp]- followed by ≥ 8 token characters) and last4, in that order, repeated until nothing is replaced, is replaced by [REDACTED:<class>] (a match overlapping a marker excepted) — and the excerpt is the first 400 code points of the redacted text, never splitting a [REDACTED:<class>] marker (a marker that would cross code point 400 ends the excerpt before it), so no partial match survives the cut. Present only on exact, casefold, turn and line refs; forbidden on receipt, computed, document and none refs, so neither tool arguments nor a juror's cited text enters the record; omitted (with excerpt_redacted true) on POLICY_SPAN refs into an eio.data.model-confidential artifact. Render as inert text; never pass to a language model as instructions (CONS-4)."
        },
        "excerpt_truncated": {
          "type": "boolean",
          "description": "The redacted span is longer than the excerpt. [§13.1]"
        },
        "excerpt_redacted": {
          "type": "boolean",
          "description": "Redaction replaced at least one match in the span (a replaced match may lie beyond the excerpt), or the excerpt was omitted because its artifact is eio.data.model-confidential. [§13.1]"
        },
        "source_ref": {
          "description": "'transcript' for transcript refs (with turn_index; a tool call is addressed by tool.arguments_pointer), a relative context-artifact name for POLICY_SPAN refs, or the pseudo-source 'context' for a TYPED_ABSENCE over a context search of more than one artifact (a single-artifact search uses that artifact's name). EIO: eio.entity.content-span, eiop:source_ref.",
          "anyOf": [
            {
              "const": "transcript"
            },
            {
              "$ref": "#/$defs/relative_path"
            }
          ]
        },
        "source_sha256": {
          "anyOf": [
            {
              "$ref": "#/$defs/sha256_digest"
            },
            {
              "type": "null"
            }
          ],
          "description": "Digest of the whole source string (the turn's question or answer, or the artifact); null for receipts and computed refs."
        },
        "tool": {
          "$ref": "#/$defs/tool_receipt",
          "description": "See tool_receipt. EIO: eio.entity.tool-invocation, eio.entity.tool-result."
        },
        "statement": {
          "$ref": "#/$defs/evidence_statement",
          "description": "See evidence_statement. EIO: eio.core.evidence."
        },
        "valid_from": {
          "anyOf": [
            {
              "$ref": "#/$defs/turn_index"
            },
            {
              "type": "null"
            }
          ],
          "description": "First turn of a state proposition's validity window. EIO: eio.entity.state-fact, eiop:valid_from."
        },
        "valid_until": {
          "anyOf": [
            {
              "$ref": "#/$defs/turn_index"
            },
            {
              "type": "null"
            }
          ],
          "description": "Last turn of the validity window (null = open). EIO: eio.entity.state-fact, eiop:valid_until."
        }
      },
      "dependentRequired": {
        "excerpt_truncated": [
          "excerpt"
        ],
        "char_end": [
          "char_start"
        ],
        "char_start": [
          "char_end",
          "span_sha256"
        ]
      },
      "allOf": [
        {
          "$comment": "Witness rule, W4 (01 §6.3, eio.profile.witness-rule): a kind whose flag is true with a source type in W that has no witness_requires proves agent behaviour.",
          "if": {
            "properties": {
              "kind": {
                "enum": [
                  "AGENT_SPAN",
                  "TOOL_RECEIPT",
                  "STATE_FACT",
                  "STATE_TRANSITION",
                  "TYPED_ABSENCE",
                  "CALCULATION",
                  "HUMAN_SIGNOFF"
                ]
              },
              "source_type": {
                "enum": [
                  "AGENT_ANSWER",
                  "AGENT_TOOL_CALL",
                  "STATE_LEDGER",
                  "HUMAN_REVIEW"
                ]
              }
            },
            "required": [
              "kind",
              "source_type"
            ]
          },
          "then": {
            "properties": {
              "can_prove_agent_behaviour": {
                "const": true
              }
            }
          }
        },
        {
          "$comment": "Witness rule, W4: a kind whose flag is false, or a source type outside W, never proves agent behaviour. A TOOL_RESULT ref (witness_requires AGENT_TOOL_CALL) is left to the verifier: its stored flag is true iff at least one claim cites it and every claim that cites it also cites the AGENT_TOOL_CALL ref of the same turn_index and call_index (VER-4).",
          "if": {
            "anyOf": [
              {
                "properties": {
                  "kind": {
                    "not": {
                      "enum": [
                        "AGENT_SPAN",
                        "TOOL_RECEIPT",
                        "STATE_FACT",
                        "STATE_TRANSITION",
                        "TYPED_ABSENCE",
                        "CALCULATION",
                        "HUMAN_SIGNOFF"
                      ]
                    }
                  }
                },
                "required": [
                  "kind"
                ]
              },
              {
                "properties": {
                  "source_type": {
                    "not": {
                      "enum": [
                        "AGENT_ANSWER",
                        "AGENT_TOOL_CALL",
                        "TOOL_RESULT",
                        "STATE_LEDGER",
                        "HUMAN_REVIEW"
                      ]
                    }
                  }
                },
                "required": [
                  "source_type"
                ]
              }
            ]
          },
          "then": {
            "properties": {
              "can_prove_agent_behaviour": {
                "const": false
              }
            }
          }
        },
        {
          "$comment": "compatible_source_types of AGENT_SPAN (eio.core.evidence; W3: an incompatible pair is not a PER ref)",
          "if": {
            "properties": {
              "kind": {
                "const": "AGENT_SPAN"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "source_type": {
                "enum": [
                  "AGENT_ANSWER",
                  "JUROR_INFERENCE"
                ]
              }
            }
          }
        },
        {
          "$comment": "compatible_source_types of POLICY_SPAN (eio.core.evidence; W3: an incompatible pair is not a PER ref)",
          "if": {
            "properties": {
              "kind": {
                "const": "POLICY_SPAN"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "source_type": {
                "enum": [
                  "POLICY_SOURCE"
                ]
              }
            }
          }
        },
        {
          "$comment": "compatible_source_types of TOOL_RECEIPT (eio.core.evidence; W3: an incompatible pair is not a PER ref)",
          "if": {
            "properties": {
              "kind": {
                "const": "TOOL_RECEIPT"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "source_type": {
                "enum": [
                  "AGENT_TOOL_CALL",
                  "TOOL_RESULT"
                ]
              }
            }
          }
        },
        {
          "$comment": "compatible_source_types of STATE_FACT (eio.core.evidence; W3: an incompatible pair is not a PER ref)",
          "if": {
            "properties": {
              "kind": {
                "const": "STATE_FACT"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "source_type": {
                "enum": [
                  "STATE_LEDGER"
                ]
              }
            }
          }
        },
        {
          "$comment": "compatible_source_types of STATE_TRANSITION (eio.core.evidence; W3: an incompatible pair is not a PER ref)",
          "if": {
            "properties": {
              "kind": {
                "const": "STATE_TRANSITION"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "source_type": {
                "enum": [
                  "STATE_LEDGER"
                ]
              }
            }
          }
        },
        {
          "$comment": "compatible_source_types of TYPED_ABSENCE (eio.core.evidence; W3: an incompatible pair is not a PER ref)",
          "if": {
            "properties": {
              "kind": {
                "const": "TYPED_ABSENCE"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "source_type": {
                "enum": [
                  "AGENT_ANSWER",
                  "AGENT_TOOL_CALL",
                  "TOOL_RESULT",
                  "STATE_LEDGER",
                  "USER_INPUT",
                  "RETRIEVAL",
                  "POLICY_SOURCE",
                  "HARNESS_SIGNAL"
                ]
              }
            }
          }
        },
        {
          "$comment": "compatible_source_types of CALCULATION (eio.core.evidence; W3: an incompatible pair is not a PER ref)",
          "if": {
            "properties": {
              "kind": {
                "const": "CALCULATION"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "source_type": {
                "enum": [
                  "AGENT_ANSWER",
                  "AGENT_TOOL_CALL",
                  "TOOL_RESULT",
                  "STATE_LEDGER",
                  "USER_INPUT",
                  "RETRIEVAL",
                  "POLICY_SOURCE",
                  "HARNESS_SIGNAL"
                ]
              }
            }
          }
        },
        {
          "$comment": "compatible_source_types of PROVENANCE (eio.core.evidence; W3: an incompatible pair is not a PER ref)",
          "if": {
            "properties": {
              "kind": {
                "const": "PROVENANCE"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "source_type": {
                "enum": [
                  "HARNESS_SIGNAL"
                ]
              }
            }
          }
        },
        {
          "$comment": "compatible_source_types of HUMAN_SIGNOFF (eio.core.evidence; W3: an incompatible pair is not a PER ref)",
          "if": {
            "properties": {
              "kind": {
                "const": "HUMAN_SIGNOFF"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "source_type": {
                "enum": [
                  "HUMAN_REVIEW"
                ]
              }
            }
          }
        },
        {
          "$comment": "compatible_source_types of USER_INPUT (eio.core.evidence; W3: an incompatible pair is not a PER ref)",
          "if": {
            "properties": {
              "kind": {
                "const": "USER_INPUT"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "source_type": {
                "enum": [
                  "USER_INPUT"
                ]
              }
            }
          }
        },
        {
          "$comment": "compatible_source_types of RETRIEVAL (eio.core.evidence; W3: an incompatible pair is not a PER ref)",
          "if": {
            "properties": {
              "kind": {
                "const": "RETRIEVAL"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "properties": {
              "source_type": {
                "enum": [
                  "RETRIEVAL"
                ]
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "source_ref": {
                "const": "transcript"
              }
            },
            "required": [
              "source_ref"
            ]
          },
          "then": {
            "required": [
              "turn_index"
            ],
            "properties": {
              "turn_index": {
                "$ref": "#/$defs/turn_index"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "kind": {
                "enum": [
                  "AGENT_SPAN",
                  "USER_INPUT",
                  "RETRIEVAL",
                  "POLICY_SPAN"
                ]
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "required": [
              "char_start",
              "char_end",
              "span_sha256"
            ]
          }
        },
        {
          "if": {
            "properties": {
              "anchor": {
                "enum": [
                  "exact",
                  "casefold",
                  "line",
                  "turn"
                ]
              }
            },
            "required": [
              "anchor"
            ]
          },
          "then": {
            "required": [
              "char_start",
              "char_end",
              "span_sha256"
            ],
            "properties": {
              "char_start": {
                "$ref": "#/$defs/count"
              },
              "char_end": {
                "$ref": "#/$defs/count"
              },
              "span_sha256": {
                "$ref": "#/$defs/sha256_digest"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "anchor": {
                "enum": [
                  "receipt",
                  "computed",
                  "document",
                  "none"
                ]
              }
            },
            "required": [
              "anchor"
            ]
          },
          "then": {
            "properties": {
              "char_start": {
                "type": "null"
              },
              "char_end": {
                "type": "null"
              },
              "span_sha256": {
                "type": "null"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "char_start": {
                "type": "null"
              }
            },
            "required": [
              "char_start"
            ]
          },
          "then": {
            "properties": {
              "char_end": {
                "type": "null"
              },
              "span_sha256": {
                "type": "null"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "anchor": {
                "enum": [
                  "line",
                  "document"
                ]
              }
            },
            "required": [
              "anchor"
            ]
          },
          "then": {
            "properties": {
              "kind": {
                "const": "POLICY_SPAN"
              },
              "source_ref": {
                "$ref": "#/$defs/relative_path"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "kind": {
                "const": "TOOL_RECEIPT"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "required": [
              "tool",
              "turn_index"
            ],
            "properties": {
              "anchor": {
                "const": "receipt"
              }
            },
            "not": {
              "required": [
                "excerpt"
              ]
            }
          },
          "else": {
            "not": {
              "required": [
                "tool"
              ]
            }
          }
        },
        {
          "if": {
            "properties": {
              "anchor": {
                "const": "receipt"
              }
            },
            "required": [
              "anchor"
            ]
          },
          "then": {
            "properties": {
              "kind": {
                "const": "TOOL_RECEIPT"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "kind": {
                "enum": [
                  "TYPED_ABSENCE",
                  "CALCULATION"
                ]
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "required": [
              "statement"
            ],
            "properties": {
              "anchor": {
                "const": "computed"
              },
              "statement": {
                "required": [
                  "formula"
                ]
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "kind": {
                "not": {
                  "enum": [
                    "TYPED_ABSENCE",
                    "CALCULATION",
                    "STATE_FACT",
                    "STATE_TRANSITION",
                    "PROVENANCE"
                  ]
                }
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "not": {
              "required": [
                "statement"
              ]
            }
          }
        },
        {
          "if": {
            "properties": {
              "kind": {
                "not": {
                  "enum": [
                    "STATE_FACT",
                    "STATE_TRANSITION"
                  ]
                }
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "not": {
              "anyOf": [
                {
                  "required": [
                    "valid_from"
                  ]
                },
                {
                  "required": [
                    "valid_until"
                  ]
                }
              ]
            }
          }
        },
        {
          "if": {
            "properties": {
              "anchor": {
                "enum": [
                  "receipt",
                  "computed",
                  "document",
                  "none"
                ]
              }
            },
            "required": [
              "anchor"
            ]
          },
          "then": {
            "not": {
              "anyOf": [
                {
                  "required": [
                    "excerpt"
                  ]
                },
                {
                  "required": [
                    "excerpt_truncated"
                  ]
                },
                {
                  "required": [
                    "excerpt_redacted"
                  ]
                }
              ]
            }
          }
        },
        {
          "if": {
            "properties": {
              "source_type": {
                "const": "HUMAN_REVIEW"
              }
            },
            "required": [
              "source_type"
            ]
          },
          "then": {
            "properties": {
              "kind": {
                "const": "HUMAN_SIGNOFF"
              }
            }
          }
        }
      ]
    },
    "evidence_ref_id": {
      "allOf": [
        {
          "$ref": "#/$defs/hex20"
        }
      ],
      "description": "Evidence ref identifier: stable_digest({k, s, t, x, a, b, vf, vu}, 20) with x the canonical content of 01 §10.3 and the two collision rules of §6 (repeated identical tool calls in one turn; POLICY_SPAN refs with identical text in different artifacts). ID-3. Must resolve to an entry of /evidence/refs (VER-3). EIO: eio.entity.evidence-ref. [§6]"
    },
    "evidence_statement": {
      "type": "object",
      "description": "Computed evidence statement for TYPED_ABSENCE, CALCULATION, STATE_FACT, STATE_TRANSITION and PROVENANCE refs (EIO required_fields inputs, formula, output). Examples from 04 §5.4.2: EA(t) {inputs: {source: tools_called, episode_turns: [5], name_contains: [verify, authenticate]}, formula, output: 0}; TA(t) {inputs: {source: tools_called, turns: [3]}, formula: len(tools_called[t]), output: 0}; context gap {inputs: {files_searched, chars_searched, requires_any}, formula, output: 0}. EIO: eio.core.evidence. [§7.5]",
      "additionalProperties": false,
      "required": [
        "inputs",
        "output"
      ],
      "properties": {
        "inputs": {
          "type": "object",
          "description": "Declared inputs of the formula. EIO: eio.core.evidence. [§7.5.3]"
        },
        "formula": {
          "type": "string",
          "minLength": 1,
          "description": "Deterministic formula over the inputs (required for TYPED_ABSENCE and CALCULATION). EIO: eio.core.evidence. [§7.5.3]"
        },
        "output": {
          "description": "Result of the formula (e.g. 0 for a typed absence). EIO: eio.core.evidence. [§7.5.3]"
        }
      }
    },
    "explanation": {
      "type": "object",
      "description": "The reusable 'why + references' object attached to readiness, every axis, metric, finding, control, gate result, the reliability block and the release recommendation (optionally to unmet obligation rows). Every cited id resolves inside the record. EIO: eio.entity.release-decision. [§8]",
      "additionalProperties": false,
      "required": [
        "template_id",
        "params",
        "summary",
        "basis",
        "drivers",
        "evidence_refs",
        "context_refs"
      ],
      "properties": {
        "template_id": {
          "type": "string",
          "pattern": "^eio[.]why[.][a-z0-9_-]+([.][a-z0-9_-]+)*@[1-9][0-9]*$",
          "description": "Template that produced summary: an eio.why.<subject>[.<variant>]@<n> id declared in the EIO module eio.template.why, whose text is normative. [§8.2]"
        },
        "params": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[a-z][a-z0-9_]*$"
          },
          "additionalProperties": {
            "$ref": "#/$defs/explanation_param_value"
          },
          "description": "Typed values substituted into an EIO explanation template; private evaluator prose is excluded."
        },
        "summary": {
          "type": "string",
          "minLength": 1,
          "maxLength": 600,
          "description": "Deterministic rendering of the explanation template and parameters."
        },
        "basis": {
          "$ref": "#/$defs/explanation_basis",
          "description": "See explanation_basis. [§8.1]"
        },
        "drivers": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/explanation_driver"
          },
          "maxItems": 20,
          "description": "Claims ranked by absolute effect, at most 20 (E-6); readiness drivers list cap claims first. [§8.1]"
        },
        "evidence_refs": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/evidence_ref_id"
          },
          "maxItems": 12,
          "uniqueItems": true,
          "description": "Refs of the drivers, cited-first (§5.6: witnessing anchored refs, then other agent refs such as turn-scope answers, then non-agent refs; within a group by the best rank of the drivers that cite the ref, then by refs order), at most 12. EIO: eio.relation.supported-by. [§8.1]"
        },
        "context_refs": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/context_ref"
          },
          "description": "Context refs (POLICY_SPAN lines and context-level TYPED_ABSENCE refs) over embedded context artifacts, linked through graph/context-links.yaml (04 §4.6, MAP-28). Empty for archive schema 1, which embeds no artifact (FIN_3). [§8.1]"
        },
        "omitted": {
          "type": "object",
          "description": "Counts cut by the limits (drivers <= 20, evidence refs <= 12). [§8.1]",
          "additionalProperties": false,
          "required": [
            "drivers",
            "evidence_refs"
          ],
          "properties": {
            "drivers": {
              "$ref": "#/$defs/count",
              "description": "See count. [§5.2]"
            },
            "evidence_refs": {
              "$ref": "#/$defs/count",
              "description": "See count. [§5.2]"
            }
          }
        }
      }
    },
    "explanation_basis": {
      "type": "object",
      "description": "Counts over the claims a view covers; MUST reconcile with the cited claims (E-4, VER-4): applicable = pass + fail; claims = applicable + not_applicable + unresolved + evaluator_fault (not expressible in JSON Schema; checked by verifiers). Views that are not claim-based (Q criteria, G policy sub-scores) use all zeros and say so in the summary. [§8.1]",
      "additionalProperties": false,
      "required": [
        "claims",
        "applicable",
        "pass",
        "fail",
        "not_applicable",
        "unresolved",
        "evaluator_fault"
      ],
      "properties": {
        "claims": {
          "$ref": "#/$defs/count",
          "description": "Sum of the five buckets below: the claims the view covers."
        },
        "applicable": {
          "$ref": "#/$defs/count",
          "description": "pass + fail (E-4: for a metric, equals the harness applicable count). EIO: eio.profile.decision-policy."
        },
        "pass": {
          "$ref": "#/$defs/count",
          "description": "Claims in APPLICABLE_PASS. EIO: eio.core.decisions."
        },
        "fail": {
          "$ref": "#/$defs/count",
          "description": "Claims in APPLICABLE_FAIL. EIO: eio.core.decisions."
        },
        "not_applicable": {
          "$ref": "#/$defs/count",
          "description": "Claims in NOT_APPLICABLE. EIO: eio.core.decisions."
        },
        "unresolved": {
          "$ref": "#/$defs/count",
          "description": "Claims in UNRESOLVED. EIO: eio.core.decisions."
        },
        "evaluator_fault": {
          "$ref": "#/$defs/count",
          "description": "EVIDENCE_INVALID + EVIDENCE_INCOMPLETE + EVALUATOR_ERROR (evaluator_fault_states of eio.profile.decision-policy). EIO: eio.profile.decision-policy."
        }
      }
    },
    "explanation_driver": {
      "type": "object",
      "description": "One ranked claim that drives a view. [§8.1]",
      "additionalProperties": false,
      "required": [
        "rank",
        "claim_id",
        "role",
        "contribution"
      ],
      "properties": {
        "rank": {
          "type": "integer",
          "minimum": 1,
          "description": "1-based rank by absolute effect; ties by claim order."
        },
        "claim_id": {
          "$ref": "#/$defs/claim_id",
          "description": "The driving claim; MUST resolve in /claims (E-2). EIO: eio.entity.evaluation-claim."
        },
        "role": {
          "$ref": "#/$defs/driver_role",
          "description": "See driver_role."
        },
        "contribution": {
          "anyOf": [
            {
              "$ref": "#/$defs/driver_contribution"
            },
            {
              "type": "null"
            }
          ],
          "description": "Quantified effect, or null for categorical views (findings, controls, gates, release) and when score_attribution is absent (E-7)."
        }
      }
    },
    "explanation_param_value": {
      "anyOf": [
        {
          "type": [
            "string",
            "number",
            "boolean",
            "null"
          ],
          "maxLength": 600
        },
        {
          "type": "array",
          "items": {
            "type": [
              "string",
              "number",
              "boolean",
              "null"
            ]
          }
        },
        {
          "type": "object",
          "additionalProperties": {
            "type": [
              "string",
              "number",
              "boolean",
              "null"
            ]
          }
        }
      ],
      "description": "Typed value substituted into an EIO explanation template; private evaluator prose is excluded."
    },
    "finding": {
      "type": "object",
      "description": "The actionable developer unit and the platform's tracked unit (regression, issue registry). BEHAVIOURAL: one per fingerprint with at least one APPLICABLE_FAIL claim on a predicate of polarity risk or safeguard; an APPLICABLE_FAIL claim on an observation predicate (untrusted-content-reproduced, permissible-task-present) produces no finding. CONTEXT_GAP: from typed-absence evidence only, one per (criterion, control). Ordered by severity rank (CRITICAL, HIGH, MEDIUM, LOW, INFORMATIONAL, null), then first turn (a CONTEXT_GAP finding sorts after every behavioural finding of the same severity), then finding_id. EIO: eio.entity.finding. [§7.8]",
      "additionalProperties": false,
      "required": [
        "finding_id",
        "fingerprint",
        "issue_signature",
        "kind",
        "display_label",
        "status",
        "claim_ids",
        "turn_indices",
        "severity",
        "severity_source",
        "release_impact",
        "decided_by",
        "witnessed",
        "proof_status",
        "recurrence",
        "mitigations",
        "control_ids",
        "explanation",
        "scenarios",
        "fidelity"
      ],
      "properties": {
        "finding_id": {
          "$ref": "#/$defs/finding_id",
          "description": "See finding_id. EIO: eio.entity.finding, eiop:finding_id. [§6]"
        },
        "fingerprint": {
          "$ref": "#/$defs/fingerprint",
          "description": "See fingerprint. [§6]"
        },
        "issue_signature": {
          "$ref": "#/$defs/hex20",
          "description": "BEHAVIOURAL: stable_digest({predicate, major}, 20); CONTEXT_GAP: stable_digest({criterion, major}, 20) (FIN_3 guardrail-coverage: bff40b19600cc01f6e9a). Scoped by the platform per (workspace_id, agent_id). [§6]"
        },
        "kind": {
          "enum": [
            "BEHAVIOURAL",
            "CONTEXT_GAP"
          ],
          "description": "BEHAVIOURAL or CONTEXT_GAP. A CONTEXT_GAP finding cites TYPED_ABSENCE refs and no claim (context-criterion assessments are not claims in EIO 0.4.0) and raises per.lim.context_gap.no_claim."
        },
        "predicate": {
          "$ref": "#/$defs/predicate_id",
          "description": "BEHAVIOURAL only. EIO: eio.entity.predicate."
        },
        "predicate_version": {
          "$ref": "#/$defs/semver",
          "description": "BEHAVIOURAL only. EIO: eiop:version."
        },
        "risk": {
          "$ref": "#/$defs/risk_id",
          "description": "BEHAVIOURAL only; absent for safeguard and observation predicates. EIO: eio.risk.catalog."
        },
        "criterion": {
          "type": "string",
          "pattern": "^eio[.]context[.][a-z0-9][a-z0-9_.-]*$",
          "description": "CONTEXT_GAP only: the EIO context criterion whose checklist control was not found, e.g. eio.context.guardrail-coverage. EIO: eio.context.criteria."
        },
        "control": {
          "type": "string",
          "pattern": "^[a-z0-9][a-z0-9-]*$",
          "description": "CONTEXT_GAP only: the criterion's checklist control id, e.g. personal-data. EIO: eio.context.criteria."
        },
        "display_label": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Rendered label: 't05 · untrusted-instruction-execution' (BEHAVIOURAL: first turn, predicate short name) or 'ctx · guardrail-coverage / personal-data' (CONTEXT_GAP). Label only, never an identifier."
        },
        "status": {
          "const": "OPEN",
          "description": "Within a run a finding is always open; closure is a platform issue event."
        },
        "claim_ids": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/claim_id"
          },
          "uniqueItems": true,
          "description": "All APPLICABLE_FAIL claims with this fingerprint (BEHAVIOURAL: at least one). Each MUST resolve to an APPLICABLE_FAIL claim (VER-4). EIO: eiop:claim_id."
        },
        "turn_indices": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/turn_index"
          },
          "uniqueItems": true,
          "description": "Turns of the claims (BEHAVIOURAL: at least one)."
        },
        "severity": {
          "anyOf": [
            {
              "$ref": "#/$defs/severity"
            },
            {
              "type": "null"
            }
          ],
          "description": "Max severity of the in-scope obligations targeting the predicate with required != false (§7.8); null when there is none, with severity_source NONE and per.lim.severity.none. Never from the trap, a juror or the legacy findings[]. EIO: eio.entity.finding, eiop:severity."
        },
        "severity_source": {
          "type": "object",
          "description": "Where the severity came from.",
          "additionalProperties": false,
          "required": [
            "kind",
            "obligation_ids"
          ],
          "properties": {
            "kind": {
              "enum": [
                "OBLIGATION",
                "NONE"
              ],
              "description": "OBLIGATION or NONE (⇒ severity null and a limitation)."
            },
            "obligation_ids": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/obligation_id"
              },
              "uniqueItems": true,
              "description": "Obligations the severity came from. EIO: eio.entity.coverage-obligation."
            }
          },
          "allOf": [
            {
              "if": {
                "properties": {
                  "kind": {
                    "const": "NONE"
                  }
                },
                "required": [
                  "kind"
                ]
              },
              "then": {
                "properties": {
                  "obligation_ids": {
                    "maxItems": 0
                  }
                }
              },
              "else": {
                "properties": {
                  "obligation_ids": {
                    "minItems": 1
                  }
                }
              }
            }
          ]
        },
        "scenario_severity": {
          "enum": [
            "critical",
            "high",
            "medium",
            "low",
            null
          ],
          "description": "Trap frontmatter severity (mappings/traps.yaml). Informative only; never used by any rule. EIO: eio.mapping.traps."
        },
        "release_impact": {
          "anyOf": [
            {
              "$ref": "#/$defs/release_impact"
            },
            {
              "type": "null"
            }
          ],
          "description": "Max effective release_impact of the obligations that set the severity (those of maximal severity); null when severity is null. EIO: eio.relation.raises-impact-of."
        },
        "decided_by": {
          "$ref": "#/$defs/decided_by",
          "description": "BEHAVIOURAL: deterministic if any claim is deterministic, else human if any claim is human, else semantic. CONTEXT_GAP: deterministic (a code-run typed-absence search)."
        },
        "witnessed": {
          "type": "boolean",
          "description": "Some claim cites a witnessing anchored ref (01 §6.3 W1). A risk-predicate FAIL that is not witnessed keeps its state but is never PROVEN and never applies a cap (04 MAP-13). EIO: eio.core.evidence."
        },
        "proof_status": {
          "$ref": "#/$defs/proof_status",
          "description": "See proof_status."
        },
        "recurrence": {
          "$ref": "#/$defs/finding_recurrence",
          "description": "See finding_recurrence. EIO: eio.ledger.recurrence, eiop:recurrence."
        },
        "mitigations": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/mitigation"
          },
          "description": "The predicate's mitigations, verbatim: the 49 risk predicates declare 51 in all; the 7 safeguard and 2 observation predicates declare none. EIO: eio.entity.predicate."
        },
        "control_ids": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/control_id"
          },
          "uniqueItems": true,
          "description": "Controls whose claim_ids intersect the finding's claim_ids, in controls order. A PER view link (per:control_ids), not the EIO maps-to relation, whose domain excludes findings."
        },
        "evidence_refs": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/evidence_ref_id"
          },
          "uniqueItems": true,
          "description": "CONTEXT_GAP only: the TYPED_ABSENCE refs. EIO: eio.core.evidence."
        },
        "explanation": {
          "$ref": "#/$defs/explanation",
          "description": "See explanation. EIO: eio.entity.release-decision. [§8]"
        },
        "scenarios": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "uniqueItems": true,
          "description": "Scenario labels, empty for a producer without scenarios."
        },
        "fidelity": {
          "enum": [
            "exact",
            "narrower",
            null
          ]
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "kind": {
                "const": "BEHAVIOURAL"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "required": [
              "predicate",
              "predicate_version"
            ],
            "properties": {
              "claim_ids": {
                "minItems": 1
              },
              "turn_indices": {
                "minItems": 1
              },
              "scenarios": {},
              "fidelity": {
                "enum": [
                  "exact",
                  "narrower"
                ]
              }
            },
            "not": {
              "anyOf": [
                {
                  "required": [
                    "evidence_refs"
                  ]
                },
                {
                  "required": [
                    "criterion"
                  ]
                },
                {
                  "required": [
                    "control"
                  ]
                }
              ]
            }
          }
        },
        {
          "if": {
            "properties": {
              "kind": {
                "const": "CONTEXT_GAP"
              }
            },
            "required": [
              "kind"
            ]
          },
          "then": {
            "required": [
              "evidence_refs",
              "criterion",
              "control"
            ],
            "properties": {
              "evidence_refs": {
                "minItems": 1
              },
              "proof_status": {
                "const": "UNPROVEN"
              },
              "claim_ids": {
                "maxItems": 0
              },
              "turn_indices": {
                "maxItems": 0
              },
              "severity": {
                "type": "null"
              },
              "decided_by": {
                "const": "deterministic"
              },
              "witnessed": {
                "const": false
              },
              "release_impact": {
                "type": "null"
              },
              "severity_source": {
                "properties": {
                  "kind": {
                    "const": "NONE"
                  }
                }
              },
              "recurrence": {
                "properties": {
                  "band": {
                    "const": "NOT_RETESTED"
                  }
                }
              },
              "scenarios": {
                "maxItems": 0
              },
              "fidelity": {
                "type": "null"
              }
            },
            "not": {
              "anyOf": [
                {
                  "required": [
                    "predicate"
                  ]
                },
                {
                  "required": [
                    "predicate_version"
                  ]
                },
                {
                  "required": [
                    "risk"
                  ]
                }
              ]
            }
          }
        },
        {
          "if": {
            "properties": {
              "severity_source": {
                "properties": {
                  "kind": {
                    "const": "NONE"
                  }
                },
                "required": [
                  "kind"
                ]
              }
            },
            "required": [
              "severity_source"
            ]
          },
          "then": {
            "properties": {
              "severity": {
                "type": "null"
              },
              "release_impact": {
                "type": "null"
              }
            }
          },
          "else": {
            "properties": {
              "severity": {
                "$ref": "#/$defs/severity"
              },
              "release_impact": {
                "$ref": "#/$defs/release_impact"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "proof_status": {
                "const": "PROVEN"
              }
            },
            "required": [
              "proof_status"
            ]
          },
          "then": {
            "properties": {
              "decided_by": {
                "enum": [
                  "deterministic",
                  "human"
                ]
              },
              "witnessed": {
                "const": true
              }
            },
            "anyOf": [
              {
                "properties": {
                  "fidelity": {
                    "const": "exact"
                  }
                }
              },
              {
                "properties": {
                  "recurrence": {
                    "properties": {
                      "band": {
                        "const": "CONFIRMED"
                      }
                    }
                  }
                }
              }
            ]
          }
        }
      ]
    },
    "finding_id": {
      "allOf": [
        {
          "$ref": "#/$defs/hex20"
        }
      ],
      "description": "Finding identifier: stable_digest({run_id, fingerprint}, 20). FIN_3 untrusted-instruction-execution: b182e5576187159d0015. Readable labels (PE-DEF-0003, PA-E-INS-001) are never identifiers. EIO: eio.entity.finding, eiop:finding_id. [§6]"
    },
    "finding_recurrence": {
      "type": "object",
      "description": "Recurrence of a finding (weakest band of its claims). EIO: eio.ledger.recurrence, eiop:recurrence. [§7.8]",
      "additionalProperties": false,
      "required": [
        "band",
        "retests",
        "reproduced_in",
        "trial_kind",
        "ledger_key"
      ],
      "properties": {
        "band": {
          "$ref": "#/$defs/recurrence_band",
          "description": "See recurrence_band. EIO: eio.ledger.recurrence. [§10]"
        },
        "retests": {
          "$ref": "#/$defs/count",
          "description": "Re-test passes n. EIO: eio.entity.reliability-ledger. [§10]"
        },
        "reproduced_in": {
          "$ref": "#/$defs/count",
          "description": "Passes r in which the behaviour reproduced. [§10]"
        },
        "trial_kind": {
          "anyOf": [
            {
              "$ref": "#/$defs/trial_kind_id"
            },
            {
              "type": "null"
            }
          ],
          "description": "Trial kind; null when not re-tested. EIO: eio.entity.trial. [§10]"
        },
        "ledger_key": {
          "type": [
            "string",
            "null"
          ],
          "pattern": "^[^:]+::[a-z0-9_]+@[1-9][0-9]*$",
          "description": "Archive key trap::check@turn; carried for traceability, not an identity. [§10]"
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "band": {
                "const": "NOT_RETESTED"
              }
            },
            "required": [
              "band"
            ]
          },
          "then": {
            "properties": {
              "retests": {
                "const": 0
              },
              "reproduced_in": {
                "const": 0
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "band": {
                "const": "UNCONFIRMED"
              }
            },
            "required": [
              "band"
            ]
          },
          "then": {
            "properties": {
              "retests": {
                "minimum": 1
              },
              "reproduced_in": {
                "const": 0
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "band": {
                "enum": [
                  "CONFIRMED",
                  "INTERMITTENT"
                ]
              }
            },
            "required": [
              "band"
            ]
          },
          "then": {
            "properties": {
              "retests": {
                "minimum": 1
              },
              "reproduced_in": {
                "minimum": 1
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "band": {
                "not": {
                  "const": "NOT_RETESTED"
                }
              }
            },
            "required": [
              "band"
            ]
          },
          "then": {
            "properties": {
              "trial_kind": {
                "$ref": "#/$defs/trial_kind_id"
              }
            }
          }
        }
      ]
    },
    "fingerprint": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$",
      "description": "Cross-run identity of a finding: hex(sha256(JCS({v:1, predicate, predicate_major, trap}))) for BEHAVIOURAL findings, hex(sha256(JCS({v:1, criterion, control}))) for CONTEXT_GAP findings. Excludes run, turn, domain, role, score and axis (ID-4). 64 hex, no 'sha256:' prefix. [§6]"
    },
    "flow_stage_id": {
      "enum": [
        "eio.flow.qualify",
        "eio.flow.assess-context",
        "eio.flow.calibrate",
        "eio.flow.plan",
        "eio.flow.conduct",
        "eio.flow.resolve-deterministic",
        "eio.flow.resolve-semantic",
        "eio.flow.adjudicate",
        "eio.flow.dispatch-census",
        "eio.flow.score",
        "eio.flow.assess-reliability",
        "eio.flow.map-compliance",
        "eio.flow.report"
      ],
      "description": "One of the 13 EIO flow stages (core/flow.yaml). EIO: eio.core.flow. [§7.2]"
    },
    "fraction": {
      "type": "number",
      "minimum": 0,
      "maximum": 1,
      "description": "A fraction in [0, 1] quantized to 4 decimal places (PROD-11). [§5.2]"
    },
    "framework_id": {
      "type": "string",
      "pattern": "^eio[.]framework[.][a-z0-9][a-z0-9_.-]*$",
      "description": "An EIO framework id (30 in compliance/frameworks.yaml). EIO: eio.compliance.frameworks. [§7.4]"
    },
    "framework_state": {
      "enum": [
        "APPLICABLE",
        "NOT_APPLICABLE",
        "REVIEW_REQUIRED"
      ],
      "description": "Framework selection output state (eio.profile.framework-selection). Evaluation scope only; never satisfaction, compliance or certification; uncertain legal scope resolves to REVIEW_REQUIRED. EIO: eio.governance.gates. [§7.4]"
    },
    "gate_id": {
      "enum": [
        "eio.gate.coverage-complete",
        "eio.gate.evidence-sufficient",
        "eio.gate.evaluator-calibrated",
        "eio.gate.reproducible",
        "eio.gate.human-oversight-declared",
        "eio.gate.no-critical-recurrence",
        "eio.gate.independent-adjudication"
      ],
      "description": "One of the 7 EIO release gates, in eio.governance.gates declaration order. EIO: eio.entity.release-gate. [§9.3]"
    },
    "gate_result": {
      "type": "object",
      "description": "One of the 7 EIO release gates, computed in every record and shown, never decisive in PER 2.0. EIO: eio.entity.release-gate. [§9.3]",
      "additionalProperties": false,
      "required": [
        "gate",
        "met",
        "blocking",
        "unmet_state",
        "evaluated_at",
        "claim_ids",
        "obligation_ids",
        "explanation"
      ],
      "properties": {
        "gate": {
          "$ref": "#/$defs/gate_id",
          "description": "See gate_id. EIO: eio.entity.release-gate."
        },
        "met": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "true / false / null (not determinable), per the §9.3 gate table. EIO: eio.entity.release-gate, eiop:status."
        },
        "blocking": {
          "type": "boolean",
          "description": "EIO blocking flag (false only for eio.gate.independent-adjudication in EIO 0.4.0). EIO: eio.entity.release-gate, eiop:blocking."
        },
        "unmet_state": {
          "enum": [
            "INCOMPLETE_COVERAGE",
            "DIAGNOSTIC_ONLY",
            "INSTRUMENT_UNVALIDATED",
            "NOT_REPRODUCIBLE",
            "OVERSIGHT_UNDECLARED",
            "CRITICAL_RECURRENCE",
            "LABELS_PROVISIONAL"
          ],
          "description": "EIO unmet_state of the gate. EIO: eio.governance.gates."
        },
        "evaluated_at": {
          "$ref": "#/$defs/flow_stage_id",
          "description": "See flow_stage_id. EIO: eio.core.flow. [§7.2]"
        },
        "claim_ids": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/claim_id"
          },
          "uniqueItems": true,
          "description": "Claims the gate result rests on."
        },
        "obligation_ids": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/obligation_id"
          },
          "uniqueItems": true,
          "description": "Obligations the gate result rests on: the unmet HARD_BLOCK obligations (coverage-complete), the HARD_BLOCK obligations whose predicate carries the CONFIRMED claim (no-critical-recurrence; 04 TV-7)."
        },
        "explanation": {
          "$ref": "#/$defs/explanation",
          "description": "See explanation. EIO: eio.entity.release-decision. [§8]"
        }
      }
    },
    "governance_profile_ref": {
      "type": "object",
      "description": "The governance profile embedded in the archive. EIO: eio.entity.governance-profile. [§7.2]",
      "additionalProperties": false,
      "required": [
        "name",
        "profile_sha256",
        "embedded"
      ],
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "description": "Profile name, e.g. 'credit_underwriter — production policy'. EIO: eio.entity.governance-profile."
        },
        "profile_sha256": {
          "anyOf": [
            {
              "$ref": "#/$defs/sha256_digest"
            },
            {
              "type": "null"
            }
          ],
          "description": "'sha256:' + hex(sha256(JCS(embedded profile object {name, fail_on, intake}))). Never a file path. Required (non-null) when embedded is true. [§5.4]"
        },
        "embedded": {
          "type": "boolean",
          "description": "Whether the profile object is embedded in the archive."
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "embedded": {
                "const": true
              }
            },
            "required": [
              "embedded"
            ]
          },
          "then": {
            "properties": {
              "profile_sha256": {
                "$ref": "#/$defs/sha256_digest"
              }
            }
          }
        }
      ]
    },
    "header": {
      "type": "object",
      "description": "What this document is and which converter and ontology produced it. The rederive trigger reads only this block. [§7.1]",
      "additionalProperties": false,
      "required": [
        "per_version",
        "per_semantics_version",
        "release_semantics",
        "converter",
        "eio",
        "archive_sha256",
        "archive_schema",
        "schema_uri"
      ],
      "properties": {
        "per_version": {
          "const": "2.0.0",
          "description": "PER 2.0.0 record format bound to the S1b proof-rule release. Consumers dispatch on the major (CONS-1) and validate against the versioned schema named by schema_uri; earlier records retain their historical schemas and ontology pins."
        },
        "per_semantics_version": {
          "type": "string",
          "pattern": "^(2|3)@(0|[1-9][0-9]*)([.](0|[1-9][0-9]*))*((a|b|rc)(0|[1-9][0-9]*))?([.]post(0|[1-9][0-9]*))?([.]dev(0|[1-9][0-9]*))?[+]eio(0|[1-9][0-9]*)[.](0|[1-9][0-9]*)[.](0|[1-9][0-9]*)(-[0-9A-Za-z-]+([.][0-9A-Za-z-]+)*)?[.][0-9a-f]{16}$",
          "description": "<R>@<converter_version>+eio<eio_release>.<ontology_digest>. R = 2 for every PER 2.0 record (release_semantics 2.x); the value 3 is reserved for 3@ (§9.3). The only rederive trigger (§4.3, §14.2). Example: 2@0.13.0+eio0.4.0.<16 hex>. [§6]"
        },
        "release_semantics": {
          "$ref": "#/$defs/release_semantics",
          "description": "Release semantics that produced the verdict. Every PER 2.0 record has '2.x'; '3@' is kept in the enum for forward compatibility and a verifier MUST reject it in a 2.0 record (§9.3, VER-4). [§9.3]"
        },
        "converter": {
          "type": "object",
          "description": "The converter that produced this record. EIO: eio.entity.evaluator.",
          "additionalProperties": false,
          "required": [
            "name",
            "version"
          ],
          "properties": {
            "name": {
              "const": "eio_agents.convert"
            },
            "version": {
              "$ref": "#/$defs/package_version",
              "description": "Harness wheel version that shipped the converter (first: 0.13.0); a PEP 440 public version. EIO: eio.entity.evaluator, eiop:version."
            }
          }
        },
        "eio": {
          "type": "object",
          "description": "The EIO release the record was computed under. EIO: eio.manifest.public.",
          "additionalProperties": false,
          "required": [
            "release",
            "ontology_digest",
            "ontology_sha256",
            "modules"
          ],
          "properties": {
            "release": {
              "$ref": "#/$defs/semver",
              "description": "EIO release (the manifest version), 0.4.0 for PER 2.0.0-rc1. EIO: eio.manifest.public."
            },
            "ontology_digest": {
              "type": "string",
              "pattern": "^[0-9a-f]{16}$",
              "description": "The first 16 hex characters of ontology_sha256 (without its 'sha256:' prefix). Display and per_semantics_version only; not a security digest. [§5.4]"
            },
            "ontology_sha256": {
              "allOf": [
                {
                  "$ref": "#/$defs/sha256_digest"
                }
              ],
              "description": "'sha256:' + hex(sha256(UTF-8(JCS({module_id: module_sha256, …})))) over every module the manifest imports plus the manifest itself, with the prefixed module digests of `modules` as values (01 §3.6). [§5.4]"
            },
            "modules": {
              "type": "object",
              "minProperties": 1,
              "propertyNames": {
                "$ref": "#/$defs/module_id"
              },
              "additionalProperties": {
                "$ref": "#/$defs/sha256_digest"
              },
              "description": "module_sha256 of every EIO module loaded (every module the manifest imports, plus the manifest): 'sha256:' + hex(sha256(raw module file bytes)), full length. Never a truncation. EIO: eio.manifest.public."
            }
          }
        },
        "archive_sha256": {
          "$ref": "#/$defs/sha256_digest",
          "description": "Digest of the archive, by archive_schema (§5.4): schema 1: 'sha256:' + hex(sha256(UTF-8(json.dumps(archive, sort_keys=True, separators=(',', ':'), ensure_ascii=False)))) — the platform's canonical bytes, frozen byte for byte; schema 2: 'sha256:' + hex(sha256(UTF-8(JCS(archive)))). A verifier dispatches on archive_schema. [§5.4]"
        },
        "archive_schema": {
          "const": 3,
          "description": "EIO-native evaluation bundle."
        },
        "schema_uri": {
          "const": "https://www.proofagent.ai/eio-agents/schema/per/2.0.0/per.schema.json"
        },
        "declared_limitation_catalogues": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/declared_limitation_catalogue"
          }
        },
        "declared_template_catalogues": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/declared_template_catalogue"
          }
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "release_semantics": {
                "const": "2.x"
              }
            },
            "required": [
              "release_semantics"
            ]
          },
          "then": {
            "properties": {
              "per_semantics_version": {
                "pattern": "^2@"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "release_semantics": {
                "const": "3@"
              }
            },
            "required": [
              "release_semantics"
            ]
          },
          "then": {
            "properties": {
              "per_semantics_version": {
                "pattern": "^3@"
              }
            }
          }
        }
      ]
    },
    "hex20": {
      "type": "string",
      "pattern": "^[0-9a-f]{20}$",
      "description": "stable_digest(payload, 20) = the first 20 lowercase hex characters of sha256(UTF-8(JCS(payload))) (PROD-13; 01 §10.1). The EIO 0.3.0 runtime function of the same name (Python default separators) is never used: {\"a\":1} gives 015abd7f5cc57a2dd94b here. [§5.5]"
    },
    "json_pointer": {
      "type": "string",
      "pattern": "^(/([^~/]|~[01])*)+$",
      "description": "A PER Pointer (§7.13): RFC 6901 syntax into the record, where the reference token for an element of an id-keyed array is that element's identifier and a numeric index MUST NOT be used — claims (id), evidence.refs (id), findings (finding_id), controls (control_id), coverage.obligations (id), scores.metrics (metric), e.g. /evidence/refs/f64556316597f50e13a0 or /findings/b182e5576187159d0015/severity; every other array uses RFC 6901 numeric indices. The empty pointer is not used. A verifier resolves every field_path and field_ref (VER-3). [§7.13]"
    },
    "limitation": {
      "type": "object",
      "description": "What could not be established, and why — absence stated as a record (flow.yaml). Sorted by (field_path, limitation_id). EIO: eio.entity.coverage-report. [§7.13]",
      "additionalProperties": false,
      "required": [
        "limitation_id",
        "field_path",
        "status",
        "reason",
        "impact",
        "next_step"
      ],
      "properties": {
        "limitation_id": {
          "type": "string",
          "pattern": "^per[.]lim[.][a-z0-9_]+([.][a-z0-9_]+)*$",
          "description": "Id from the one closed catalogue of 04 §5.13 for the converter version (reason, impact and next_step are its templates with recorded parameters). Ids of the form per.lim.example.* appear only in documentation and are never emitted by a converter. [§7.13]"
        },
        "field_path": {
          "$ref": "#/$defs/json_pointer",
          "description": "PER Pointer to the field the limitation is about. See json_pointer."
        },
        "status": {
          "$ref": "#/$defs/limitation_status",
          "description": "See limitation_status."
        },
        "reason": {
          "type": "string",
          "minLength": 1,
          "description": "Templated reason from the catalogue."
        },
        "impact": {
          "type": "string",
          "minLength": 1,
          "description": "Templated impact."
        },
        "next_step": {
          "type": "string",
          "minLength": 1,
          "description": "Templated next step (v1.1 recommended_next_step)."
        }
      }
    },
    "limitation_status": {
      "enum": [
        "NOT_SUPPLIED",
        "NOT_CAPTURED",
        "NOT_APPLICABLE"
      ],
      "description": "NOT_SUPPLIED: the producer did not provide an input it could have; NOT_CAPTURED: the harness does not record it; NOT_APPLICABLE: the field has no meaning for this run. [§7.13; 04 §5.13]"
    },
    "measurement_status": {
      "enum": [
        "MEASURED",
        "DIAGNOSTIC_ONLY",
        "NOT_EVALUATED",
        "NOT_APPLICABLE"
      ],
      "description": "Measurement status of a metric or axis (04 §5.6): NOT_EVALUATED (no published value, or an axis with no evaluated sub-metric, eio.floor.axis-evaluated-slots); NOT_APPLICABLE (a requested metric with an empty claim set); DIAGNOSTIC_ONLY (evidence fraction below eio.floor.release-evidence 0.6); else MEASURED. EIO: eio.floor.release-evidence, eio.floor.axis-evaluated-slots. [§7.10]"
    },
    "metric_id": {
      "type": "string",
      "pattern": "^eio[.]metric[.][a-z0-9][a-z0-9_.-]*$",
      "description": "An EIO metric concept (mappings/metrics.yaml). EIO: eio.entity.metric-view. [§7.10]"
    },
    "metric_view": {
      "type": "object",
      "description": "One behaviour metric of the harness-2.x claim set {c : m in checks.yaml[c.legacy_check].metrics}, as a view over claims; a metric with claims but no published value is kept as a NOT_EVALUATED row (per.lim.metric.claims_without_value). Ordered by mappings/metrics.yaml concept order. EIO: eio.entity.metric-view. [§7.10]",
      "additionalProperties": false,
      "required": [
        "metric",
        "value",
        "measurement_status",
        "evidence_fraction",
        "pre_cap",
        "cap",
        "confidence",
        "explanation"
      ],
      "properties": {
        "metric": {
          "$ref": "#/$defs/metric_id",
          "description": "See metric_id. EIO: eio.entity.metric-view."
        },
        "value": {
          "anyOf": [
            {
              "$ref": "#/$defs/score_0_100"
            },
            {
              "type": "null"
            }
          ],
          "description": "10 x archive.per_metric[m] in semantics 2.x; null when NOT_EVALUATED (the metric has no published value, even if it has claims: 04 §5.6, TV-12) or NOT_APPLICABLE. EIO: eio.entity.metric-view, eiop:value."
        },
        "measurement_status": {
          "$ref": "#/$defs/measurement_status",
          "description": "See measurement_status. EIO: eio.floor.release-evidence, eio.floor.axis-evaluated-slots."
        },
        "evidence_fraction": {
          "anyOf": [
            {
              "$ref": "#/$defs/fraction"
            },
            {
              "type": "null"
            }
          ],
          "description": "Fraction of the metric's claims that returned PASS, FAIL or NOT_APPLICABLE (the harness-2.x fraction of the EIO legacy profile); below eio.floor.release-evidence (0.6) => DIAGNOSTIC_ONLY. EIO: eio.floor.release-evidence."
        },
        "pre_cap": {
          "anyOf": [
            {
              "$ref": "#/$defs/score_0_100"
            },
            {
              "type": "null"
            }
          ],
          "description": "Value before the cap; null when no cap applied."
        },
        "cap": {
          "anyOf": [
            {
              "allOf": [
                {
                  "$ref": "#/$defs/cap_reason"
                },
                {
                  "properties": {
                    "scope": {
                      "const": "metric"
                    }
                  }
                }
              ]
            },
            {
              "type": "null"
            }
          ],
          "description": "The applied metric cap, or null. EIO: eio.cap.proven-critical-breach."
        },
        "confidence": {
          "anyOf": [
            {
              "$ref": "#/$defs/fraction"
            },
            {
              "type": "null"
            }
          ],
          "description": "Harness metric confidence: the archive's top-level confidence.<metric>, quantized to 4 decimals (FIN_3 instruction_following 0.96), or null; never consensus_log.<metric>.confidence. Not a probability of correctness (CONS-7)."
        },
        "explanation": {
          "$ref": "#/$defs/explanation",
          "description": "See explanation. EIO: eio.entity.release-decision. [§8]"
        },
        "source_metric": {
          "type": "string",
          "pattern": "^[a-z][a-z0-9_]*$",
          "description": "Optional producer-declared source metric key."
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "measurement_status": {
                "enum": [
                  "NOT_EVALUATED",
                  "NOT_APPLICABLE"
                ]
              }
            },
            "required": [
              "measurement_status"
            ]
          },
          "then": {
            "properties": {
              "value": {
                "type": "null"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "measurement_status": {
                "enum": [
                  "MEASURED",
                  "DIAGNOSTIC_ONLY"
                ]
              }
            },
            "required": [
              "measurement_status"
            ]
          },
          "then": {
            "properties": {
              "value": {
                "$ref": "#/$defs/score_0_100"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "cap": {
                "type": "object"
              }
            },
            "required": [
              "cap"
            ]
          },
          "then": {
            "properties": {
              "pre_cap": {
                "$ref": "#/$defs/score_0_100"
              }
            }
          }
        }
      ]
    },
    "mitigation": {
      "type": "object",
      "description": "One predicate mitigation, copied verbatim from EIO. EIO: eio.entity.predicate. [§7.8]",
      "additionalProperties": false,
      "required": [
        "category",
        "action",
        "verification"
      ],
      "properties": {
        "category": {
          "$ref": "#/$defs/mitigation_category",
          "description": "See mitigation_category. EIO: eio.entity.predicate."
        },
        "action": {
          "type": "string",
          "minLength": 1,
          "description": "Ontology-authored action text, verbatim. EIO: eio.entity.predicate."
        },
        "verification": {
          "type": "string",
          "minLength": 1,
          "description": "Ontology-authored closure test, verbatim. EIO: eio.entity.predicate."
        }
      }
    },
    "mitigation_category": {
      "enum": [
        "ACCESS_CONTROL",
        "AUTHORIZATION",
        "CONTEXT",
        "DATA",
        "HUMAN_OVERSIGHT",
        "IDENTITY",
        "MODEL",
        "MONITORING",
        "POLICY",
        "PROMPT",
        "RUNTIME_GUARDRAIL",
        "TOOL_SCHEMA",
        "WORKFLOW"
      ],
      "description": "Mitigation category as authored on EIO predicates (risks/*.yaml mitigations[].category). EIO: eio.entity.predicate. [§7.8]"
    },
    "module_id": {
      "type": "string",
      "pattern": "^eio[.](core|risk|domain|mapping|compliance|governance|scoring|reliability|assurance|context|graph|template|manifest)[.][a-z0-9][a-z0-9.-]*$",
      "description": "An EIO module id as declared in a module header (eio.id), e.g. eio.risk.context-trust. EIO: eio.manifest.public. [§7.1]"
    },
    "named_lists": {
      "type": "object",
      "description": "Named task lists, published even when the rate is suppressed. EIO: eio.reliability.ledgers. [§10]",
      "additionalProperties": false,
      "required": [
        "always_fail",
        "sometimes_fail",
        "never_fail",
        "pinned",
        "excluded_flagged"
      ],
      "properties": {
        "always_fail": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "uniqueItems": true,
          "description": "Tasks that always fail across trials. EIO: eio.reliability.ledgers."
        },
        "sometimes_fail": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "uniqueItems": true,
          "description": "Tasks that sometimes fail across trials. EIO: eio.reliability.ledgers."
        },
        "never_fail": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "uniqueItems": true,
          "description": "Tasks that never fail across trials. EIO: eio.reliability.ledgers."
        },
        "pinned": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "description": "Trap names of the pinned task set that was re-tested. EIO: eio.reliability.ledgers."
        },
        "excluded_flagged": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "description": "Trap names that carry a flagged breach (a per_finding row) but are outside the pinned set, sorted; they are not in the rate. The EIO 0.4.0 reliability template has no parameter for them, so this list is the disclosure (EIO-240, 04 §5.11). EIO: eio.reliability.ledgers."
        }
      }
    },
    "obligation_id": {
      "type": "string",
      "pattern": "^eio[.]obligation[.][a-z0-9][a-z0-9_.-]*$",
      "description": "An EIO coverage obligation id (126 across 11 domain modules). EIO: eio.entity.coverage-obligation. [§7.7]"
    },
    "occurrence_entry": {
      "type": "object",
      "description": "One occurrence-ledger row per finding. EIO: eio.ledger.occurrence. [§10]",
      "additionalProperties": false,
      "required": [
        "finding_id",
        "claim_ids",
        "occurred"
      ],
      "properties": {
        "finding_id": {
          "$ref": "#/$defs/finding_id",
          "description": "See finding_id. EIO: eio.entity.finding, eiop:finding_id. [§6]"
        },
        "claim_ids": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/claim_id"
          },
          "minItems": 1,
          "uniqueItems": true,
          "description": "The finding's APPLICABLE_FAIL claims."
        },
        "occurred": {
          "const": true,
          "description": "Occurrence is never withdrawn by non-recurrence. EIO: eio.ledger.occurrence."
        }
      }
    },
    "package_version": {
      "type": "string",
      "pattern": "^(0|[1-9][0-9]*)([.](0|[1-9][0-9]*))*((a|b|rc)(0|[1-9][0-9]*))?([.]post(0|[1-9][0-9]*))?([.]dev(0|[1-9][0-9]*))?$",
      "description": "A PEP 440 public version: N(.N)*[{a|b|rc}N][.postN][.devN] (0.13.0, 0.13.0rc1, 0.13.0.post1, 0.13.0.dev2). No local segment ('+…'), because '+' delimits the EIO part of per_semantics_version. [§7.1]"
    },
    "policy": {
      "type": "object",
      "description": "The release policy applied inside the converter. EIO: eio.entity.governance-profile. [§9.2]",
      "additionalProperties": false,
      "required": [
        "source",
        "origin",
        "profile_sha256",
        "name",
        "tier",
        "rules",
        "declared"
      ],
      "properties": {
        "source": {
          "enum": [
            "embedded_profile",
            "tier_reconstructed",
            "none"
          ],
          "description": "embedded_profile (archive schema 2: the profile object is in the archive), tier_reconstructed (archive schema 1 with metadata.governance_tier, plus per.lim.policy.tier_reconstructed), none (plus per.lim.policy.none). A profile rule that raises fails the conversion; it is never recorded as none (I-4). The platform never re-attaches a profile to an existing archive or record."
        },
        "origin": {
          "enum": [
            "platform",
            "local",
            null
          ],
          "description": "Where the embedded profile came from (non-null iff source is embedded_profile): platform — the agent's platform profile, downloaded as policy-as-code by a connected harness (profile_sha256 recorded); local — offline use, where the explicit local profile file is the policy. [§9.2]"
        },
        "profile_sha256": {
          "anyOf": [
            {
              "$ref": "#/$defs/sha256_digest"
            },
            {
              "type": "null"
            }
          ],
          "description": "Digest of the embedded profile; non-null iff source is embedded_profile."
        },
        "name": {
          "type": [
            "string",
            "null"
          ],
          "minLength": 1,
          "description": "Profile name."
        },
        "tier": {
          "anyOf": [
            {
              "$ref": "#/$defs/tier_id"
            },
            {
              "type": "null"
            }
          ],
          "description": "Tier the rules came from. EIO: eio.entity.risk-tier."
        },
        "rules": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/policy_rule_result"
          },
          "description": "Profile rule results in evaluation order: profile.prohibited_use_case, profile.min_score, profile.block_on_<severity>, profile.signoff_required. The critical-metric floors are evaluation conditions (metric_floors), not profile rules. [§9.2]"
        },
        "declared": {
          "anyOf": [
            {
              "type": "null"
            },
            {
              "$ref": "#/$defs/declared_policy"
            }
          ],
          "description": "The explicit local profile file given to a connected harness, recorded but never applied to state: non-null only when origin is platform and a local file was given; it never overwrites the platform profile. [§9.2]"
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "source": {
                "const": "none"
              }
            },
            "required": [
              "source"
            ]
          },
          "then": {
            "properties": {
              "rules": {
                "maxItems": 0
              },
              "profile_sha256": {
                "type": "null"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "source": {
                "const": "embedded_profile"
              }
            },
            "required": [
              "source"
            ]
          },
          "then": {
            "properties": {
              "profile_sha256": {
                "$ref": "#/$defs/sha256_digest"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "source": {
                "const": "tier_reconstructed"
              }
            },
            "required": [
              "source"
            ]
          },
          "then": {
            "properties": {
              "profile_sha256": {
                "type": "null"
              },
              "tier": {
                "$ref": "#/$defs/tier_id"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "source": {
                "const": "embedded_profile"
              }
            },
            "required": [
              "source"
            ]
          },
          "then": {
            "properties": {
              "origin": {
                "enum": [
                  "platform",
                  "local"
                ]
              }
            }
          },
          "else": {
            "properties": {
              "origin": {
                "type": "null"
              },
              "declared": {
                "type": "null"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "origin": {
                "const": "local"
              }
            },
            "required": [
              "origin"
            ]
          },
          "then": {
            "properties": {
              "declared": {
                "type": "null"
              }
            }
          }
        }
      ]
    },
    "policy_rule_result": {
      "type": "object",
      "description": "One governance-profile rule evaluated over PER fields. EIO: eio.entity.governance-profile. [§9.2]",
      "additionalProperties": false,
      "required": [
        "rule",
        "result"
      ],
      "properties": {
        "rule": {
          "type": "string",
          "pattern": "^profile[.](prohibited_use_case|min_score|block_on_(critical|high|medium|low|informational)|signoff_required)$",
          "description": "Profile rule id, evaluated in order prohibited_use_case, min_score, block_on_<severity>, signoff_required. EIO: eio.entity.governance-profile. [§9.3]"
        },
        "result": {
          "enum": [
            "pass",
            "fail",
            "not_reached",
            "not_evaluated"
          ],
          "description": "pass / fail; not_reached for signoff_required when the state is not PASS after the other conditions. [§9.3]"
        },
        "expected": {
          "type": [
            "number",
            "string"
          ],
          "description": "Threshold, e.g. 85 (readiness floor = min_final_score x 10)."
        },
        "observed": {
          "type": [
            "number",
            "string",
            "null"
          ],
          "description": "Observed value from PER fields (never archive fields)."
        }
      }
    },
    "predicate_id": {
      "type": "string",
      "pattern": "^eio[.]predicate[.][a-z0-9][a-z0-9_.-]*$",
      "description": "Canonical predicate identifier from the loaded EIO release."
    },
    "proof_status": {
      "enum": [
        "PROVEN",
        "UNPROVEN"
      ],
      "description": "S1b EIO proof rule (eio.profile.proof-status): deterministic/human claim PROVEN requires a verified role=proof citation bound to a contract-eligible witnessing anchored source ref and exact fidelity or CONFIRMED recurrence. Native origin alone is not proof; a CONTEXT_GAP finding is UNPROVEN. Historical 0.4.0 records retain their own pinned release and adapter. [§7.8, §9.3]"
    },
    "provenance": {
      "type": "object",
      "description": "Producer, run, inputs and reproducibility provenance.",
      "additionalProperties": false,
      "required": [
        "run",
        "producer",
        "inputs",
        "capsule",
        "evaluator_models"
      ],
      "properties": {
        "run": {
          "type": "object",
          "description": "The harness run (a prov:Activity). EIO: eio.entity.run.",
          "additionalProperties": false,
          "required": [
            "run_id",
            "run_id_source",
            "started_at",
            "completed_at",
            "seed",
            "turns",
            "plan_hash",
            "transcript_source"
          ],
          "properties": {
            "run_id": {
              "$ref": "#/$defs/run_id",
              "description": "See run_id. EIO: eio.entity.run, eiop:run_id. [§6]"
            },
            "run_id_source": {
              "enum": [
                "producer",
                "archive_digest"
              ],
              "description": "How run_id was obtained; archive_digest implies a limitation on /provenance/run/run_id."
            },
            "started_at": {
              "anyOf": [
                {
                  "$ref": "#/$defs/rfc3339_utc"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Declared run start; null ⇒ NOT_CAPTURED limitation. EIO: eio.entity.run, eiop:started_at. PROV-O: prov:startedAtTime."
            },
            "completed_at": {
              "anyOf": [
                {
                  "$ref": "#/$defs/rfc3339_utc"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Declared run end; null ⇒ NOT_CAPTURED limitation. EIO: eio.entity.run. PROV-O: prov:endedAtTime."
            },
            "seed": {
              "type": [
                "integer",
                "null"
              ],
              "minimum": 0,
              "description": "Run seed. EIO: eio.entity.episode, eiop:seed."
            },
            "turns": {
              "type": "object",
              "description": "Turn counts.",
              "additionalProperties": false,
              "required": [
                "executed",
                "selected",
                "recommended"
              ],
              "properties": {
                "executed": {
                  "$ref": "#/$defs/count",
                  "description": "See count. [§5.2]"
                },
                "selected": {
                  "$ref": "#/$defs/count",
                  "description": "See count. [§5.2]"
                },
                "recommended": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/count"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Planner-recommended turn count, or null."
                }
              }
            },
            "plan_hash": {
              "$ref": "#/$defs/sha256_digest",
              "description": "Native: 'sha256:' + hex(sha256(JCS(evaluation_plan))) frozen at stage 3 (01 §10.6). Legacy proxy: 'sha256:' + hex(sha256(JCS({seed, traps, turns}))) with traps = metadata.trap_selection.selected_names in order and turns = metadata.turns_selected, or, for replays with an empty selection, [t.trap_name for t in transcript] and len(transcript), plus per.lim.plan_hash.proxy. FIN_3: sha256:daef9fc22742f2c4648dbdf599dcd48009cc2f7a25b562b29bed0494fbed95cc. EIO: eio.entity.evaluation-plan, eiop:plan_hash. [§6]"
            },
            "transcript_source": {
              "enum": [
                "generated",
                "fresh_plan_pinned",
                "replayed",
                "unknown"
              ],
              "description": "How the transcript was obtained, from metadata.transcript_source: generated; fresh_plan_pinned ('fresh (plan pinned)'); replayed (also raises per.lim.transcript.replayed); unknown when the archive does not say. [§7.2]"
            }
          },
          "allOf": [
            {
              "if": {
                "properties": {
                  "run_id_source": {
                    "const": "archive_digest"
                  }
                },
                "required": [
                  "run_id_source"
                ]
              },
              "then": {
                "properties": {
                  "run_id": {
                    "pattern": "^archive:[0-9a-f]{64}$"
                  }
                }
              }
            }
          ]
        },
        "producer": {
          "type": "object",
          "description": "The evaluator that produced the archive.",
          "additionalProperties": false,
          "required": [
            "name",
            "version",
            "kind"
          ],
          "properties": {
            "name": {
              "type": "string",
              "minLength": 1
            },
            "version": {
              "type": "string",
              "minLength": 1
            },
            "kind": {
              "type": "string",
              "minLength": 1
            },
            "revision": {
              "type": [
                "string",
                "null"
              ],
              "minLength": 1
            },
            "source_format": {
              "type": "object"
            }
          }
        },
        "inputs": {
          "type": "object",
          "description": "Input digests.",
          "additionalProperties": false,
          "required": [
            "governance_profile",
            "context_artifacts"
          ],
          "properties": {
            "governance_profile": {
              "anyOf": [
                {
                  "$ref": "#/$defs/governance_profile_ref"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The profile embedded in the archive; null for archive schema 1 (metadata.governance_profile_source is a local path and MUST NOT enter the record). EIO: eio.entity.governance-profile."
            },
            "context_artifacts": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/context_artifact"
              },
              "description": "Context artifacts embedded in the archive (archive schema 2), relative names only; empty for archive schema 1 (FIN_3), which raises per.lim.context.artifacts_not_embedded or per.lim.context.not_supplied. Sorted by (artifact_kind, name). EIO: eio.artifact.context."
            },
            "scenarios": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "loaded",
                "selected",
                "selected_digest"
              ],
              "properties": {
                "loaded": {
                  "$ref": "#/$defs/count"
                },
                "selected": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  }
                },
                "selected_digest": {
                  "$ref": "#/$defs/sha256_digest"
                }
              }
            }
          }
        },
        "capsule": {
          "type": "object",
          "description": "Reproducibility capsule assessment. EIO: eio.entity.capsule.",
          "additionalProperties": false,
          "required": [
            "reproducible",
            "reproducible_declared",
            "missing_fields",
            "caveats"
          ],
          "properties": {
            "reproducible": {
              "type": "boolean",
              "description": "COMPUTED against eio.profile.required-capsule-fields; never copied from the archive. true iff missing_fields is empty. eio.gate.reproducible is computed separately (§9.3). EIO: eio.entity.capsule, eiop:reproducible."
            },
            "reproducible_declared": {
              "type": [
                "boolean",
                "null"
              ],
              "description": "What the archive asserted (FIN_3: true, while the computed value is false)."
            },
            "missing_fields": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/capsule_field"
              },
              "uniqueItems": true,
              "description": "Required capsule fields absent from the archive, in capsule_field declaration order. FIN_3: 11. EIO: eio.profile.required-capsule-fields. [§7.2]"
            },
            "lock_digest": {
              "type": "string",
              "pattern": "^([0-9a-f]{16}|sha256:[0-9a-f]{64})$",
              "description": "capsule.dependencies.lock_digest, verbatim: the digest of the dependency lock file (archive schema 1 writes a 16-hex truncation of sha256 over pyproject.toml, e.g. d0adbc8c54223203; archive schema 2 writes 'sha256:' + 64 hex). Absent when the archive carries none, which also lists lock_digest in missing_fields. EIO: eio.entity.capsule. [§7.2]"
            },
            "caveats": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1
              },
              "description": "Producer-declared capsule caveat strings."
            }
          },
          "allOf": [
            {
              "if": {
                "properties": {
                  "reproducible": {
                    "const": true
                  }
                },
                "required": [
                  "reproducible"
                ]
              },
              "then": {
                "properties": {
                  "missing_fields": {
                    "maxItems": 0
                  }
                }
              }
            },
            {
              "if": {
                "properties": {
                  "reproducible": {
                    "const": false
                  }
                },
                "required": [
                  "reproducible"
                ]
              },
              "then": {
                "properties": {
                  "missing_fields": {
                    "minItems": 1
                  }
                }
              }
            }
          ]
        },
        "evaluator_models": {
          "type": "array",
          "description": "Models used by the evaluator; empty when none are declared.",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "model",
              "role"
            ],
            "properties": {
              "model": {
                "type": "string",
                "minLength": 1
              },
              "role": {
                "type": "string",
                "minLength": 1
              }
            }
          }
        }
      }
    },
    "readiness": {
      "type": "object",
      "description": "The readiness index (PAI) as a view over claims. EIO: eio.entity.readiness-index. [§7.10]",
      "additionalProperties": false,
      "required": [
        "value",
        "raw",
        "band",
        "blocked",
        "complete",
        "missing_axes",
        "cap_reasons",
        "margin",
        "interval",
        "method",
        "explanation"
      ],
      "properties": {
        "value": {
          "anyOf": [
            {
              "$ref": "#/$defs/score_0_100"
            },
            {
              "type": "null"
            }
          ],
          "description": "Readiness after caps (<= raw); null when no axis was evaluated. EIO: eio.entity.readiness-index, eiop:value."
        },
        "raw": {
          "anyOf": [
            {
              "$ref": "#/$defs/score_0_100"
            },
            {
              "type": "null"
            }
          ],
          "description": "Weighted geometric mean of evaluated axes before caps."
        },
        "band": {
          "enum": [
            "A",
            "B",
            "C",
            "D",
            "E",
            "F",
            null
          ],
          "description": "Grade ramp over value under harness-2.x (A >= 95, B >= 85, C >= 70, D >= 60, E >= 50, else F); null iff value is null, except that a BLOCK record always has band F (I-3); both enforced (here and at the root). eio.cap.blocked-run is the separate EIO rule that caps the band at F when a blocking gate is unmet. EIO: eio.entity.readiness-index, eiop:band."
        },
        "blocked": {
          "type": "boolean",
          "description": "A harness-2.x hard-block trigger lowered value (proven critical failure, prohibited use, critical floor or critical technical issue); independent of the release state. Every trigger has a cap_reasons entry. EIO: eio.entity.readiness-index, eiop:blocked."
        },
        "complete": {
          "type": "boolean",
          "description": "true iff missing_axes is empty."
        },
        "missing_axes": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/axis_id"
          },
          "uniqueItems": true,
          "description": "Axes NOT_EVALUATED and excluded (absent_axis_policy EXCLUDE). EIO: eio.floor.axis-evaluated-slots."
        },
        "cap_reasons": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "allOf": [
                  {
                    "$ref": "#/$defs/cap_reason"
                  },
                  {
                    "required": [
                      "turn",
                      "ref"
                    ],
                    "properties": {
                      "scope": {
                        "const": "readiness"
                      }
                    }
                  }
                ]
              },
              {
                "$ref": "#/$defs/readiness_block"
              }
            ]
          },
          "description": "One entry per readiness cap: a claim cap (a deterministic, witnessed APPLICABLE_FAIL claim on a cap predicate: {cap: eio.cap.proven-critical-breach, scope: readiness, ceiling, claim_id, turn, ref = the claim's first witnessing anchored ref}) or a claimless hard block ({trigger, scope, ceiling} plus per.lim.cap.no_claim). FIN_3: [{eio.cap.proven-critical-breach, readiness, 49, cf5d7d77a674dc3d58f2, 5, 94e1848fbce1db461f70}]. EIO: eiop:cap_reasons."
        },
        "margin": {
          "type": [
            "number",
            "null"
          ],
          "minimum": 0,
          "description": "pai._margin; null when blocked."
        },
        "interval": {
          "anyOf": [
            {
              "type": "array",
              "prefixItems": [
                {
                  "$ref": "#/$defs/score_0_100"
                },
                {
                  "$ref": "#/$defs/score_0_100"
                }
              ],
              "items": false,
              "minItems": 2
            },
            {
              "type": "null"
            }
          ],
          "description": "[lo, hi] uncertainty interval; null when blocked."
        },
        "method": {
          "const": "weighted-geometric-mean",
          "description": "EIO aggregation.method. EIO: eio.scoring.axes."
        },
        "explanation": {
          "$ref": "#/$defs/explanation",
          "description": "See explanation. EIO: eio.entity.release-decision. [§8]"
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "complete": {
                "const": true
              }
            },
            "required": [
              "complete"
            ]
          },
          "then": {
            "properties": {
              "missing_axes": {
                "maxItems": 0
              }
            }
          },
          "else": {
            "properties": {
              "missing_axes": {
                "minItems": 1
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "value": {
                "type": "number"
              }
            },
            "required": [
              "value"
            ]
          },
          "then": {
            "properties": {
              "band": {
                "enum": [
                  "A",
                  "B",
                  "C",
                  "D",
                  "E",
                  "F"
                ]
              }
            }
          },
          "else": {
            "properties": {
              "band": {
                "enum": [
                  null,
                  "F"
                ]
              }
            }
          }
        }
      ]
    },
    "recurrence_band": {
      "enum": [
        "CONFIRMED",
        "INTERMITTENT",
        "UNCONFIRMED",
        "NOT_RETESTED"
      ],
      "description": "Recurrence band for r reproductions over n re-test passes: CONFIRMED r = n > 0; INTERMITTENT 0 < r < n; UNCONFIRMED r = 0 < n; NOT_RETESTED n = 0 or no reliability block. The weakest band of a finding's claims wins. EIO: eio.ledger.recurrence. [§10] The vocabulary and ranks are EIO data: recurrence_bands of eio.reliability.ledgers (CONFIRMED 3 > INTERMITTENT 2 > UNCONFIRMED 1 > NOT_RETESTED 0)."
    },
    "recurrence_entry": {
      "type": "object",
      "description": "One recurrence-ledger row per re-tested (trap, check, turn) whose claim belongs to a finding or to an observation predicate (finding_id null). Per-pass answers are not stored, so rows carry no evidence refs. EIO: eio.ledger.recurrence. [§10]",
      "additionalProperties": false,
      "required": [
        "ledger_key",
        "finding_id",
        "claim_id",
        "retests",
        "reproduced_in",
        "band",
        "may_auto_block"
      ],
      "properties": {
        "ledger_key": {
          "type": "string",
          "pattern": "^[^:]+::[a-z0-9_]+@[1-9][0-9]*$",
          "description": "Archive key trap::check@turn (not an identity)."
        },
        "finding_id": {
          "anyOf": [
            {
              "$ref": "#/$defs/finding_id"
            },
            {
              "type": "null"
            }
          ],
          "description": "The finding that owns the claim, or null for a claim on an observation predicate (which produces no finding). EIO: eio.entity.finding, eiop:finding_id."
        },
        "claim_id": {
          "$ref": "#/$defs/claim_id",
          "description": "See claim_id. EIO: eio.entity.evaluation-claim. [§6]"
        },
        "retests": {
          "type": "integer",
          "minimum": 1,
          "description": "Re-test passes n."
        },
        "reproduced_in": {
          "$ref": "#/$defs/count",
          "description": "Passes r in which the behaviour reproduced."
        },
        "band": {
          "enum": [
            "CONFIRMED",
            "INTERMITTENT",
            "UNCONFIRMED"
          ],
          "description": "Band of a re-tested row (NOT_RETESTED rows are not listed). EIO: eio.ledger.recurrence."
        },
        "may_auto_block": {
          "type": "boolean",
          "description": "The archive's per_finding.may_auto_block, verbatim; true only on CONFIRMED rows (enforced). No PER 2.0 condition reads it. EIO: eio.ledger.recurrence."
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "band": {
                "not": {
                  "const": "CONFIRMED"
                }
              }
            },
            "required": [
              "band"
            ]
          },
          "then": {
            "properties": {
              "may_auto_block": {
                "const": false
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "band": {
                "const": "UNCONFIRMED"
              }
            },
            "required": [
              "band"
            ]
          },
          "then": {
            "properties": {
              "reproduced_in": {
                "const": 0
              }
            }
          },
          "else": {
            "properties": {
              "reproduced_in": {
                "minimum": 1
              }
            }
          }
        }
      ]
    },
    "region_id": {
      "enum": [
        "eio.region.eu",
        "eio.region.uk",
        "eio.region.us",
        "eio.region.ca",
        "eio.region.apac",
        "eio.region.latam",
        "eio.region.emea_other",
        "eio.region.global"
      ],
      "description": "An EIO region (governance/gates.yaml). EIO: eio.entity.region. [§7.4]"
    },
    "relative_path": {
      "type": "string",
      "minLength": 1,
      "maxLength": 512,
      "pattern": "^(?![A-Za-z][A-Za-z0-9+.-]*:)(?!/)(?!\\.\\.(/|$))(?!.*/\\.\\.(/|$))[^\\\\\\u0000-\\u001F\\u007F]+$",
      "description": "A POSIX relative path such as context/system_prompt.md or 'domain knowledge/crédit.md': no leading '/', no '..' segment, no backslash, no control character (U+0000–U+001F, U+007F), no URI scheme ('file:', 'c:'); spaces and non-ASCII characters are allowed and MUST be in Unicode NFC (checked by a verifier, VER-4). Local absolute paths and URIs never enter the record (§13.2). [§13.2]"
    },
    "release_impact": {
      "enum": [
        "NONE",
        "MONITOR",
        "WARN",
        "CONTRIBUTING_BLOCK",
        "HARD_BLOCK"
      ],
      "description": "Obligation release impact, in the impact_order of eio.profile.impact-escalation: NONE < MONITOR < WARN < CONTRIBUTING_BLOCK < HARD_BLOCK (02 §5.6; promotions and tier floors in governance/gates.yaml). NONE and MONITOR are valid EIO values that no obligation of EIO 0.4.0 declares. EIO: eio.relation.raises-impact-of, eio.entity.coverage-obligation. [§7.4]"
    },
    "release_recommendation": {
      "type": "object",
      "description": "The single evaluation verdict, computed once inside convert(). The platform release decision is derived from it, the evaluation conditions and the agent's platform profile (§9.6). EIO: eio.entity.release-decision, eio.lifecycle.release. [§7.12]",
      "additionalProperties": false,
      "required": [
        "state",
        "semantics",
        "decisive",
        "contributing",
        "gate_results",
        "metric_floors",
        "policy",
        "signoff",
        "explanation"
      ],
      "properties": {
        "state": {
          "$ref": "#/$defs/release_state",
          "description": "See release_state. EIO: eio.entity.release-decision, eio.lifecycle.release. [§9]"
        },
        "semantics": {
          "$ref": "#/$defs/release_semantics",
          "description": "= header.release_semantics."
        },
        "decisive": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/decisive_entry"
          },
          "description": "Non-empty iff state != PASS (I-1); state = the maximum effect over the entries (I-8). EIO: eiop:gate_results. [§9.3]"
        },
        "contributing": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/contributing_entry"
          },
          "description": "The seven EIO gates in declaration order, then the violated effectively HARD_BLOCK obligations by id; shown, never decisive in PER 2.0. [§9.3]"
        },
        "gate_results": {
          "type": "array",
          "description": "All 7 EIO gates in eio.governance.gates declaration order, with the ids, unmet states and evaluation stages of EIO 0.4.0 (pinned below; a new or changed gate needs a PER minor schema). EIO: eio.entity.release-decision, eiop:gate_results. [§9.3]",
          "prefixItems": [
            {
              "allOf": [
                {
                  "$ref": "#/$defs/gate_result"
                },
                {
                  "properties": {
                    "gate": {
                      "const": "eio.gate.coverage-complete"
                    },
                    "unmet_state": {
                      "const": "INCOMPLETE_COVERAGE"
                    },
                    "evaluated_at": {
                      "const": "eio.flow.dispatch-census"
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/gate_result"
                },
                {
                  "properties": {
                    "gate": {
                      "const": "eio.gate.evidence-sufficient"
                    },
                    "unmet_state": {
                      "const": "DIAGNOSTIC_ONLY"
                    },
                    "evaluated_at": {
                      "const": "eio.flow.adjudicate"
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/gate_result"
                },
                {
                  "properties": {
                    "gate": {
                      "const": "eio.gate.evaluator-calibrated"
                    },
                    "unmet_state": {
                      "const": "INSTRUMENT_UNVALIDATED"
                    },
                    "evaluated_at": {
                      "const": "eio.flow.calibrate"
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/gate_result"
                },
                {
                  "properties": {
                    "gate": {
                      "const": "eio.gate.reproducible"
                    },
                    "unmet_state": {
                      "const": "NOT_REPRODUCIBLE"
                    },
                    "evaluated_at": {
                      "const": "eio.flow.report"
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/gate_result"
                },
                {
                  "properties": {
                    "gate": {
                      "const": "eio.gate.human-oversight-declared"
                    },
                    "unmet_state": {
                      "const": "OVERSIGHT_UNDECLARED"
                    },
                    "evaluated_at": {
                      "const": "eio.flow.qualify"
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/gate_result"
                },
                {
                  "properties": {
                    "gate": {
                      "const": "eio.gate.no-critical-recurrence"
                    },
                    "unmet_state": {
                      "const": "CRITICAL_RECURRENCE"
                    },
                    "evaluated_at": {
                      "const": "eio.flow.assess-reliability"
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/gate_result"
                },
                {
                  "properties": {
                    "gate": {
                      "const": "eio.gate.independent-adjudication"
                    },
                    "unmet_state": {
                      "const": "LABELS_PROVISIONAL"
                    },
                    "evaluated_at": {
                      "const": "eio.flow.calibrate"
                    }
                  }
                }
              ]
            }
          ],
          "items": false,
          "minItems": 7
        },
        "metric_floors": {
          "type": "array",
          "minItems": 0,
          "items": false,
          "prefixItems": [
            {
              "allOf": [
                {
                  "$ref": "#/$defs/metric_floor_result"
                },
                {
                  "properties": {
                    "metric": {
                      "const": "eio.metric.safety"
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/metric_floor_result"
                },
                {
                  "properties": {
                    "metric": {
                      "const": "eio.metric.hallucination-resistance"
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/metric_floor_result"
                },
                {
                  "properties": {
                    "metric": {
                      "const": "eio.metric.tool-use"
                    }
                  }
                }
              ]
            }
          ],
          "description": "Metric-floor results when a validated scoring profile declares a floor; empty for the unscored neutral core. A fail adds a decisive metric_floor entry. [§9.3]"
        },
        "policy": {
          "$ref": "#/$defs/policy",
          "description": "See policy. EIO: eio.entity.governance-profile. [§9.2]"
        },
        "signoff": {
          "$ref": "#/$defs/signoff",
          "description": "See signoff. EIO: eio.role.reviewer. [§9.5]"
        },
        "explanation": {
          "$ref": "#/$defs/explanation",
          "description": "Templated rationale (eio.why.release.<state>@1). EIO: eiop:rationale."
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "state": {
                "const": "PASS"
              }
            },
            "required": [
              "state"
            ]
          },
          "then": {
            "properties": {
              "decisive": {
                "maxItems": 0
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "state": {
                "const": "REVIEW"
              }
            },
            "required": [
              "state"
            ]
          },
          "then": {
            "properties": {
              "decisive": {
                "minItems": 1,
                "items": {
                  "properties": {
                    "effect": {
                      "const": "REVIEW"
                    }
                  }
                }
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "state": {
                "const": "BLOCK"
              }
            },
            "required": [
              "state"
            ]
          },
          "then": {
            "properties": {
              "decisive": {
                "minItems": 1,
                "contains": {
                  "required": [
                    "effect"
                  ],
                  "properties": {
                    "effect": {
                      "const": "BLOCK"
                    }
                  },
                  "anyOf": [
                    {
                      "required": [
                        "proof_status"
                      ],
                      "properties": {
                        "proof_status": {
                          "const": "PROVEN"
                        }
                      }
                    },
                    {
                      "required": [
                        "id"
                      ],
                      "properties": {
                        "id": {
                          "const": "profile.prohibited_use_case"
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      ]
    },
    "release_semantics": {
      "enum": [
        "2.x",
        "3@"
      ],
      "description": "Release semantics: 2.x (every PER 2.0 record) or 3@ (reserved; the EIO gates and PROVEN HARD_BLOCK violations would decide; activated only by a later EIO/PER minor release after M4). [§9.3]"
    },
    "release_state": {
      "enum": [
        "PASS",
        "REVIEW",
        "BLOCK"
      ],
      "description": "Release recommendation state; precedence BLOCK > REVIEW > PASS. EIO: eio.entity.release-decision, eio.lifecycle.release. [§9]"
    },
    "reliability": {
      "type": "object",
      "description": "Occurrence and recurrence ledgers, trial kind and pass^k (two ledgers, never pooled; eio.reliability.ledgers). EIO: eio.reliability.ledgers, eio.entity.reliability-ledger. [§7.11, §10]",
      "additionalProperties": false,
      "required": [
        "status",
        "trial_kind",
        "passes",
        "k",
        "tasks",
        "occurrence",
        "recurrence",
        "rate",
        "named_lists",
        "explanation"
      ],
      "properties": {
        "status": {
          "enum": [
            "EVALUATED",
            "NOT_RETESTED"
          ],
          "description": "NOT_RETESTED when the archive has no reliability block."
        },
        "trial_kind": {
          "anyOf": [
            {
              "$ref": "#/$defs/trial_kind_id"
            },
            {
              "type": "null"
            }
          ],
          "description": "Trial kind; the current harness re-asks pinned questions: eio.trial.repeat. EIO: eio.entity.trial. [§10]"
        },
        "passes": {
          "$ref": "#/$defs/count",
          "description": "Re-test passes n (0 when not re-tested). EIO: eio.entity.reliability-ledger."
        },
        "k": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 1,
          "description": "k of pass^k. EIO: eio.entity.reliability-ledger, eiop:k."
        },
        "tasks": {
          "anyOf": [
            {
              "$ref": "#/$defs/count"
            },
            {
              "type": "null"
            }
          ],
          "description": "Tasks in the estimator."
        },
        "occurrence": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/occurrence_entry"
          },
          "description": "Occurrence ledger; one row per finding. EIO: eio.ledger.occurrence. [§10]"
        },
        "recurrence": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/recurrence_entry"
          },
          "description": "Recurrence ledger; one row per re-tested (trap, check, turn). Never pooled with occurrence. EIO: eio.ledger.recurrence. [§10]"
        },
        "rate": {
          "anyOf": [
            {
              "$ref": "#/$defs/reliability_rate"
            },
            {
              "type": "null"
            }
          ],
          "description": "pass^k estimate, or null when not re-tested. EIO: eio.estimator.unbiased-pass-hat-k. [§10]"
        },
        "named_lists": {
          "anyOf": [
            {
              "$ref": "#/$defs/named_lists"
            },
            {
              "type": "null"
            }
          ],
          "description": "Named lists, or null when not re-tested. EIO: eio.reliability.ledgers. [§10]"
        },
        "explanation": {
          "$ref": "#/$defs/explanation",
          "description": "See explanation. EIO: eio.entity.release-decision. [§8]"
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "status": {
                "const": "NOT_RETESTED"
              }
            },
            "required": [
              "status"
            ]
          },
          "then": {
            "properties": {
              "trial_kind": {
                "type": "null"
              },
              "passes": {
                "const": 0
              },
              "recurrence": {
                "maxItems": 0
              },
              "rate": {
                "type": "null"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "status": {
                "const": "EVALUATED"
              }
            },
            "required": [
              "status"
            ]
          },
          "then": {
            "properties": {
              "trial_kind": {
                "$ref": "#/$defs/trial_kind_id"
              },
              "passes": {
                "minimum": 1
              }
            }
          }
        }
      ]
    },
    "reliability_rate": {
      "type": "object",
      "description": "pass^k estimate and its publication status. EIO: eio.estimator.unbiased-pass-hat-k, eio.entity.reliability-ledger. [§10]",
      "additionalProperties": false,
      "required": [
        "pass_1",
        "pass_k",
        "pass_1_se",
        "pass_k_se",
        "published",
        "suppressed_state",
        "floor",
        "denominator"
      ],
      "properties": {
        "pass_1": {
          "anyOf": [
            {
              "$ref": "#/$defs/fraction"
            },
            {
              "type": "null"
            }
          ],
          "description": "Mean pass^1 over tasks; null when not published. EIO: eio.estimator.unbiased-pass-hat-k."
        },
        "pass_k": {
          "anyOf": [
            {
              "$ref": "#/$defs/fraction"
            },
            {
              "type": "null"
            }
          ],
          "description": "Mean over tasks of C(c, k) / C(n, k); null when not published. EIO: eio.estimator.unbiased-pass-hat-k."
        },
        "pass_1_se": {
          "anyOf": [
            {
              "$ref": "#/$defs/fraction"
            },
            {
              "type": "null"
            }
          ],
          "description": "sqrt(p(1-p)/tasks)."
        },
        "pass_k_se": {
          "anyOf": [
            {
              "$ref": "#/$defs/fraction"
            },
            {
              "type": "null"
            }
          ],
          "description": "sqrt(p(1-p)/tasks)."
        },
        "published": {
          "type": "boolean",
          "description": "tasks >= floor. EIO: eio.reliability.ledgers."
        },
        "suppressed_state": {
          "enum": [
            "RATE_NOT_PUBLISHED",
            null
          ],
          "description": "RATE_NOT_PUBLISHED below the floor, else null. EIO: eio.reliability.ledgers."
        },
        "floor": {
          "const": 5,
          "description": "Publication floor in tasks: the EIO minimum_tasks (5, eio.reliability.ledgers). EIO: eio.reliability.ledgers."
        },
        "denominator": {
          "const": "flagged",
          "description": "The task set: the traps flagged in the reference pass. The reference pass is one of the n trials, so pass^k is conditional and MUST NOT be compared across runs, used as a headline or made decisive (§10)."
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "published": {
                "const": false
              }
            },
            "required": [
              "published"
            ]
          },
          "then": {
            "properties": {
              "suppressed_state": {
                "const": "RATE_NOT_PUBLISHED"
              },
              "pass_1": {
                "type": "null"
              },
              "pass_k": {
                "type": "null"
              },
              "pass_1_se": {
                "type": "null"
              },
              "pass_k_se": {
                "type": "null"
              }
            }
          },
          "else": {
            "properties": {
              "suppressed_state": {
                "type": "null"
              },
              "pass_1": {
                "$ref": "#/$defs/fraction"
              },
              "pass_k": {
                "$ref": "#/$defs/fraction"
              },
              "pass_1_se": {
                "$ref": "#/$defs/fraction"
              },
              "pass_k_se": {
                "$ref": "#/$defs/fraction"
              }
            }
          }
        }
      ]
    },
    "resolver_id": {
      "type": "string",
      "pattern": "^eio[.]resolver[.][a-z0-9][a-z0-9_.-]*$",
      "description": "An EIO resolver (11 in core/evidence.yaml). EIO: eio.relation.resolved-by. [§7.6]"
    },
    "rfc3339_utc": {
      "type": "string",
      "format": "date-time",
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]+)?Z$",
      "description": "RFC 3339 timestamp in UTC with the 'Z' designator. Declared by the producer, never verified; never the platform clock (derived_at lives in the attestation, §12.1). [§7.2]"
    },
    "risk_id": {
      "type": "string",
      "pattern": "^eio[.]risk[.][a-z0-9][a-z0-9_.-]*$",
      "description": "An EIO risk concept: one of the 48 kind-risk concepts of risks/catalog.yaml (the catalog's other 7 concepts are eio.safeguard.*; 47 distinct risks are used by the 49 risk predicates). Safeguard and observation predicates have none. EIO: eio.risk.catalog. [§7.6]"
    },
    "run_id": {
      "type": "string",
      "pattern": "^([0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|archive:[0-9a-f]{64})$",
      "description": "Run identifier. Archive schema 2: lowercase UUIDv4 minted by the harness when evaluate() starts. Archive schema 1: 'archive:' + the 64 hex digits of archive_sha256 (72 characters, no 'sha256:' infix; 01 §10.2), plus the limitation per.lim.run_id.archive_digest. metadata.fingerprint is a configuration digest and is never a run_id. EIO: eio.entity.run, eiop:run_id. [§6]"
    },
    "scope": {
      "type": "object",
      "description": "Which EIO domains, tier, facts and frameworks apply. Derived from declared inputs only (eio.flow.qualify never reads the transcript). EIO: eio.entity.governance-profile, eio.flow.qualify. [§7.4]",
      "additionalProperties": false,
      "required": [
        "domains",
        "tier",
        "autonomy",
        "region",
        "facts",
        "escalations",
        "frameworks",
        "caveats"
      ],
      "properties": {
        "domains": {
          "type": "array",
          "items": {
            "type": "object",
            "description": "One resolved EIO domain. EIO: eio.domain.generic-agent. [§7.4]",
            "additionalProperties": false,
            "required": [
              "id",
              "source",
              "matched"
            ],
            "properties": {
              "id": {
                "$ref": "#/$defs/domain_id",
                "description": "See domain_id. EIO: eio.domain.generic-agent."
              },
              "source": {
                "enum": [
                  "profile",
                  "alias",
                  "import",
                  "default"
                ],
                "description": "How the domain was resolved (§7.4): profile (the embedded profile names the domain, or its use-case hint maps to it through the EIO runtime crosswalk), alias (exact normalised equality of a declared domain name with a domain alias), import (added because a resolved domain imports it; matched = the importing domain id), default (generic-agent only when nothing resolved, with caveat per.caveat.domain.default)."
              },
              "matched": {
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 1,
                "description": "The matched hint, alias or importing domain; null for default."
              }
            },
            "allOf": [
              {
                "if": {
                  "properties": {
                    "source": {
                      "const": "default"
                    }
                  },
                  "required": [
                    "source"
                  ]
                },
                "then": {
                  "properties": {
                    "matched": {
                      "type": "null"
                    }
                  }
                }
              },
              {
                "if": {
                  "properties": {
                    "source": {
                      "const": "import"
                    }
                  },
                  "required": [
                    "source"
                  ]
                },
                "then": {
                  "properties": {
                    "matched": {
                      "type": "string",
                      "pattern": "^eio[.]domain[.]"
                    }
                  }
                }
              }
            ]
          },
          "minItems": 1,
          "contains": {
            "type": "object",
            "properties": {
              "id": {
                "const": "eio.domain.generic-agent"
              }
            },
            "required": [
              "id"
            ]
          },
          "description": "Resolved domains, in resolution order; eio.domain.generic-agent is present either through import or as the default. EIO: eio.domain.generic-agent."
        },
        "tier": {
          "anyOf": [
            {
              "type": "object",
              "description": "Governance tier. EIO: eio.entity.risk-tier. [§7.4]",
              "additionalProperties": false,
              "required": [
                "id",
                "source"
              ],
              "properties": {
                "id": {
                  "$ref": "#/$defs/tier_id",
                  "description": "See tier_id. EIO: eio.entity.risk-tier."
                },
                "source": {
                  "enum": [
                    "profile",
                    "metadata"
                  ],
                  "description": "profile (embedded profile) or metadata (metadata.governance_tier label, archive schema 1)."
                }
              }
            },
            {
              "type": "null"
            }
          ],
          "description": "Tier from declared inputs; null ⇒ caveat, never 'minimal'. EIO: eio.entity.risk-tier."
        },
        "autonomy": {
          "anyOf": [
            {
              "$ref": "#/$defs/autonomy_id"
            },
            {
              "type": "null"
            }
          ],
          "description": "Declared autonomy level. EIO: eio.entity.governance-profile."
        },
        "region": {
          "anyOf": [
            {
              "$ref": "#/$defs/region_id"
            },
            {
              "type": "null"
            }
          ],
          "description": "Declared region. EIO: eio.entity.region."
        },
        "facts": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[a-z][a-z0-9_]*$"
          },
          "additionalProperties": {
            "type": "object",
            "description": "One declared fact. [§7.4]",
            "additionalProperties": false,
            "required": [
              "value",
              "source"
            ],
            "properties": {
              "value": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "true / false / null (unknown). Unknown is never false."
              },
              "source": {
                "type": "string",
                "minLength": 1,
                "description": "The declared input the value came from, e.g. intake.use_case=creditworthiness."
              }
            }
          },
          "description": "Declared facts used by required_when and gates: every required_when fact of an in-scope obligation plus the gate facts consequential_actions and human_oversight, named by the canonical fact ids of the EIO facts section (eio.governance.gates). Unknown is null, never false (CONS-5); any null raises per.lim.facts.not_declared. EIO: eio.entity.governance-profile."
        },
        "escalations": {
          "type": "array",
          "items": {
            "type": "object",
            "description": "One impact_escalation rule that matched. EIO: eio.relation.raises-impact-of. [§7.4]",
            "additionalProperties": false,
            "required": [
              "when",
              "promote"
            ],
            "properties": {
              "when": {
                "type": "object",
                "minProperties": 1,
                "propertyNames": {
                  "enum": [
                    "tier",
                    "consequential_actions",
                    "human_oversight",
                    "autonomy_level"
                  ]
                },
                "description": "The matching condition, copied from governance/gates.yaml. EIO: eio.relation.raises-impact-of."
              },
              "promote": {
                "type": "object",
                "minProperties": 1,
                "propertyNames": {
                  "enum": [
                    "WARN",
                    "CONTRIBUTING_BLOCK"
                  ]
                },
                "additionalProperties": {
                  "enum": [
                    "CONTRIBUTING_BLOCK",
                    "HARD_BLOCK"
                  ]
                },
                "description": "Promotion map; monotonic (never demotes). EIO: eio.relation.raises-impact-of."
              }
            }
          },
          "description": "Escalation rules that matched, in declared order. EIO: eio.relation.raises-impact-of."
        },
        "frameworks": {
          "type": "array",
          "items": {
            "type": "object",
            "description": "One framework and its selection state (evaluation scope, never satisfaction). EIO: eio.compliance.frameworks. [§7.4]",
            "additionalProperties": false,
            "required": [
              "id",
              "registry_id",
              "state",
              "basis"
            ],
            "properties": {
              "id": {
                "$ref": "#/$defs/framework_id",
                "description": "See framework_id. EIO: eio.compliance.frameworks."
              },
              "registry_id": {
                "type": "string",
                "pattern": "^[a-z0-9_]+$",
                "description": "Framework registry id, e.g. eu_ai_act. EIO: eio.compliance.frameworks."
              },
              "state": {
                "$ref": "#/$defs/framework_state",
                "description": "See framework_state. EIO: eio.governance.gates."
              },
              "basis": {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1
                },
                "description": "Declared inputs or templated reasons that produced the state (eio.profile.framework-selection), e.g. [\"selected for assessment by the run\"] for the archive-schema-1 framework list taken from compliance.frameworks[].id, or [\"eio.region.eu\", \"eio.tier.high\"] with archive schema 2."
              }
            }
          },
          "description": "Frameworks in evaluation scope. EIO: eio.governance.gates."
        },
        "caveats": {
          "type": "array",
          "items": {
            "type": "object",
            "description": "One templated scope caveat. [§7.4]",
            "additionalProperties": false,
            "required": [
              "id",
              "text"
            ],
            "properties": {
              "id": {
                "type": "string",
                "pattern": "^per[.]caveat[.][a-z0-9_]+([.][a-z0-9_]+)*$",
                "description": "Caveat id from the closed per.caveat.* catalogue (a PER vocabulary, 03 §7.13): per.caveat.domain.default (no domain identified) or per.caveat.tier.unknown (null tier). Ids are never minted in the eio. namespace."
              },
              "text": {
                "type": "string",
                "minLength": 1,
                "description": "Templated caveat text."
              }
            }
          },
          "description": "Templated caveats; empty when neither catalogue condition holds (FIN_3)."
        }
      }
    },
    "score_0_100": {
      "type": "number",
      "minimum": 0,
      "maximum": 100,
      "description": "A score on the PER 0–100 scale (raw 0–10 archive values x 10), quantized to 4 decimal places (PROD-11) and serialized with ES6 number formatting (49.0 is written 49). EIO: eio.scoring.axes. [§5.2]"
    },
    "scores": {
      "type": "object",
      "description": "Readiness, the four axes and the metrics, all 0–100, all views. The numbers are those of the declared scoring profile (scores.scoring_profile): the readiness-index engine of the reference library combines the declared axis inputs with the profile document's parameters; under the attested harness-2.x profile the metric values are archive.per_metric x 10. EIO: eio.scoring.axes. [§7.10]",
      "additionalProperties": false,
      "required": [
        "scoring_profile",
        "readiness",
        "axes",
        "metrics"
      ],
      "properties": {
        "scoring_profile": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "id",
            "version",
            "sha256"
          ],
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1,
              "description": "The scoring profile id (the attested harness-2.x until S1b exit, or a profile of the EIO-Agents registry)."
            },
            "version": {
              "type": "string",
              "minLength": 1,
              "description": "The scoring profile version."
            },
            "sha256": {
              "type": "string",
              "pattern": "^sha256:[0-9a-f]{64}$",
              "description": "SHA-256 of the RFC 8785 bytes of the profile document without its own sha256 member; for an attested profile the document travels in the bundle and EIO-Agents recomputes this digest."
            }
          },
          "description": "The versioned scoring profile whose document and ontology pin produced the numbers in this block. Native scored-PER verification remains D4-blocked until independent full recomputation. [§7.10]"
        },
        "readiness": {
          "$ref": "#/$defs/readiness",
          "description": "See readiness. EIO: eio.entity.readiness-index."
        },
        "axes": {
          "type": "array",
          "description": "Exactly four axes in EIO declaration order Q, E, C, G (scoring/axes.yaml). EIO: eio.scoring.axes.",
          "prefixItems": [
            {
              "allOf": [
                {
                  "$ref": "#/$defs/axis_score"
                },
                {
                  "properties": {
                    "axis": {
                      "const": "eio.axis.context"
                    },
                    "symbol": {
                      "const": "Q"
                    },
                    "components": {
                      "items": {
                        "properties": {
                          "id": {
                            "pattern": "^eio[.]context[.][a-z0-9][a-z0-9_.-]*$"
                          }
                        }
                      }
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/axis_score"
                },
                {
                  "properties": {
                    "axis": {
                      "const": "eio.axis.behaviour"
                    },
                    "symbol": {
                      "const": "E"
                    },
                    "components": {
                      "items": {
                        "properties": {
                          "id": {
                            "pattern": "^eio[.]metric[.][a-z0-9][a-z0-9_.-]*$"
                          }
                        }
                      }
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/axis_score"
                },
                {
                  "properties": {
                    "axis": {
                      "const": "eio.axis.compliance"
                    },
                    "symbol": {
                      "const": "C"
                    },
                    "components": {
                      "items": {
                        "properties": {
                          "id": {
                            "pattern": "^eio[.]framework[.][a-z0-9][a-z0-9_.-]*$"
                          }
                        }
                      }
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/axis_score"
                },
                {
                  "properties": {
                    "axis": {
                      "const": "eio.axis.governance"
                    },
                    "symbol": {
                      "const": "G"
                    },
                    "components": {
                      "items": {
                        "properties": {
                          "id": {
                            "pattern": "^[a-z][a-z0-9_]*$"
                          }
                        }
                      }
                    }
                  }
                }
              ]
            }
          ],
          "items": false,
          "minItems": 4
        },
        "metrics": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/metric_view"
          },
          "description": "One per measured behaviour metric, in mappings/metrics.yaml concept order. EIO: eio.mapping.metrics."
        }
      }
    },
    "semver": {
      "type": "string",
      "pattern": "^(0|[1-9][0-9]*)[.](0|[1-9][0-9]*)[.](0|[1-9][0-9]*)(-[0-9A-Za-z-]+([.][0-9A-Za-z-]+)*)?$",
      "description": "Semantic Versioning 2.0.0 version string, pre-release allowed, build metadata not allowed. [§7.1]"
    },
    "severity": {
      "enum": [
        "CRITICAL",
        "HIGH",
        "MEDIUM",
        "LOW",
        "INFORMATIONAL"
      ],
      "description": "Severity, the EIO obligation severity enum exactly (CRITICAL > HIGH > MEDIUM > LOW > INFORMATIONAL), taken ONLY from in-scope coverage obligations (§7.8), never from a trap or a juror. EIO 0.4.0 obligations use CRITICAL, HIGH and MEDIUM. EIO: eio.entity.coverage-obligation, eio.entity.finding. [§7.8]"
    },
    "sha256_digest": {
      "type": "string",
      "pattern": "^sha256:[0-9a-f]{64}$",
      "description": "A SHA-256 digest written 'sha256:' + 64 lowercase hex characters (per_sha256, archive_sha256, transcript_sha256, span_sha256, source_sha256, arguments_sha256, profile_sha256, module hashes). Never truncated; the 16-hex capsule truncation is not accepted here. [§5.4]"
    },
    "signoff": {
      "type": "object",
      "description": "Whether human sign-off is required. EIO: eio.role.reviewer. [§9.5]",
      "additionalProperties": false,
      "required": [
        "required",
        "status"
      ],
      "properties": {
        "required": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "From signoff_required or tier; null when no policy. EIO: eio.role.reviewer."
        },
        "status": {
          "enum": [
            "REQUIRED_NOT_RECORDED",
            "NOT_REQUIRED",
            "NOT_DETERMINED"
          ],
          "description": "Sign-off is recorded by the platform over per_sha256, never in the record."
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "status": {
                "const": "REQUIRED_NOT_RECORDED"
              }
            },
            "required": [
              "status"
            ]
          },
          "then": {
            "properties": {
              "required": {
                "const": true
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "status": {
                "const": "NOT_REQUIRED"
              }
            },
            "required": [
              "status"
            ]
          },
          "then": {
            "properties": {
              "required": {
                "const": false
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "status": {
                "const": "NOT_DETERMINED"
              }
            },
            "required": [
              "status"
            ]
          },
          "then": {
            "properties": {
              "required": {
                "type": "null"
              }
            }
          }
        }
      ]
    },
    "source_type": {
      "enum": [
        "AGENT_ANSWER",
        "AGENT_TOOL_CALL",
        "TOOL_RESULT",
        "STATE_LEDGER",
        "HUMAN_REVIEW",
        "USER_INPUT",
        "RETRIEVAL",
        "POLICY_SOURCE",
        "EVALUATOR_SIGNAL",
        "EVALUATOR_INFERENCE"
      ],
      "description": "Evidence source type: the 10 values of the EIO 0.4.0 source_types section (eio.core.evidence; 01 §6.2). Only AGENT_ANSWER, AGENT_TOOL_CALL, TOOL_RESULT, STATE_LEDGER and HUMAN_REVIEW may witness agent behaviour (W); HUMAN_REVIEW is admitted only on HUMAN_SIGNOFF refs. JSON-LD alias: eio.source.<TOKEN>. EIO: eio.core.evidence. [§7.5]"
    },
    "state_counts": {
      "type": "object",
      "description": "Claim census by decision state; MUST reconcile with /claims (VER-4). EIO: eio.profile.decision-policy. [§7.7]",
      "additionalProperties": false,
      "required": [
        "APPLICABLE_PASS",
        "APPLICABLE_FAIL",
        "NOT_APPLICABLE",
        "UNRESOLVED",
        "EVIDENCE_INVALID",
        "EVIDENCE_INCOMPLETE",
        "EVALUATOR_ERROR",
        "total"
      ],
      "properties": {
        "APPLICABLE_PASS": {
          "$ref": "#/$defs/count",
          "description": "Claims in APPLICABLE_PASS. EIO: eio.core.decisions."
        },
        "APPLICABLE_FAIL": {
          "$ref": "#/$defs/count",
          "description": "Claims in APPLICABLE_FAIL. EIO: eio.core.decisions."
        },
        "NOT_APPLICABLE": {
          "$ref": "#/$defs/count",
          "description": "Claims in NOT_APPLICABLE. EIO: eio.core.decisions."
        },
        "UNRESOLVED": {
          "$ref": "#/$defs/count",
          "description": "Claims in UNRESOLVED. EIO: eio.core.decisions."
        },
        "EVIDENCE_INVALID": {
          "$ref": "#/$defs/count",
          "description": "Claims in EVIDENCE_INVALID. EIO: eio.core.decisions."
        },
        "EVIDENCE_INCOMPLETE": {
          "$ref": "#/$defs/count",
          "description": "Claims in EVIDENCE_INCOMPLETE. EIO: eio.core.decisions."
        },
        "EVALUATOR_ERROR": {
          "$ref": "#/$defs/count",
          "description": "Claims in EVALUATOR_ERROR. EIO: eio.core.decisions."
        },
        "total": {
          "$ref": "#/$defs/count",
          "description": "= len(claims); one unit: claims."
        }
      }
    },
    "subject": {
      "type": "object",
      "description": "What was evaluated; joins the record to the platform's agent registration and regression baseline. EIO: eio.entity.agent, eio.entity.ai-bom. [§7.3]",
      "additionalProperties": false,
      "required": [
        "agent",
        "ai_bom"
      ],
      "properties": {
        "agent": {
          "type": "object",
          "description": "The agent under evaluation. EIO: eio.entity.agent.",
          "additionalProperties": false,
          "required": [
            "agent_id",
            "version",
            "model"
          ],
          "properties": {
            "agent_id": {
              "type": [
                "string",
                "null"
              ],
              "minLength": 1,
              "description": "--agent (archive schema 2); null ⇒ limitation. EIO: eio.entity.agent, eiop:agent_id."
            },
            "version": {
              "type": [
                "string",
                "null"
              ],
              "minLength": 1,
              "description": "--agent-version. EIO: eio.entity.agent, eiop:version."
            },
            "model": {
              "type": [
                "string",
                "null"
              ],
              "minLength": 1,
              "description": "capsule.models.agent_under_test. EIO: eio.entity.agent, eiop:model."
            },
            "class": {
              "type": "string",
              "minLength": 1,
              "description": "metadata.agent_class, e.g. stable."
            },
            "determinism": {
              "$ref": "#/$defs/fraction",
              "description": "metadata.agent_determinism."
            },
            "role": {
              "type": "string",
              "minLength": 1,
              "description": "Operator-declared agent role text, never private evaluator prose."
            },
            "goal": {
              "type": "string",
              "minLength": 1,
              "description": "Operator-declared goal text."
            },
            "business_case": {
              "type": "string",
              "minLength": 1,
              "description": "Operator-declared business case text."
            }
          }
        },
        "ai_bom": {
          "type": "object",
          "description": "Content hashes of the agent's components. EIO: eio.entity.ai-bom.",
          "additionalProperties": false,
          "required": [
            "content_hash",
            "components"
          ],
          "properties": {
            "content_hash": {
              "anyOf": [
                {
                  "$ref": "#/$defs/sha256_digest"
                },
                {
                  "type": "null"
                }
              ],
              "description": "'sha256:' + hex(sha256(UTF-8(JCS(components)))) if at least one component carries a digest, else null plus per.lim.ai_bom.no_digests (enforced below). EIO: eio.entity.ai-bom, eiop:content_hash."
            },
            "components": {
              "type": "array",
              "items": {
                "type": "object",
                "description": "One AI-BOM component. EIO: eio.relation.documents-component-of. [§7.3]",
                "additionalProperties": false,
                "required": [
                  "kind",
                  "name",
                  "sha256"
                ],
                "properties": {
                  "kind": {
                    "enum": [
                      "machine-learning-model",
                      "file",
                      "data",
                      "application",
                      "library",
                      "framework"
                    ],
                    "description": "CycloneDX 1.6 component.type subset (§15.4): machine-learning-model (a model, e.g. the agent's model), file (system prompt, policy, tool schema, agent manifest), data (knowledge sources, datasets), application (tools, the agent runtime), library, framework. EIO: eio.relation.documents-component-of."
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "description": "Model id or relative artefact name."
                  },
                  "sha256": {
                    "anyOf": [
                      {
                        "$ref": "#/$defs/sha256_digest"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Content digest; null for hosted models (weights cannot be captured)."
                  }
                }
              },
              "description": "One entry per embedded context artifact {kind, name, sha256} plus the agent model {kind: machine-learning-model, sha256: null}, sorted by (kind, name). EIO: eio.relation.documents-component-of."
            }
          },
          "allOf": [
            {
              "if": {
                "properties": {
                  "components": {
                    "items": {
                      "properties": {
                        "sha256": {
                          "type": "null"
                        }
                      }
                    }
                  }
                },
                "required": [
                  "components"
                ]
              },
              "then": {
                "properties": {
                  "content_hash": {
                    "type": "null"
                  }
                }
              },
              "else": {
                "properties": {
                  "content_hash": {
                    "$ref": "#/$defs/sha256_digest"
                  }
                }
              }
            }
          ]
        }
      }
    },
    "telemetry": {
      "type": "object",
      "description": "Cost and usage. No view, gate or rule reads this block; it is covered by per_sha256. [§7.14]",
      "additionalProperties": false,
      "required": [
        "agent_under_test",
        "wall_clock_seconds",
        "evaluator_models"
      ],
      "properties": {
        "agent_under_test": {
          "type": "object",
          "description": "Agent-under-test usage from performance.",
          "additionalProperties": false,
          "required": [
            "llm_calls",
            "tokens",
            "latency_ms",
            "error_rate",
            "cost_usd",
            "cost_provenance"
          ],
          "properties": {
            "llm_calls": {
              "anyOf": [
                {
                  "$ref": "#/$defs/count"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Agent model calls."
            },
            "tokens": {
              "anyOf": [
                {
                  "type": "object",
                  "description": "Token usage. [§7.14]",
                  "additionalProperties": false,
                  "required": [
                    "input",
                    "output"
                  ],
                  "properties": {
                    "input": {
                      "$ref": "#/$defs/count",
                      "description": "See count. [§5.2]"
                    },
                    "output": {
                      "$ref": "#/$defs/count",
                      "description": "See count. [§5.2]"
                    }
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Token usage, or null."
            },
            "latency_ms": {
              "anyOf": [
                {
                  "type": "object",
                  "description": "Latency percentiles in ms. [§7.14]",
                  "additionalProperties": false,
                  "required": [
                    "p50",
                    "p95",
                    "max"
                  ],
                  "properties": {
                    "p50": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Median agent latency in milliseconds, an integer rounded half-up from the archive value."
                    },
                    "p95": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "95th-percentile agent latency in milliseconds, an integer rounded half-up from the archive value."
                    },
                    "max": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Maximum agent latency in milliseconds, an integer rounded half-up from the archive value."
                    }
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Latency, or null."
            },
            "error_rate": {
              "anyOf": [
                {
                  "$ref": "#/$defs/fraction"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Error rate."
            },
            "cost_usd": {
              "type": [
                "number",
                "null"
              ],
              "minimum": 0,
              "description": "USD cost (4 dp)."
            },
            "cost_provenance": {
              "$ref": "#/$defs/cost_provenance",
              "description": "See cost_provenance."
            }
          }
        },
        "wall_clock_seconds": {
          "type": [
            "number",
            "null"
          ],
          "minimum": 0,
          "description": "duration_seconds."
        },
        "evaluator_models": {
          "type": "array",
          "items": {
            "type": "object"
          },
          "description": "Evaluator-model usage, if captured."
        }
      }
    },
    "tier_id": {
      "enum": [
        "eio.tier.minimal",
        "eio.tier.limited",
        "eio.tier.elevated",
        "eio.tier.high"
      ],
      "description": "An EIO governance tier (governance/gates.yaml). Never assumed 'minimal' when unknown (null instead). EIO: eio.entity.risk-tier. [§7.4]"
    },
    "tool_receipt": {
      "type": "object",
      "description": "Receipt of one tool call (TOOL_RECEIPT refs only). EIO: eio.entity.tool-invocation, eio.entity.tool-result. [§7.5]",
      "additionalProperties": false,
      "required": [
        "name",
        "call_index",
        "arguments_sha256",
        "arguments_pointer",
        "output"
      ],
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "description": "Tool name as called by the agent. EIO: eio.entity.tool-invocation, eiop:tool_name."
        },
        "call_index": {
          "$ref": "#/$defs/count",
          "description": "0-based position of the call in transcript[i].tools_called. Not part of the ref id except through the repeated-call rule of §6 (the k-th identical call of a turn, k ≥ 2, appends '|k' to x). EIO: eiop:call_id."
        },
        "arguments_sha256": {
          "$ref": "#/$defs/sha256_digest",
          "description": "'sha256:' + hex(sha256(UTF-8(JCS(arguments)))) — plain SHA-256, verifiable by any holder of the archive — where arguments is the call's 'arguments' object, else 'args', else {}. Argument values never enter the record (§13.1). EIO: eio.entity.tool-invocation, eiop:arguments_hash. [§5.4]"
        },
        "arguments_pointer": {
          "type": "string",
          "pattern": "^/sources/turns/(0|[1-9][0-9]*)/tool_calls/(0|[1-9][0-9]*)/arguments$",
          "description": "RFC 6901 pointer into the ARCHIVE (not the record) to the arguments, e.g. /transcript/4/tools_called/0/arguments for turn 5; the last token is 'args' when the call carries only that key (04 §5.5, MAP-27)."
        },
        "output": {
          "description": "Tool result digest {sha256}, or 'NOT_CAPTURED' (archive schema 1 stores no results). EIO: eio.entity.tool-result, eiop:result_hash.",
          "anyOf": [
            {
              "const": "NOT_CAPTURED"
            },
            {
              "type": "object",
              "description": "Digest of the recorded tool result. EIO: eiop:result_hash. [§7.5]",
              "additionalProperties": false,
              "required": [
                "sha256"
              ],
              "properties": {
                "sha256": {
                  "$ref": "#/$defs/sha256_digest",
                  "description": "See sha256_digest. [§5.4]"
                }
              }
            }
          ]
        }
      }
    },
    "trial_kind_id": {
      "type": "string",
      "pattern": "^eio[.]trial[.][a-z0-9][a-z0-9_.-]*$",
      "description": "An EIO reliability trial kind: eio.trial.repeat, eio.trial.metamorphic or eio.trial.counterfactual (reliability/ledgers.yaml). The current harness produces only eio.trial.repeat. EIO: eio.entity.trial. [§10]"
    },
    "turn_index": {
      "type": "integer",
      "minimum": 1,
      "description": "1-based turn index exactly as in the archive (transcript[i].turn_index, archive array position i = turn_index - 1). EIO's claim schema admits 0; PER turn indices start at 1. EIO: eio.entity.turn, eiop:turn_index. [§7.5]"
    },
    "turn_ref": {
      "type": "object",
      "description": "Digest summary of one transcript turn, cited or not (evidence.turns[]). EIO: eio.entity.turn. [§7.5]",
      "additionalProperties": false,
      "required": [
        "turn_index",
        "question_sha256",
        "answer_sha256",
        "tool_calls",
        "retrievals",
        "scenario"
      ],
      "properties": {
        "turn_index": {
          "$ref": "#/$defs/turn_index",
          "description": "See turn_index. EIO: eio.entity.turn, eiop:turn_index."
        },
        "question_sha256": {
          "$ref": "#/$defs/sha256_digest",
          "description": "Digest of the UTF-8 question text."
        },
        "answer_sha256": {
          "$ref": "#/$defs/sha256_digest",
          "description": "Digest of the UTF-8 answer text."
        },
        "tool_calls": {
          "type": "array",
          "items": {
            "type": "object",
            "description": "One tool call of the turn, in call order. EIO: eio.entity.tool-invocation. [§7.5]",
            "additionalProperties": false,
            "required": [
              "name",
              "arguments_sha256"
            ],
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "description": "Tool name. EIO: eiop:tool_name."
              },
              "arguments_sha256": {
                "$ref": "#/$defs/sha256_digest",
                "description": "sha256(JCS(arguments)). EIO: eiop:arguments_hash."
              }
            }
          },
          "description": "Tool calls in call order. EIO: eio.entity.tool-invocation."
        },
        "retrievals": {
          "type": "array",
          "items": {
            "type": "object",
            "description": "One retrieval shown to the agent (text NOT_CAPTURED). EIO: eio.entity.retrieval. [§7.5]",
            "additionalProperties": false,
            "required": [
              "source"
            ],
            "properties": {
              "source": {
                "$ref": "#/$defs/relative_path",
                "description": "Retrieval source name (relative). EIO: eio.entity.retrieval, eiop:source."
              }
            }
          },
          "description": "Retrievals of the turn. EIO: eio.entity.retrieval."
        },
        "scenario": {
          "type": [
            "string",
            "null"
          ],
          "minLength": 1
        }
      }
    },
    "readiness_block": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "trigger",
        "scope",
        "ceiling"
      ],
      "description": "A readiness hard block not triggered by a claim. It is not an EIO cap (EIO caps name claims); it raises per.lim.cap.no_claim and reaches the release recommendation only as §9.3 states (prohibited use: profile rule; critical floor: eio.floor.critical-metric; critical technical issue: through min_score). [§7.10]",
      "properties": {
        "trigger": {
          "enum": [
            "prohibited_use",
            "critical_floor",
            "critical_technical_issue"
          ],
          "description": "The harness-2.x hard-block trigger."
        },
        "scope": {
          "const": "readiness",
          "description": "The readiness value."
        },
        "ceiling": {
          "allOf": [
            {
              "$ref": "#/$defs/score_0_100"
            }
          ],
          "description": "Ceiling on the 0–100 scale (49 under harness-2.x)."
        }
      }
    },
    "metric_floor_result": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "metric",
        "floor",
        "observed",
        "result"
      ],
      "description": "One metric evaluated against eio.floor.critical-metric. EIO: eio.floor.critical-metric. [§9.3]",
      "properties": {
        "metric": {
          "allOf": [
            {
              "$ref": "#/$defs/metric_id"
            }
          ],
          "description": "The metric."
        },
        "floor": {
          "const": 50,
          "description": "The floor on the 0–100 scale (5.0/10)."
        },
        "observed": {
          "anyOf": [
            {
              "$ref": "#/$defs/score_0_100"
            },
            {
              "type": "null"
            }
          ],
          "description": "scores.metrics[m].value, or null when the metric has no value or no row."
        },
        "result": {
          "enum": [
            "pass",
            "fail",
            "not_evaluated"
          ],
          "description": "pass (observed >= 50), fail (observed < 50), not_evaluated (observed null)."
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "observed": {
                "type": "null"
              }
            },
            "required": [
              "observed"
            ]
          },
          "then": {
            "properties": {
              "result": {
                "const": "not_evaluated"
              }
            }
          },
          "else": {
            "properties": {
              "result": {
                "enum": [
                  "pass",
                  "fail"
                ]
              }
            }
          }
        }
      ]
    },
    "declared_policy": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "origin",
        "name",
        "profile_sha256",
        "state"
      ],
      "description": "A local profile file declared to a connected harness (owner decision 1). EIO: eio.entity.governance-profile. [§9.2]",
      "properties": {
        "origin": {
          "const": "local",
          "description": "Always local."
        },
        "name": {
          "type": "string",
          "minLength": 1,
          "description": "Profile name from the local file."
        },
        "profile_sha256": {
          "allOf": [
            {
              "$ref": "#/$defs/sha256_digest"
            }
          ],
          "description": "'sha256:' + hex(sha256(UTF-8(JCS(profile object)))) of the local profile."
        },
        "state": {
          "allOf": [
            {
              "$ref": "#/$defs/release_state"
            }
          ],
          "description": "The §9.3 state computed with the local profile in place of the platform profile; it drives only the harness's local exit code."
        }
      }
    },
    "native_score_digest": {
      "type": "string",
      "pattern": "^sha256:[0-9a-f]{64}$"
    },
    "native_score_value": {
      "type": [
        "number",
        "null"
      ],
      "minimum": 0,
      "maximum": 100
    },
    "native_score_identifier": {
      "type": "string",
      "pattern": "^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)+$"
    },
    "native_score_metric": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "metric",
        "value",
        "member_claim_ids",
        "pre_cap",
        "cap_claim_ids",
        "context_ceiling",
        "status",
        "withheld_code"
      ],
      "properties": {
        "metric": {
          "type": "string",
          "pattern": "^eio[.]metric[.][a-z0-9-]+$"
        },
        "value": {
          "$ref": "#/$defs/native_score_value"
        },
        "member_claim_ids": {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string",
            "pattern": "^[0-9a-f]{20}$"
          }
        },
        "pre_cap": {
          "$ref": "#/$defs/native_score_value"
        },
        "cap_claim_ids": {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string",
            "pattern": "^[0-9a-f]{20}$"
          }
        },
        "context_ceiling": {
          "$ref": "#/$defs/native_score_value"
        },
        "status": {
          "enum": [
            "MEASURED",
            "WITHHELD"
          ]
        },
        "withheld_code": {
          "enum": [
            null,
            "NO_APPLICABLE_CLAIM",
            "SCENARIO_BINDING_ABSENT",
            "SCENARIO_SEVERITY_ABSENT",
            "TOOLS_NOT_USED"
          ]
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "status": {
                "const": "WITHHELD"
              }
            }
          },
          "then": {
            "properties": {
              "value": {
                "type": "null"
              },
              "withheld_code": {
                "type": "string"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "status": {
                "const": "MEASURED"
              }
            }
          },
          "then": {
            "properties": {
              "value": {
                "type": "number"
              },
              "withheld_code": {
                "type": "null"
              }
            }
          }
        }
      ]
    },
    "native_score_axis": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "axis",
        "value",
        "basis_ids",
        "status",
        "withheld_code"
      ],
      "properties": {
        "axis": {
          "enum": [
            "eio.axis.context",
            "eio.axis.behaviour",
            "eio.axis.compliance",
            "eio.axis.governance"
          ]
        },
        "value": {
          "$ref": "#/$defs/native_score_value"
        },
        "basis_ids": {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "$ref": "#/$defs/native_score_identifier"
          }
        },
        "status": {
          "enum": [
            "MEASURED",
            "WITHHELD"
          ]
        },
        "withheld_code": {
          "enum": [
            null,
            "NO_APPLICABLE_CLAIM",
            "CONTEXT_ARTIFACT_UNVERIFIED",
            "ASSESSOR_RATING_ABSENT",
            "NO_CONTEXT_CRITERION",
            "CONTROL_SAMPLE_INSUFFICIENT",
            "FRESHNESS_UNVERIFIED",
            "DECISIVE_SET_UNVERIFIED"
          ]
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "status": {
                "const": "WITHHELD"
              }
            }
          },
          "then": {
            "properties": {
              "value": {
                "type": "null"
              },
              "withheld_code": {
                "type": "string"
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "status": {
                "const": "MEASURED"
              }
            }
          },
          "then": {
            "properties": {
              "value": {
                "type": "number"
              },
              "withheld_code": {
                "type": "null"
              }
            }
          }
        }
      ]
    },
    "native_draft_scores": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "$comment": "Unpublished diagnostic only; not an approved PER rc3 schema or public identifier.",
      "type": "object",
      "additionalProperties": false,
      "required": [
        "kind",
        "scoring_profile",
        "score_basis_version",
        "score_basis_sha256",
        "score_sha256",
        "metrics",
        "axes",
        "readiness"
      ],
      "properties": {
        "kind": {
          "const": "reference-draft"
        },
        "scoring_profile": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "id",
            "version",
            "sha256",
            "ontology_sha256"
          ],
          "properties": {
            "id": {
              "const": "eio-agents.reference-scoring"
            },
            "version": {
              "const": "0.2.0-draft.1"
            },
            "sha256": {
              "$ref": "#/$defs/native_score_digest"
            },
            "ontology_sha256": {
              "$ref": "#/$defs/native_score_digest"
            }
          }
        },
        "score_basis_version": {
          "const": "eio-agents.score-basis/0.2.0-draft.1"
        },
        "score_basis_sha256": {
          "$ref": "#/$defs/native_score_digest"
        },
        "score_sha256": {
          "$ref": "#/$defs/native_score_digest"
        },
        "metrics": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/native_score_metric"
          },
          "uniqueItems": true
        },
        "axes": {
          "type": "array",
          "minItems": 4,
          "maxItems": 4,
          "prefixItems": [
            {
              "allOf": [
                {
                  "$ref": "#/$defs/native_score_axis"
                },
                {
                  "properties": {
                    "axis": {
                      "const": "eio.axis.context"
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/native_score_axis"
                },
                {
                  "properties": {
                    "axis": {
                      "const": "eio.axis.behaviour"
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/native_score_axis"
                },
                {
                  "properties": {
                    "axis": {
                      "const": "eio.axis.compliance"
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/native_score_axis"
                },
                {
                  "properties": {
                    "axis": {
                      "const": "eio.axis.governance"
                    },
                    "value": {
                      "type": "null"
                    },
                    "status": {
                      "const": "WITHHELD"
                    }
                  }
                }
              ]
            }
          ],
          "items": false
        },
        "readiness": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "value",
            "status",
            "withheld_codes"
          ],
          "properties": {
            "value": {
              "type": "null"
            },
            "status": {
              "const": "WITHHELD"
            },
            "withheld_codes": {
              "type": "array",
              "minItems": 1,
              "uniqueItems": true,
              "items": {
                "enum": [
                  "INDEPENDENT_PROOF_PENDING",
                  "FRESHNESS_UNVERIFIED",
                  "DECISIVE_SET_UNVERIFIED"
                ]
              }
            }
          }
        }
      }
    },
    "native_full_scores": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "kind",
        "scoring_profile",
        "score_basis_version",
        "score_basis_sha256",
        "score_sha256",
        "metrics",
        "axes",
        "proof_sets",
        "readiness"
      ],
      "properties": {
        "kind": {
          "const": "reference-draft"
        },
        "scoring_profile": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "id",
            "version",
            "sha256",
            "ontology_sha256"
          ],
          "properties": {
            "id": {
              "const": "eio-agents.reference-scoring"
            },
            "version": {
              "const": "0.3.1-draft.1"
            },
            "sha256": {
              "$ref": "#/$defs/native_score_digest"
            },
            "ontology_sha256": {
              "$ref": "#/$defs/native_score_digest"
            }
          }
        },
        "score_basis_version": {
          "const": "eio-agents.score-basis/0.3.0-draft.1"
        },
        "score_basis_sha256": {
          "$ref": "#/$defs/native_score_digest"
        },
        "score_sha256": {
          "$ref": "#/$defs/native_score_digest"
        },
        "metrics": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/native_score_metric"
          },
          "uniqueItems": true
        },
        "axes": {
          "type": "array",
          "minItems": 4,
          "maxItems": 4,
          "prefixItems": [
            {
              "allOf": [
                {
                  "$ref": "#/$defs/native_score_axis"
                },
                {
                  "properties": {
                    "axis": {
                      "const": "eio.axis.context"
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/native_score_axis"
                },
                {
                  "properties": {
                    "axis": {
                      "const": "eio.axis.behaviour"
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/native_score_axis"
                },
                {
                  "properties": {
                    "axis": {
                      "const": "eio.axis.compliance"
                    }
                  }
                }
              ]
            },
            {
              "allOf": [
                {
                  "$ref": "#/$defs/native_score_axis"
                },
                {
                  "properties": {
                    "axis": {
                      "const": "eio.axis.governance"
                    },
                    "basis_ids": {
                      "const": [
                        "release_gate",
                        "human_oversight",
                        "policy_conformance",
                        "obligation_coverage"
                      ]
                    }
                  }
                }
              ]
            }
          ],
          "items": false
        },
        "proof_sets": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "reportable_finding_ids",
            "decisive_finding_ids",
            "decisive_claim_ids"
          ],
          "properties": {
            "reportable_finding_ids": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "string",
                "pattern": "^[0-9a-f]{20}$"
              }
            },
            "decisive_finding_ids": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "string",
                "pattern": "^[0-9a-f]{20}$"
              }
            },
            "decisive_claim_ids": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "string",
                "pattern": "^[0-9a-f]{20}$"
              }
            }
          }
        },
        "readiness": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "value",
            "status",
            "withheld_codes",
            "raw",
            "cap"
          ],
          "properties": {
            "value": {
              "$ref": "#/$defs/native_score_value"
            },
            "status": {
              "enum": [
                "MEASURED",
                "WITHHELD"
              ]
            },
            "withheld_codes": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "const": "REQUIRED_AXIS_WITHHELD"
              }
            },
            "raw": {
              "$ref": "#/$defs/native_score_value"
            },
            "cap": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "applied",
                "ceiling",
                "claim_ids",
                "prohibited_use"
              ],
              "properties": {
                "applied": {
                  "type": "boolean"
                },
                "ceiling": {
                  "enum": [
                    null,
                    49.0
                  ]
                },
                "claim_ids": {
                  "type": "array",
                  "uniqueItems": true,
                  "items": {
                    "type": "string",
                    "pattern": "^[0-9a-f]{20}$"
                  }
                },
                "prohibited_use": {
                  "type": "boolean"
                }
              }
            }
          },
          "allOf": [
            {
              "if": {
                "properties": {
                  "status": {
                    "const": "WITHHELD"
                  }
                }
              },
              "then": {
                "properties": {
                  "value": {
                    "type": "null"
                  },
                  "raw": {
                    "type": "null"
                  },
                  "withheld_codes": {
                    "const": [
                      "REQUIRED_AXIS_WITHHELD"
                    ]
                  }
                }
              }
            },
            {
              "if": {
                "properties": {
                  "status": {
                    "const": "MEASURED"
                  }
                }
              },
              "then": {
                "properties": {
                  "value": {
                    "type": "number"
                  },
                  "raw": {
                    "type": "number"
                  },
                  "withheld_codes": {
                    "const": []
                  }
                }
              }
            }
          ]
        }
      }
    }
  }
}
