{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://oshun.invalid/schemas/eve-chat-surface-parity.v1.json",
  "title": "Eve dated chat-surface parity register",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schemaVersion",
    "taskId",
    "assessmentDate",
    "ratifiedDate",
    "baseline",
    "parityDefinition",
    "surfaces",
    "featureCount",
    "features",
    "sourceSnapshot",
    "limitations"
  ],
  "properties": {
    "schemaVersion": { "const": "eve.chat-surface-parity.v1" },
    "taskId": { "const": "8.12" },
    "assessmentDate": { "const": "2026-09-11" },
    "ratifiedDate": { "const": "2026-09-16" },
    "baseline": {
      "type": "object",
      "additionalProperties": false,
      "required": ["products", "observedOn", "sourceRevision", "auditPath"],
      "properties": {
        "products": {
          "type": "array",
          "minItems": 2,
          "maxItems": 2,
          "items": { "enum": ["ChatGPT", "Claude.ai"] }
        },
        "observedOn": { "const": "2026-09-11" },
        "sourceRevision": { "$ref": "#/$defs/commit" },
        "auditPath": {
          "const": "docs/audits/EVE_CHAT_UI_PARITY_AUDIT_2026-09-11.md"
        }
      }
    },
    "parityDefinition": {
      "type": "object",
      "additionalProperties": false,
      "required": ["criterion", "requiredGovernancePaths", "statusVocabulary"],
      "properties": {
        "criterion": { "type": "string", "minLength": 1 },
        "requiredGovernancePaths": {
          "type": "array",
          "minItems": 4,
          "maxItems": 4,
          "items": {
            "enum": [
              "intent-ledger",
              "confirm-cards",
              "privacy-boundary",
              "capability-declarations"
            ]
          }
        },
        "statusVocabulary": {
          "type": "object",
          "additionalProperties": false,
          "required": ["ships", "partial", "absent", "not-applicable"],
          "properties": {
            "ships": { "type": "string", "minLength": 1 },
            "partial": { "type": "string", "minLength": 1 },
            "absent": { "type": "string", "minLength": 1 },
            "not-applicable": { "type": "string", "minLength": 1 }
          }
        }
      }
    },
    "surfaces": {
      "type": "array",
      "minItems": 3,
      "maxItems": 3,
      "items": { "$ref": "#/$defs/surface" }
    },
    "featureCount": { "const": 53 },
    "features": {
      "type": "array",
      "minItems": 53,
      "maxItems": 53,
      "items": { "$ref": "#/$defs/feature" }
    },
    "sourceSnapshot": {
      "type": "array",
      "minItems": 10,
      "items": { "$ref": "#/$defs/sourceSnapshot" }
    },
    "limitations": {
      "type": "array",
      "minItems": 4,
      "items": { "type": "string", "minLength": 1 }
    }
  },
  "$defs": {
    "commit": { "type": "string", "pattern": "^[0-9a-f]{40}$" },
    "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
    "surface": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "label", "sourcePaths", "transport", "renderer"],
      "properties": {
        "id": { "enum": ["admin-drawer", "member-web", "mobile-sheet"] },
        "label": { "type": "string", "minLength": 1 },
        "sourcePaths": {
          "type": "array",
          "minItems": 2,
          "items": { "type": "string", "minLength": 1 }
        },
        "transport": { "type": "string", "minLength": 1 },
        "renderer": { "type": "string", "minLength": 1 }
      }
    },
    "status": {
      "type": "object",
      "additionalProperties": false,
      "required": ["state", "qualifier", "sourceEvidence"],
      "properties": {
        "state": {
          "enum": ["ships", "partial", "absent", "not-applicable"]
        },
        "qualifier": { "type": ["string", "null"] },
        "sourceEvidence": {
          "type": "array",
          "maxItems": 1,
          "items": { "$ref": "#/$defs/sourceEvidence" }
        }
      }
    },
    "sourceEvidence": {
      "type": "object",
      "additionalProperties": false,
      "required": ["path", "literal", "line", "blobSha256", "basis"],
      "properties": {
        "path": { "type": "string", "minLength": 1 },
        "literal": { "type": "string", "minLength": 1 },
        "line": { "type": "integer", "minimum": 1 },
        "blobSha256": { "$ref": "#/$defs/sha256" },
        "basis": { "enum": ["surface-implementation", "qualified-substrate"] }
      }
    },
    "feature": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id",
        "category",
        "feature",
        "statuses",
        "decidingEvidence",
        "ownerTaskIds",
        "originalOwnerCell"
      ],
      "properties": {
        "id": { "type": "string", "pattern": "^[a-z0-9-]+\\.[a-z0-9-]+$" },
        "category": {
          "enum": [
            "composer",
            "transcript",
            "artifacts",
            "conversations",
            "personalisation",
            "agentic-work",
            "media-generation"
          ]
        },
        "feature": { "type": "string", "minLength": 1 },
        "statuses": {
          "type": "object",
          "additionalProperties": false,
          "required": ["admin-drawer", "member-web", "mobile-sheet"],
          "properties": {
            "admin-drawer": { "$ref": "#/$defs/status" },
            "member-web": { "$ref": "#/$defs/status" },
            "mobile-sheet": { "$ref": "#/$defs/status" }
          }
        },
        "decidingEvidence": { "type": "string", "minLength": 1 },
        "ownerTaskIds": {
          "type": "array",
          "minItems": 1,
          "items": { "type": "string", "pattern": "^\\d+\\.\\d+$" }
        },
        "originalOwnerCell": { "type": "string", "minLength": 1 }
      }
    },
    "sourceSnapshot": {
      "type": "object",
      "additionalProperties": false,
      "required": ["path", "sha256", "bytes"],
      "properties": {
        "path": { "type": "string", "minLength": 1 },
        "sha256": { "$ref": "#/$defs/sha256" },
        "bytes": { "type": "integer", "minimum": 1 }
      }
    }
  }
}
