{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://genesiscode.org/spec/migration-profile-v0.1.schema.json",
  "title": "GenesisCode Canonical Migration Profile v0.1",
  "type": "object",
  "additionalProperties": false,
  "required": ["auditDate", "canonicalSpec", "canonicalSpecSha256", "contentIdentitySha256", "dryRun", "failure", "identity", "kind", "nonclaims", "operations", "patchTarget", "planning", "provenance", "resourceLimits", "schema", "schemaSha256", "sourceBindings", "version"],
  "properties": {
    "auditDate": {"type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"},
    "canonicalSpec": {"const": "docs/spec/MIGRATION_PROFILE_v0.1.md"},
    "canonicalSpecSha256": {"$ref": "#/$defs/sha256"},
    "contentIdentitySha256": {"$ref": "#/$defs/sha256"},
    "dryRun": {
      "type": "object", "additionalProperties": false,
      "required": ["effects", "mutation", "patchOrdering", "targetAdmission", "targetIdentity"],
      "properties": {
        "effects": {"const": "before-after-added-removed-plus-unknown-per-module-and-package"},
        "mutation": {"const": "clone-only-no-filesystem-write"},
        "patchOrdering": {"const": "manifest-module-order-then-top-form-index"},
        "targetAdmission": {"const": "complete-current-typecheck-and-profile-negotiation"},
        "targetIdentity": {"const": "required-and-distinct-from-source"}
      }
    },
    "failure": {
      "type": "object", "additionalProperties": false,
      "required": ["identity", "mode", "timing"],
      "properties": {
        "identity": {"const": "none-for-invalid-input-plan-or-target"},
        "mode": {"const": "explicit-MigrationError-no-panic"},
        "timing": {"const": "before-file-mutation-or-execution"}
      }
    },
    "identity": {
      "type": "object", "additionalProperties": false,
      "required": ["hashProfile", "plan", "receipt", "sourcePackage"],
      "properties": {
        "hashProfile": {"const": "genesis/hash-profile/gcv0.2-blake3"},
        "plan": {"const": "profile-id-plus-intent-plus-expected-source-plus-provenance-plus-canonical-steps"},
        "receipt": {"const": "hash-of-report-payload-excluding-envelope-hash"},
        "sourcePackage": {"const": "profile-id-plus-manifest-ordered-portable-path-and-module-hash"}
      }
    },
    "kind": {"const": "genesis/migration-profile-v0.1"},
    "nonclaims": {"$ref": "#/$defs/nonemptyStrings"},
    "operations": {
      "type": "array", "minItems": 3, "maxItems": 3,
      "prefixItems": [
        {"const": {"data": "quoted-and-vector-data-preserved", "kind": "rewrite-syntax-head", "scope": "one-module-executable-list-heads"}},
        {"const": {"collision": "existing-package-target-definition-rejected", "kind": "rename-api-symbol", "scope": "package-definitions-unshadowed-references-and-metadata"}},
        {"const": {"kind": "replace-format-field", "precondition": "exact-presence-and-value", "scope": "one-existing-unique-metadata-map"}}
      ],
      "items": false
    },
    "patchTarget": {
      "type": "object", "additionalProperties": false,
      "required": ["application", "operation", "profile", "version"],
      "properties": {
        "application": {"const": "external-exact-snapshot-session-only"},
        "operation": {"const": ":replace-node"},
        "profile": {"const": "genesis/patch-profile/v0.2"},
        "version": {"const": 1}
      }
    },
    "planning": {
      "type": "object", "additionalProperties": false,
      "required": ["countPrecondition", "operationOrder", "rewriteChains", "staleSource"],
      "properties": {
        "countPrecondition": {"const": "exact-positive"},
        "operationOrder": {"const": "unique-strict-syntax-api-format-then-canonical-operands"},
        "rewriteChains": {"const": "separate-receipted-migrations-required"},
        "staleSource": {"const": "reject-before-rewrite"}
      }
    },
    "provenance": {
      "type": "object", "additionalProperties": false,
      "required": ["fields", "preservation"],
      "properties": {
        "fields": {"const": ["producer", "source-artifact", "parent-receipt-h-or-nil"]},
        "preservation": {"const": "complete-value-bound-to-plan-patch-and-receipt"}
      }
    },
    "resourceLimits": {
      "type": "object", "additionalProperties": false,
      "required": ["diagnosticCharsPerError", "diagnosticErrors", "idBytes", "intentBytes", "modules", "pathOrSymbolBytes", "stackGrowthBytes", "steps"],
      "properties": {
        "diagnosticCharsPerError": {"const": 512},
        "diagnosticErrors": {"const": 8},
        "idBytes": {"const": 1024},
        "intentBytes": {"const": 16384},
        "modules": {"const": 65536},
        "pathOrSymbolBytes": {"const": 4096},
        "stackGrowthBytes": {"const": 4194304},
        "steps": {"const": 65536}
      }
    },
    "schema": {"const": "docs/spec/MIGRATION_PROFILE_v0.1.schema.json"},
    "schemaSha256": {"$ref": "#/$defs/sha256"},
    "sourceBindings": {
      "type": "array", "minItems": 8, "uniqueItems": true,
      "items": {
        "type": "object", "additionalProperties": false,
        "required": ["id", "mode", "path"],
        "properties": {
          "id": {"type": "string", "minLength": 1},
          "mode": {"enum": ["canonical-identity", "effect-analysis", "encoding", "normative-patch", "planning", "profile-admission", "rewrite", "verification"]},
          "path": {"type": "string", "minLength": 1}
        }
      }
    },
    "version": {"const": "0.1"}
  },
  "$defs": {
    "nonemptyStrings": {"type": "array", "minItems": 1, "uniqueItems": true, "items": {"type": "string", "minLength": 1}},
    "sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}
  }
}
