{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://ai.qyber.dev/edu-ai-literacy-ada-verification/learner-record-schema-v1.json",
  "title": "AI Literacy learner-owned record",
  "description": "Portable browser and terminal progress for AI Literacy: Ada, AI and Verification. The record is learner-owned and is not an assessment submission.",
  "type": "object",
  "required": [
    "schema",
    "schemaVersion",
    "courseId",
    "updatedAt",
    "profile",
    "route",
    "activities",
    "checkpoints"
  ],
  "properties": {
    "schema": {
      "const": "ai-literacy-learner-record"
    },
    "schemaVersion": {
      "const": 1
    },
    "courseId": {
      "const": "course-ai-literacy-ada-verification"
    },
    "updatedAt": {
      "type": "string",
      "format": "date-time"
    },
    "profile": {
      "type": "object",
      "required": ["name"],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 200
        }
      },
      "additionalProperties": true
    },
    "route": {
      "enum": ["table", "python"]
    },
    "learningPath": {
      "enum": ["short", "core", "core-cs", "no-maths", "responsible", "complete"]
    },
    "activities": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "required": ["completed", "notes", "updatedAt"],
        "properties": {
          "completed": {"type": "boolean"},
          "notes": {"type": "string", "maxLength": 50000},
          "updatedAt": {"type": "string", "format": "date-time"}
        },
        "additionalProperties": true
      }
    },
    "checkpoints": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "required": ["passed", "attempts", "answer", "updatedAt"],
        "properties": {
          "passed": {"type": "boolean"},
          "attempts": {"type": "integer", "minimum": 0},
          "answer": {
            "oneOf": [
              {"type": "string", "maxLength": 50000},
              {"type": "number"},
              {"type": "array", "maxItems": 200}
            ]
          },
          "updatedAt": {"type": "string", "format": "date-time"}
        },
        "additionalProperties": true
      }
    },
    "preferences": {
      "type": "object",
      "properties": {
        "storageNoticeAcknowledgedAt": {
          "type": ["string", "null"],
          "format": "date-time"
        }
      },
      "additionalProperties": true
    },
    "extensions": {
      "type": "object",
      "additionalProperties": true
    }
  },
  "additionalProperties": true
}
