{
  "type": "object",
  "additionalProperties": false,
  "required": ["delivery_id", "hook_kind", "session_id", "session_version", "role_id", "engine", "mode", "run_id", "ticket_id", "native_session_ref", "tmux_pane_id", "observed_at", "heartbeat_deadline_at", "quota_valid_until", "quota_resume_at", "source_sha256", "ticket_authority"],
  "properties": {
    "delivery_id": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" },
    "hook_kind": { "type": "string", "enum": ["session-started", "session-heartbeat", "session-stopped", "quota-exhausted", "quota-available"] },
    "session_id": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" },
    "session_version": { "type": "integer", "minimum": 0 },
    "role_id": { "type": "string", "minLength": 3, "maxLength": 63 },
    "engine": { "type": "string", "enum": ["claude", "codex"] },
    "mode": { "type": "string", "enum": ["pane", "goal", "exec"] },
    "run_id": { "type": ["string", "null"], "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" },
    "ticket_id": { "type": ["string", "null"], "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" },
    "native_session_ref": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" },
    "tmux_pane_id": { "type": ["string", "null"], "pattern": "^%[0-9]{1,10}$" },
    "observed_at": { "type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3}Z$" },
    "heartbeat_deadline_at": { "type": ["string", "null"], "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3}Z$" },
    "quota_valid_until": { "type": ["string", "null"], "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3}Z$" },
    "quota_resume_at": { "type": ["string", "null"], "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3}Z$" },
    "source_sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
    "ticket_authority": {
      "type": ["object", "null"],
      "additionalProperties": false,
      "required": ["ticket_id", "ticket_version", "ticket_attempt", "ticket_actor", "lease_token"],
      "properties": {
        "ticket_id": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" },
        "ticket_version": { "type": "integer", "minimum": 0 },
        "ticket_attempt": { "type": "integer", "minimum": 1 },
        "ticket_actor": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" },
        "lease_token": { "type": "string", "pattern": "^lease-[a-f0-9]{48}$" }
      }
    }
  }
}
