{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Pawprint Models",
  "description": "Platform-agnostic model definitions. Portable to TypeScript, Pydantic, Django, Prisma.",
  "definitions": {
    "Status": {
      "type": "string",
      "enum": ["pending", "planned", "building", "dev", "live", "ready"]
    },
    "System": {
      "type": "string",
      "enum": ["artery", "album", "ward"]
    },
    "Nest": {
      "type": "object",
      "description": "Runtime environment configuration. Shared across artery, ward.",
      "properties": {
        "name": { "type": "string", "description": "Unique identifier" },
        "slug": { "type": "string", "description": "URL-friendly identifier" },
        "title": { "type": "string", "description": "Display title for UI" },
        "status": { "$ref": "#/definitions/Status" },
        "config_path": { "type": "string" }
      },
      "required": ["name", "slug", "title"]
    },
    "Larder": {
      "type": "object",
      "description": "Data storage. When generated from Template = 'Book (written)'. Independent in ward/artery.",
      "properties": {
        "name": { "type": "string", "description": "Unique identifier" },
        "slug": { "type": "string", "description": "URL-friendly identifier" },
        "title": { "type": "string", "description": "Display title for UI" },
        "status": { "$ref": "#/definitions/Status" },
        "source_template": { "type": "string", "description": "Template name if generated" },
        "data_path": { "type": "string", "description": "Path to data files" }
      },
      "required": ["name", "slug", "title"]
    },
    "Vein": {
      "type": "object",
      "description": "Connector (artery). Single responsibility.",
      "properties": {
        "name": { "type": "string", "description": "Unique identifier" },
        "slug": { "type": "string", "description": "URL-friendly identifier" },
        "title": { "type": "string", "description": "Display title for UI" },
        "status": { "$ref": "#/definitions/Status" },
        "system": { "const": "artery" }
      },
      "required": ["name", "slug", "title"]
    },
    "Template": {
      "type": "object",
      "description": "Documentation template (album). Gherkin, BDD patterns.",
      "properties": {
        "name": { "type": "string", "description": "Unique identifier" },
        "slug": { "type": "string", "description": "URL-friendly identifier" },
        "title": { "type": "string", "description": "Display title for UI" },
        "status": { "$ref": "#/definitions/Status" },
        "template_path": { "type": "string", "description": "Path to template files" },
        "system": { "const": "album" }
      },
      "required": ["name", "slug", "title"]
    },
    "ToolType": {
      "type": "string",
      "enum": ["app", "cli"],
      "description": "Type of tool: app (web UI) or cli (command line)"
    },
    "Tool": {
      "type": "object",
      "description": "Execution tool (ward). Test runners, seeders.",
      "properties": {
        "name": { "type": "string", "description": "Unique identifier" },
        "slug": { "type": "string", "description": "URL-friendly identifier" },
        "title": { "type": "string", "description": "Display title for UI" },
        "status": { "$ref": "#/definitions/Status" },
        "system": { "const": "ward" },
        "type": { "$ref": "#/definitions/ToolType" },
        "description": { "type": "string", "description": "Human-readable description" },
        "path": { "type": "string", "description": "Path to tool source" },
        "url": { "type": "string", "description": "URL path for app tools" },
        "cli": { "type": "string", "description": "CLI command for cli tools" }
      },
      "required": ["name", "slug", "title"]
    },
    "Monitor": {
      "type": "object",
      "description": "Service monitor (ward). Health checks, status watchers.",
      "properties": {
        "name": { "type": "string", "description": "Unique identifier" },
        "slug": { "type": "string", "description": "URL-friendly identifier" },
        "title": { "type": "string", "description": "Display title for UI" },
        "status": { "$ref": "#/definitions/Status" },
        "system": { "const": "ward" }
      },
      "required": ["name", "slug", "title"]
    },
    "Cabinet": {
      "type": "object",
      "description": "Tool cabinet (ward). Contains 0+ tools.",
      "properties": {
        "name": { "type": "string", "description": "Unique identifier" },
        "slug": { "type": "string", "description": "URL-friendly identifier" },
        "title": { "type": "string", "description": "Display title for UI" },
        "status": { "$ref": "#/definitions/Status" },
        "tools": {
          "type": "array",
          "items": { "$ref": "#/definitions/Tool" }
        },
        "system": { "const": "ward" }
      },
      "required": ["name", "slug", "title"]
    },
    "Pulse": {
      "type": "object",
      "description": "Composed data flow (artery). Pulse = Vein + Nest + Larder.",
      "properties": {
        "name": { "type": "string", "description": "Unique identifier" },
        "slug": { "type": "string", "description": "URL-friendly identifier" },
        "title": { "type": "string", "description": "Display title for UI" },
        "status": { "$ref": "#/definitions/Status" },
        "vein": { "$ref": "#/definitions/Vein" },
        "nest": { "$ref": "#/definitions/Nest" },
        "larder": { "$ref": "#/definitions/Larder" },
        "system": { "const": "artery" }
      },
      "required": ["name", "slug", "title"]
    },
    "Book": {
      "type": "object",
      "description": "Composed documentation (album). Book = Template + Larder.",
      "properties": {
        "name": { "type": "string", "description": "Unique identifier" },
        "slug": { "type": "string", "description": "URL-friendly identifier" },
        "title": { "type": "string", "description": "Display title for UI" },
        "status": { "$ref": "#/definitions/Status" },
        "template": { "$ref": "#/definitions/Template" },
        "larder": { "$ref": "#/definitions/Larder" },
        "output_larder": { "$ref": "#/definitions/Larder" },
        "system": { "const": "album" }
      },
      "required": ["name", "slug", "title"]
    },
    "Table": {
      "type": "object",
      "description": "Composed execution bundle (ward). Table = Cabinet + Nest + Larders.",
      "properties": {
        "name": { "type": "string", "description": "Unique identifier" },
        "slug": { "type": "string", "description": "URL-friendly identifier" },
        "title": { "type": "string", "description": "Display title for UI" },
        "status": { "$ref": "#/definitions/Status" },
        "cabinet": { "$ref": "#/definitions/Cabinet" },
        "nest": { "$ref": "#/definitions/Nest" },
        "larders": {
          "type": "array",
          "items": { "$ref": "#/definitions/Larder" }
        },
        "system": { "const": "ward" }
      },
      "required": ["name", "slug", "title"]
    }
  }
}
