{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://coer.dev/schema/dashboard.schema.json",
  "title": "CoER Reconnaissance Dashboard",
  "description": "Canonical structure of a Center-of-Excellence reconnaissance landscape. Each panel corresponds to a region of the CoER template and is produced by a step/while-loop of the CoER method.",
  "type": "object",
  "required": ["schemaVersion", "domain"],
  "additionalProperties": false,
  "properties": {
    "schemaVersion": { "type": "string", "const": "1.0.0" },
    "meta": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "slug": { "type": "string", "pattern": "^[a-z0-9-]+$" },
        "generatedBy": { "type": "string", "description": "skill | mcp | rest | human" },
        "completeness": { "type": "number", "minimum": 0, "maximum": 1 },
        "sources": { "type": "array", "items": { "type": "string", "format": "uri" } }
      }
    },

    "domain": {
      "type": "object",
      "description": "Step intake. The center node of the template.",
      "required": ["name"],
      "additionalProperties": false,
      "properties": {
        "name": { "type": "string" },
        "industryContext": { "type": "string" },
        "focusAreas": { "type": "array", "items": { "type": "string" } },
        "geographicFocus": { "type": "string" },
        "timeHorizon": { "type": "string" },
        "researchObjectives": { "type": "array", "items": { "type": "string" } }
      }
    },

    "usefulLinks": {
      "type": "array",
      "description": "While · Collect Links.",
      "items": {
        "type": "object",
        "required": ["url"],
        "additionalProperties": false,
        "properties": {
          "title": { "type": "string" },
          "url": { "type": "string", "format": "uri" }
        }
      }
    },

    "coreCompetencies": {
      "type": "array",
      "description": "Step 2. Knowledge domains.",
      "items": { "type": "string" }
    },

    "requiredSkills": {
      "type": "array",
      "description": "Step 2 + While · Aggregate Common Skills.",
      "items": {
        "type": "object",
        "required": ["skill"],
        "additionalProperties": false,
        "properties": {
          "skill": { "type": "string" },
          "type": {
            "type": "string",
            "enum": ["skill", "tool", "software", "tactic", "domainKnowledge"]
          }
        }
      }
    },

    "paradigmShifts": {
      "type": "array",
      "description": "Step 1.",
      "items": {
        "type": "object",
        "required": ["from", "to"],
        "additionalProperties": false,
        "properties": {
          "from": { "type": "string" },
          "to": { "type": "string" },
          "talentSignal": { "type": "string", "description": "What this shift implies to look for in talent." }
        }
      }
    },

    "roleResponsibilities": {
      "type": "array",
      "description": "While · Meta-Role-Description. Aggregated action-criteria.",
      "items": { "type": "string" }
    },

    "industry": {
      "type": "object",
      "description": "Step 3. Company landscape, three tiers.",
      "additionalProperties": false,
      "properties": {
        "establishedAdopters": { "type": "array", "items": { "$ref": "#/$defs/company" } },
        "primeMovers": { "type": "array", "items": { "$ref": "#/$defs/primeMover" } },
        "disruptors": { "type": "array", "items": { "$ref": "#/$defs/disruptor" } }
      }
    },

    "centersOfExcellence": {
      "type": "array",
      "description": "Step 3. Institutions, geo-located (the central map).",
      "items": {
        "type": "object",
        "required": ["institution"],
        "additionalProperties": false,
        "properties": {
          "institution": { "type": "string" },
          "departmentUrl": { "type": "string", "format": "uri" },
          "kind": { "type": "string", "enum": ["academia", "industry", "community"] },
          "geo": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "country": { "type": "string" },
              "lat": { "type": "number" },
              "lng": { "type": "number" }
            }
          }
        }
      }
    },

    "industryOrganizations": {
      "type": "array",
      "description": "Step 3. Standards bodies, consortia, nonprofits.",
      "items": {
        "type": "object",
        "required": ["name"],
        "additionalProperties": false,
        "properties": {
          "name": { "type": "string" },
          "url": { "type": "string", "format": "uri" }
        }
      }
    },

    "keyPlayers": {
      "type": "array",
      "description": "Step 4. Established outstanding contributors with truncated timeline.",
      "items": {
        "type": "object",
        "required": ["name"],
        "additionalProperties": false,
        "properties": {
          "name": { "type": "string" },
          "photo": { "type": "string" },
          "currentAffiliation": { "type": "string" },
          "focusAreas": { "type": "array", "items": { "type": "string" } },
          "timeline": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "academicBackground": { "type": "string" },
              "priorIndustryExperience": { "type": "string" },
              "startupsCompanies": { "type": "string" }
            }
          },
          "links": { "$ref": "#/$defs/playerLinks" }
        }
      }
    },

    "otherPlayers": {
      "type": "array",
      "description": "Step 5. Worthwhile contributors from the long tail.",
      "items": {
        "type": "object",
        "required": ["name"],
        "additionalProperties": false,
        "properties": {
          "name": { "type": "string" },
          "organization": { "type": "string" },
          "focusAreas": { "type": "array", "items": { "type": "string" } },
          "source": {
            "type": "string",
            "description": "citation-chain | research-group | early-employee | youtube | oss | podcast | other"
          },
          "links": { "$ref": "#/$defs/playerLinks" }
        }
      }
    },

    "potentialHires": {
      "type": "array",
      "description": "Step 6 (most important). Emerging fringe talent, ranked.",
      "items": {
        "type": "object",
        "required": ["name"],
        "additionalProperties": false,
        "properties": {
          "name": { "type": "string" },
          "photo": { "type": "string" },
          "institution": { "type": "string" },
          "category": {
            "type": "string",
            "description": "intern | undergrad | grad | content-creator | hacker | maker | site-maintainer"
          },
          "degreeExperience": { "type": "string" },
          "keyIndicators": { "type": "array", "items": { "type": "string" } },
          "rankSignals": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "creativeEnthusiasm": { "type": "number", "minimum": 0, "maximum": 1 },
              "grit": { "type": "number", "minimum": 0, "maximum": 1 },
              "precociousness": { "type": "number", "minimum": 0, "maximum": 1 }
            }
          },
          "links": { "$ref": "#/$defs/playerLinks" }
        }
      }
    }
  },

  "$defs": {
    "company": {
      "type": "object",
      "required": ["company"],
      "additionalProperties": false,
      "properties": {
        "company": { "type": "string" },
        "url": { "type": "string", "format": "uri" },
        "logo": { "type": "string" },
        "ceo": { "type": "string" }
      }
    },
    "primeMover": {
      "type": "object",
      "required": ["company"],
      "additionalProperties": false,
      "properties": {
        "company": { "type": "string" },
        "url": { "type": "string", "format": "uri" },
        "logo": { "type": "string" },
        "ceo": { "type": "string" },
        "niche": { "type": "string" },
        "tractionIndicator": { "type": "string" },
        "competitiveEdge": { "type": "string" }
      }
    },
    "disruptor": {
      "type": "object",
      "required": ["company"],
      "additionalProperties": false,
      "properties": {
        "company": { "type": "string" },
        "url": { "type": "string", "format": "uri" },
        "logo": { "type": "string" },
        "ceo": { "type": "string" },
        "keyInnovation": { "type": "string" }
      }
    },
    "playerLinks": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "linkedin": { "type": "string", "format": "uri" },
        "website": { "type": "string", "format": "uri" },
        "company": { "type": "string", "format": "uri" }
      }
    }
  }
}
