{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schemaVersion",
    "recordType",
    "candidateId",
    "sourceCommit",
    "gitTree",
    "scopeSha256",
    "chain",
    "testId",
    "methodId",
    "sampleCount",
    "challengePairs",
    "falseLinks",
    "falseLinkRateBps",
    "passed",
    "transcriptPath",
    "transcriptSha256"
  ],
  "properties": {
    "schemaVersion": {
      "const": "2.0.0"
    },
    "recordType": {
      "const": "privacy-unlinkability-test-log"
    },
    "candidateId": {
      "type": "string",
      "pattern": "^sha256:[0-9a-f]{64}$"
    },
    "sourceCommit": {
      "type": "string",
      "pattern": "^[0-9a-f]{40}$"
    },
    "gitTree": {
      "type": "string",
      "pattern": "^[0-9a-f]{40}$"
    },
    "scopeSha256": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$"
    },
    "chain": {
      "const": "base"
    },
    "testId": {
      "enum": [
        "privacy.commitment-reuse",
        "privacy.cross-partner-collusion",
        "privacy.metadata-timing-correlation",
        "privacy.combined"
      ]
    },
    "methodId": {
      "const": "statistical-linkage-challenge-v1"
    },
    "sampleCount": {
      "type": "integer",
      "minimum": 100
    },
    "challengePairs": {
      "type": "integer",
      "minimum": 100
    },
    "falseLinks": {
      "type": "integer",
      "minimum": 0
    },
    "falseLinkRateBps": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10000
    },
    "passed": {
      "const": true
    },
    "transcriptPath": {
      "type": "string",
      "pattern": "^pr10/partner-package/evidence/organizational/privacy-(logs|transcripts|inputs)/[a-z0-9-]+\\.json$"
    },
    "transcriptSha256": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$"
    }
  }
}
