{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:ax-evidence:schema:evidence:1",
  "title": "AX evidence record",
  "description": "One measured or observed finding about agent experience, with its source, the agent profile it was measured under, its evidence class and how it was verified.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "id",
    "title",
    "claim",
    "patterns",
    "finding_type",
    "effect",
    "agent_profile",
    "evidence_class",
    "conflicts_of_interest",
    "source",
    "retrieved",
    "verification",
    "limitations",
    "implications",
    "related",
    "supersedes",
    "contradicts",
    "added"
  ],
  "properties": {
    "id": {
      "description": "Stable identifier, EV- followed by four digits. Never reused.",
      "type": "string",
      "pattern": "^EV-[0-9]{4}$"
    },
    "title": {
      "description": "Short name for the finding.",
      "type": "string",
      "minLength": 5,
      "maxLength": 120
    },
    "claim": {
      "description": "The finding in one plain sentence, attributed to its source.",
      "type": "string",
      "minLength": 20,
      "maxLength": 400
    },
    "patterns": {
      "description": "Tags from the shared AX pattern vocabulary.",
      "type": "array",
      "minItems": 1,
      "uniqueItems": true,
      "items": {
        "$ref": "#/$defs/pattern"
      }
    },
    "finding_type": {
      "description": "measurement: a measured effect or rate. negative-result: the intervention made things worse or did not do what was expected. null-result: no detectable effect. observation: documented behaviour or prevalence, not an intervention. vendor-claim: a figure a vendor states without a published method.",
      "type": "string",
      "enum": [
        "measurement",
        "negative-result",
        "null-result",
        "observation",
        "vendor-claim"
      ]
    },
    "effect": {
      "description": "One or more effects, each with its metric and the numbers as reported.",
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/effect"
      }
    },
    "agent_profile": {
      "$ref": "#/$defs/agentProfile"
    },
    "evidence_class": {
      "description": "What kind of evidence this is. See the README for caveats on each class.",
      "type": "string",
      "enum": [
        "peer-reviewed",
        "preprint",
        "vendor-measurement",
        "vendor-claim",
        "independent-measurement",
        "anecdote"
      ]
    },
    "conflicts_of_interest": {
      "description": "Declared or apparent conflicts, such as authors affiliated with a vendor whose product is measured. Say 'None declared' when the source declares none and none is apparent.",
      "type": "string",
      "minLength": 3
    },
    "source": {
      "$ref": "#/$defs/source"
    },
    "corroborating_sources": {
      "description": "Optional further primary sources that support or document the same finding.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/source"
      }
    },
    "retrieved": {
      "description": "Date (YYYY-MM-DD) on which the source was last fetched and checked against this record.",
      "type": "string",
      "format": "date"
    },
    "verification": {
      "description": "verified-live: the full primary source was fetched on the retrieval date and every number in this record was found in it. abstract-only: the live abstract page was fetched and the numbers are in the abstract; the full text was not checked. secondary: seen only through a secondary report.",
      "type": "string",
      "enum": [
        "verified-live",
        "abstract-only",
        "secondary"
      ]
    },
    "verification_note": {
      "description": "Optional detail on what was checked.",
      "type": "string"
    },
    "limitations": {
      "description": "Limits on what the finding shows.",
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string",
        "minLength": 5
      }
    },
    "implications": {
      "description": "One or two plain sentences for designers.",
      "type": "string",
      "minLength": 20,
      "maxLength": 500
    },
    "related": {
      "description": "Related agent-readiness rubric check IDs (for example ACT-03) and ax-check rule IDs (AXC-D###, AXC-C###, AXC-F###).",
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string",
        "pattern": "^((FIND|READ|ACT|RECOVER|HANDBACK|BOUND)-[0-9]{2}|AXC-[DCF][0-9]{3})$"
      }
    },
    "supersedes": {
      "description": "IDs of records this one replaces.",
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string",
        "pattern": "^EV-[0-9]{4}$"
      }
    },
    "contradicts": {
      "description": "IDs of records whose finding this one disputes.",
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string",
        "pattern": "^EV-[0-9]{4}$"
      }
    },
    "added": {
      "description": "Date (YYYY-MM-DD) the record entered the register.",
      "type": "string",
      "format": "date"
    },
    "notes": {
      "description": "Optional free-text context.",
      "type": "string"
    }
  },
  "$defs": {
    "pattern": {
      "type": "string",
      "enum": [
        "discovery",
        "selection",
        "description",
        "schema-enum",
        "error-recovery",
        "false-success",
        "exit-codes",
        "non-interactive",
        "dry-run",
        "idempotency",
        "approval",
        "confirmation",
        "auth-scopes",
        "secrets",
        "claim-later-onboarding",
        "context-budget",
        "dynamic-tools",
        "code-mode",
        "docs-for-agents",
        "llms-txt",
        "ard",
        "server-cards",
        "agents-md",
        "skills",
        "drift",
        "handoff",
        "evaluation",
        "measurement",
        "propensity",
        "cost",
        "prompt-injection",
        "webmcp"
      ]
    },
    "effect": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "metric",
        "direction",
        "magnitude"
      ],
      "properties": {
        "metric": {
          "type": "string",
          "minLength": 3
        },
        "baseline": {
          "type": [
            "string",
            "null"
          ],
          "description": "Condition and value without the change, as reported."
        },
        "treatment": {
          "type": [
            "string",
            "null"
          ],
          "description": "Condition and value with the change, as reported."
        },
        "direction": {
          "type": "string",
          "enum": [
            "increase",
            "decrease",
            "no-change",
            "mixed",
            "not-applicable"
          ],
          "description": "Direction of the metric under the treatment, or not-applicable for an observation or prevalence figure."
        },
        "magnitude": {
          "type": "string",
          "minLength": 1,
          "description": "Size of the effect as text, in the source's own units."
        },
        "n": {
          "type": [
            "string",
            "null"
          ],
          "description": "Sample size, runs or trials, as reported."
        }
      }
    },
    "agentProfile": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "models",
        "harness",
        "extensions",
        "os",
        "run_dates"
      ],
      "properties": {
        "models": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Models as the source names them. An empty list means the source does not name them."
        },
        "models_note": {
          "type": "string"
        },
        "harness": {
          "type": [
            "string",
            "null"
          ],
          "description": "Agent app, harness or benchmark runner, or null if not stated."
        },
        "extensions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Skills, MCP servers, instruction files or other extensions loaded."
        },
        "os": {
          "type": [
            "string",
            "null"
          ],
          "description": "Operating system if stated, otherwise null."
        },
        "run_dates": {
          "type": [
            "string",
            "null"
          ],
          "description": "Date range of the runs if stated, otherwise null."
        }
      }
    },
    "source": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "url",
        "title",
        "publisher",
        "authors",
        "published"
      ],
      "properties": {
        "url": {
          "type": "string",
          "format": "uri",
          "pattern": "^https://"
        },
        "title": {
          "type": "string",
          "minLength": 3
        },
        "publisher": {
          "type": "string",
          "minLength": 2
        },
        "authors": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "published": {
          "type": "string",
          "format": "date"
        },
        "version": {
          "type": "string",
          "description": "Version or revision, for example arXiv v2."
        },
        "identifier": {
          "type": "string",
          "description": "Stable identifier such as arXiv:2609.00035."
        }
      }
    }
  }
}
