{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://workspai.dev/contracts/workspace-intelligence/doctor-dependency-repair-transaction.v1.json",
  "title": "Workspai Doctor Dependency Repair Transaction v1",
  "description": "The portable closure contract for dependency security changes and runtime dependency materialization.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schemaVersion",
    "kind",
    "state",
    "projectPath",
    "ecosystem",
    "requiredStages",
    "completion"
  ],
  "properties": {
    "schemaVersion": {
      "const": "workspai.doctor-dependency-repair-transaction.v1"
    },
    "kind": {
      "enum": ["dependency-security", "dependency-materialization"]
    },
    "state": {
      "const": "planned"
    },
    "projectPath": {
      "type": "string",
      "minLength": 1
    },
    "ecosystem": {
      "type": "string",
      "minLength": 1
    },
    "sourceMutationRequired": { "type": "boolean" },
    "observableState": {
      "enum": ["runtime-dependency-tree"]
    },
    "requiredStages": {
      "type": "array",
      "items": { "enum": ["reconcile", "audit", "test", "build"] },
      "uniqueItems": true
    },
    "completion": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "manifestLockConsistent",
        "declaredTestsPass",
        "declaredBuildPass",
        "canonicalVerificationRequired"
      ],
      "properties": {
        "manifestLockConsistent": { "const": true },
        "auditClean": { "const": true },
        "installedTreePresent": { "const": true },
        "declaredTestsPass": { "const": true },
        "declaredBuildPass": { "const": true },
        "canonicalVerificationRequired": { "const": true }
      }
    }
  },
  "allOf": [
    {
      "if": { "properties": { "kind": { "const": "dependency-security" } } },
      "then": {
        "properties": {
          "requiredStages": {
            "prefixItems": [
              { "const": "reconcile" },
              { "const": "audit" },
              { "const": "test" },
              { "const": "build" }
            ],
            "items": false,
            "minItems": 4,
            "maxItems": 4
          },
          "completion": { "type": "object", "properties": { "auditClean": { "const": true } }, "required": ["auditClean"] }
        }
      }
    },
    {
      "if": { "properties": { "kind": { "const": "dependency-materialization" } } },
      "then": {
        "required": ["sourceMutationRequired", "observableState"],
        "properties": {
          "sourceMutationRequired": { "const": false },
          "observableState": { "const": "runtime-dependency-tree" },
          "requiredStages": {
            "prefixItems": [
              { "const": "reconcile" },
              { "const": "test" },
              { "const": "build" }
            ],
            "items": false,
            "minItems": 3,
            "maxItems": 3
          },
          "completion": { "type": "object", "properties": { "installedTreePresent": { "const": true } }, "required": ["installedTreePresent"] }
        }
      }
    }
  ]
}
