{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://schemas.corva.ai/fe-ai-tools/app-manifest/v2",
  "title": "Ask Corva app-tools manifest v2",
  "type": "object",
  "additionalProperties": false,
  "required": ["schemaVersion", "repository", "appKey", "profile", "toolRoots", "contractRevision", "canonRevision", "verification", "coverage"],
  "properties": {
    "$schema": { "type": "string" },
    "schemaVersion": { "const": 2 },
    "repository": { "type": "string", "pattern": "^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$" },
    "appKey": { "type": "string", "pattern": "^[a-z0-9_]+(?:\\.[a-z0-9_]+)+$" },
    "profile": { "enum": ["dc-app", "platform-app"] },
    "toolRoots": {
      "type": "array", "minItems": 1, "uniqueItems": true,
      "items": { "type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.{1,2}(?:/|$))[A-Za-z0-9._@/-]+$" }
    },
    "contractRevision": { "type": "integer", "minimum": 1 },
    "canonRevision": { "type": "integer", "minimum": 1 },
    "verification": {
      "type": "object", "additionalProperties": false, "required": ["command"],
      "properties": { "command": { "enum": ["yarn ai-tools:verify", "npm run ai-tools:verify", "pnpm ai-tools:verify"] } }
    },
    "coverage": {
      "type": "object", "additionalProperties": false,
      "required": ["status", "tools", "capabilities", "applicability", "evidence"],
      "properties": {
        "status": { "enum": ["uncovered", "partial", "full", "blocked"] },
        "tools": {
          "type": "array", "uniqueItems": true,
          "items": { "type": "string", "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$" }
        },
        "capabilities": {
          "type": "array", "uniqueItems": true,
          "items": { "enum": ["loaded-data", "ui-command", "host-round-trip", "entity-scope", "async-load", "bounded-result", "label-resolution", "unit-decorated-labels"] }
        },
        "applicability": {
          "type": "object", "additionalProperties": false, "required": ["loadedData", "goals"],
          "properties": { "loadedData": { "enum": ["yes", "no"] }, "goals": { "enum": ["yes", "no"] } }
        },
        "evidence": {
          "type": "object", "additionalProperties": false,
          "properties": {
            "liveReport": { "type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.{1,2}(?:/|$))[A-Za-z0-9._@/-]+$" }
          }
        },
        "blockedReason": { "type": "string", "pattern": ".*\\S.*" }
      },
      "allOf": [
        { "if": { "properties": { "status": { "const": "blocked" } }, "required": ["status"] }, "then": { "required": ["blockedReason"] } },
        { "if": { "properties": { "status": { "const": "full" } }, "required": ["status"] }, "then": { "properties": { "tools": { "type": "array", "minItems": 1 } } } },
        {
          "if": {
            "properties": {
              "applicability": {
                "type": "object",
                "properties": { "goals": { "const": "yes" } },
                "required": ["goals"]
              }
            }
          },
          "then": {
            "properties": {
              "applicability": {
                "type": "object",
                "properties": { "loadedData": { "const": "yes" } }
              }
            }
          }
        }
      ]
    }
  }
}
