{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/stormmcp/json-schema/stormmcp-custom-server-credential-binding-backfill-result-schema.json",
  "title": "CustomServerCredentialBindingBackfillResult",
  "description": "The outcome of one typed credential-binding backfill run. Every counter is a row count.",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/stormmcp-customservercredentialbindingbackfill-api-openapi.yml#/components/schemas/CustomServerCredentialBindingBackfillResult",
  "type": "object",
  "properties": {
    "pending": {
      "pattern": "^-?(?:0|[1-9]\\d*)$",
      "type": [
        "integer",
        "string"
      ],
      "description": "Gets the number of rows that still needed a typed column or a disagreement repair when\nthe run started.",
      "format": "int32"
    },
    "written": {
      "pattern": "^-?(?:0|[1-9]\\d*)$",
      "type": [
        "integer",
        "string"
      ],
      "description": "Gets the number of both-null rows the run wrote a typed column onto.",
      "format": "int32"
    },
    "repaired": {
      "pattern": "^-?(?:0|[1-9]\\d*)$",
      "type": [
        "integer",
        "string"
      ],
      "description": "Gets the number of disagreement rows the run rewrote to the UCS-classified family,\nclearing the wrong family's column, or typed-only residue it repaired to cleared.",
      "format": "int32"
    },
    "noHandle": {
      "pattern": "^-?(?:0|[1-9]\\d*)$",
      "type": [
        "integer",
        "string"
      ],
      "description": "Gets the number of pending rows skipped because they had no legacy handle after\ntyped-only residue was repaired. Those rows stay pending; they hold the flag-ramp.",
      "format": "int32"
    },
    "unclassified": {
      "pattern": "^-?(?:0|[1-9]\\d*)$",
      "type": [
        "integer",
        "string"
      ],
      "description": "Gets the number of rows whose legacy id UCS did not positively classify, including\nbatch-resolve and provider-read faults. Those rows stay pending; they hold the flag-ramp.",
      "format": "int32"
    },
    "familyDisagreement": {
      "pattern": "^-?(?:0|[1-9]\\d*)$",
      "type": [
        "integer",
        "string"
      ],
      "description": "Gets the number of rows whose UCS-classified family conflicts with\n`AuthenticationType`. Those rows stay pending; they hold the flag-ramp.",
      "format": "int32"
    },
    "personalBinder": {
      "pattern": "^-?(?:0|[1-9]\\d*)$",
      "type": [
        "integer",
        "string"
      ],
      "description": "Gets the number of rows skipped because a personal OAuth binder for the server equals the classified id.\nThe static column is not written.",
      "format": "int32"
    },
    "unconfiguredAuth": {
      "pattern": "^-?(?:0|[1-9]\\d*)$",
      "type": [
        "integer",
        "string"
      ],
      "description": "Gets the number of working legacy rows skipped because `AuthenticationType` is\nNone or unset, including when UCS cannot classify the handle. The run leaves the handle\non the legacy column; flag-on hydration still serves it through the both-typed-null\nfallback, so this count does not hold the flag-ramp.",
      "format": "int32"
    },
    "v1Origin": {
      "pattern": "^-?(?:0|[1-9]\\d*)$",
      "type": [
        "integer",
        "string"
      ],
      "description": "Gets the number of rows whose legacy id is a live V1 credential. The run leaves\n`CredentialBinderId` null and keeps the legacy handle; flag-on hydration still\nserves that handle through the both-typed-null fallback, so this count does not\nhold the flag-ramp.",
      "format": "int32"
    },
    "truncated": {
      "type": "boolean",
      "description": "Gets a value indicating whether the run stopped on its iteration guard rather than because\nthere was nothing left. A true here means run it again, and look at why rows are not settling."
    }
  }
}