{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://git.deepknow.site/Facere/FacereDataset/schemas/project.schema.json",
  "title": "FacereDataset Project",
  "description": "统一项目记录。跨源（oshwhub / hackaday / github / ...）通用。",
  "type": "object",
  "required": [
    "source",
    "source_url",
    "project_id",
    "title",
    "author",
    "license",
    "crawled_at",
    "files"
  ],
  "properties": {
    "source": {
      "type": "string",
      "description": "数据源标识，如 'oshwhub'、'hackaday'、'github'",
      "enum": ["oshwhub", "hackaday", "github", "cern_ohr", "wikifactory", "other"]
    },
    "source_url": { "type": "string", "format": "uri" },
    "project_id": {
      "type": "string",
      "description": "源站点内部 ID（oshwhub 用 uuid）"
    },
    "title": { "type": "string" },
    "description_short": {
      "type": "string",
      "description": "简介（< 200 chars）"
    },
    "description_path": {
      "type": "string",
      "description": "长描述 markdown 相对本项目目录的路径，如 'description.md'"
    },
    "author": {
      "type": "object",
      "required": ["username"],
      "properties": {
        "username": { "type": "string" },
        "display_name": { "type": "string" },
        "user_id": { "type": "string" }
      }
    },
    "license": {
      "type": "string",
      "description": "原始许可证字符串；下游做规范化映射。未知标 'unknown'"
    },
    "tags": {
      "type": "array",
      "items": { "type": "string" }
    },
    "created_at": { "type": "string", "format": "date-time" },
    "updated_at": { "type": "string", "format": "date-time" },
    "published_at": { "type": "string", "format": "date-time" },
    "crawled_at": { "type": "string", "format": "date-time" },
    "metrics": {
      "type": "object",
      "additionalProperties": true,
      "description": "任意源站点统计：likes/stars/views/forks 等"
    },
    "cover": {
      "type": "object",
      "properties": {
        "url": { "type": "string", "format": "uri" },
        "path": { "type": "string", "description": "本地相对路径，如 'cover.png'" }
      }
    },
    "files": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["name", "url"],
        "properties": {
          "name": { "type": "string" },
          "url": { "type": "string", "format": "uri" },
          "path": { "type": "string", "description": "本地相对路径，如 'files/xxx.pdf'。缺省表示只保留 URL" },
          "size": { "type": "integer" },
          "md5": { "type": "string" },
          "sha256": { "type": "string" },
          "ext": { "type": "string" },
          "mime": { "type": "string" },
          "original_id": { "type": "string", "description": "源站点内部文件 ID" }
        }
      }
    },
    "raw_fields": {
      "type": "object",
      "description": "不易规范化但想保留的源站原始字段（grade、download_count 等）",
      "additionalProperties": true
    }
  },
  "additionalProperties": false
}
