{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.org/schemas/web-mapper-gpt-map-lineage.min.schema.json",
  "title": "Web Mapper GPT — Minimal Map Lineage Metadata",
  "type": "object",
  "additionalProperties": false,
  "required": ["schema_version", "created_at", "model", "agent", "map", "datasets", "prompts"],
  "properties": {
    "schema_version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$" },
    "created_at": { "type": "string", "format": "date-time" },

    "map_fingerprint": {
  "type": "object",
  "additionalProperties": false,
  "required": ["hash"],
  "properties": {
    "hash": { "type": "string" },
    "algorithm": { "type": "string", "default": "sha256" }
  }
},

    "model": {
      "type": "object",
      "additionalProperties": false,
      "required": ["llm_name"],
      "properties": {
        "human_user_name": { "type": "string" },
        "llm_name": { "type": "string" }
      }
    },

    "agent": {
      "type": "object",
      "additionalProperties": false,
      "required": ["name"],
      "properties": {
        "name": { "type": "string" },
        "url": { "type": "string", "format": "uri" },
        "version": { "type": "string" }
      }
    },

    "map": {
      "type": "object",
      "additionalProperties": false,
      "required": ["title", "description", "stack"],
      "properties": {
        "title": { "type": "string" },
        "description": { "type": "string" },
        "stack": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": ["name"],
            "properties": {
              "name": { "type": "string" },
              "version": { "type": "string" }
            }
          }
        },
        "outputs": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "demo_url": { "type": "string", "format": "uri" },
            "repo_url": { "type": "string", "format": "uri" }
          }
        }
      }
    },

    "datasets": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["name", "type", "fields"],
        "properties": {
          "name": { "type": "string" },
          "type": { "type": "string" },
          "source_url": { "type": "string", "format": "uri" },
          "fields": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": ["name", "type"],
              "properties": {
                "name": { "type": "string" },
                "type": { "type": "string" }
              }
            }
          }
        }
      }
    },

    "prompts": {
      "type": "array",
      "minItems": 1,
      "description": "Chronological user prompts only (keep it lightweight).",
      "items": { "type": "string" }
    }
  }
}
