{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://developer.reits.tech/schemas/runner-capacity-evidence.v1.schema.json",
  "title": "REITs D05 G01/G02 Runner Capacity Evidence",
  "type": "object",
  "additionalProperties": false,
  "required": ["schemaVersion", "status", "observedAt", "observationMode", "program", "gateSummary", "gates", "sources", "lanes", "receiptRequirements", "changeQueue", "operatorPlan", "safetyTruth"],
  "properties": {
    "schemaVersion": { "const": "developer.reits.tech/runner-capacity-evidence/v1" },
    "status": { "const": "G01_G02_DENIED_NO_ELIGIBLE_LANES" },
    "observedAt": { "type": "string", "format": "date-time" },
    "observationMode": { "const": "READ_ONLY_LIVE_AUDIT_NO_REGISTRATION_NO_PROVISIONING" },
    "program": {
      "type": "object",
      "additionalProperties": false,
      "required": ["acceptedKnives", "totalKnives", "currentKnife", "remainingIncludingCurrent", "remainingAfterAcceptance", "d05Accepted"],
      "properties": {
        "acceptedKnives": { "const": 4 },
        "totalKnives": { "const": 36 },
        "currentKnife": { "const": "D05" },
        "remainingIncludingCurrent": { "const": 32 },
        "remainingAfterAcceptance": { "const": 31 },
        "d05Accepted": { "const": false }
      }
    },
    "gateSummary": {
      "type": "object",
      "additionalProperties": false,
      "required": ["targetedGates", "satisfiedGates", "positiveAcceptanceReceipts", "observedDenialFacts", "decision"],
      "properties": {
        "targetedGates": { "const": 2 },
        "satisfiedGates": { "const": 0 },
        "positiveAcceptanceReceipts": { "const": 0 },
        "observedDenialFacts": { "type": "integer", "minimum": 1 },
        "decision": { "const": "DENY_AND_ESCALATE_TO_OWNERS" }
      }
    },
    "gates": { "type": "array", "minItems": 2, "maxItems": 2, "items": { "$ref": "#/$defs/gate" } },
    "sources": { "type": "array", "minItems": 4, "items": { "$ref": "#/$defs/source" } },
    "lanes": {
      "type": "object",
      "additionalProperties": false,
      "required": ["linux", "macos"],
      "properties": {
        "linux": { "$ref": "#/$defs/lane" },
        "macos": { "$ref": "#/$defs/lane" }
      }
    },
    "receiptRequirements": { "type": "array", "minItems": 10, "maxItems": 10, "items": { "$ref": "#/$defs/receipt" } },
    "changeQueue": {
      "type": "array",
      "minItems": 2,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["repository", "pullRequest", "decision", "summary"],
        "properties": {
          "repository": { "type": "string" },
          "pullRequest": { "type": ["integer", "null"], "minimum": 1 },
          "decision": { "enum": ["WAITING_RUNNER", "CHECKS_FAILED", "RAW_SUCCESS_UNQUALIFIED", "NATIVE_JOB_CANCELLED"] },
          "summary": { "type": "string", "minLength": 10 }
        }
      }
    },
    "operatorPlan": {
      "type": "object",
      "additionalProperties": false,
      "required": ["nextAction", "forbiddenActions"],
      "properties": {
        "nextAction": { "type": "string", "minLength": 40 },
        "forbiddenActions": { "type": "array", "minItems": 4, "items": { "type": "string", "minLength": 20 } }
      }
    },
    "safetyTruth": {
      "type": "object",
      "additionalProperties": false,
      "required": ["readOnlyAuditPerformed", "credentialsRecorded", "runnerRegistrationCalls", "giteaMutationCalls", "awsMutationCalls", "serviceChanges", "listenerStarts", "externalWritesExecuted", "paidResourcesCreated", "g01Satisfied", "g02Satisfied", "d05Accepted"],
      "properties": {
        "readOnlyAuditPerformed": { "const": true },
        "credentialsRecorded": { "const": false },
        "runnerRegistrationCalls": { "const": 0 },
        "giteaMutationCalls": { "const": 0 },
        "awsMutationCalls": { "const": 0 },
        "serviceChanges": { "const": 0 },
        "listenerStarts": { "const": 0 },
        "externalWritesExecuted": { "const": 0 },
        "paidResourcesCreated": { "const": false },
        "g01Satisfied": { "const": false },
        "g02Satisfied": { "const": false },
        "d05Accepted": { "const": false }
      }
    },
    "verification": {
      "type": "object",
      "additionalProperties": false,
      "required": ["status", "targetedGates", "satisfiedGates", "registeredRunners", "onlineRunners", "eligibleRunners", "positiveAcceptanceReceipts", "missingReceiptRequirements", "externalWritesExecuted", "paidResourcesCreated"],
      "properties": {
        "status": { "const": "PASS_READ_ONLY_LIVE_OBSERVATION" },
        "targetedGates": { "const": 2 },
        "satisfiedGates": { "const": 0 },
        "registeredRunners": { "const": 3 },
        "onlineRunners": { "const": 1 },
        "eligibleRunners": { "const": 0 },
        "positiveAcceptanceReceipts": { "const": 0 },
        "missingReceiptRequirements": { "const": 10 },
        "externalWritesExecuted": { "const": 0 },
        "paidResourcesCreated": { "const": false }
      }
    },
    "discovery": {
      "type": "object",
      "additionalProperties": false,
      "required": ["workbench", "schema", "liveAudit", "capacityPolicy", "d05Closure"],
      "properties": {
        "workbench": { "const": "/release-foundation#runner-capacity-evidence" },
        "schema": { "const": "/schemas/runner-capacity-evidence.v1.schema.json" },
        "liveAudit": { "const": "/api/runner-audit" },
        "capacityPolicy": { "const": "/api/runner-capacity" },
        "d05Closure": { "const": "/api/runner-factory/controller/d05-acceptance-closure" }
      }
    }
  },
  "$defs": {
    "count": { "type": "integer", "minimum": 0 },
    "gate": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "name", "owner", "target", "observed", "positiveReceiptsObserved", "decision"],
      "properties": {
        "id": { "enum": ["D05-G01", "D05-G02"] },
        "name": { "type": "string" },
        "owner": { "enum": ["PLATFORM_SRE", "MOBILE_PLATFORM"] },
        "target": { "type": "string" },
        "observed": { "type": "string" },
        "positiveReceiptsObserved": { "const": 0 },
        "decision": { "enum": ["DENIED_NO_ORGANIZATION_EPHEMERAL_CAPACITY", "DENIED_NO_INDEPENDENT_MAC_LANE"] }
      }
    },
    "source": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "type", "status", "observedAt", "scope", "facts"],
      "properties": {
        "id": { "type": "string", "pattern": "^[a-z][a-z0-9-]*$" },
        "type": { "enum": ["GITEA_READ_ONLY", "SSH_READ_ONLY", "LOCAL_READ_ONLY", "LAST_KNOWN_READ_ONLY"] },
        "status": { "enum": ["OBSERVED", "OBSERVED_DENIAL", "STALE_NOT_REOBSERVED"] },
        "observedAt": { "type": "string", "format": "date-time" },
        "scope": { "type": "string", "minLength": 20 },
        "facts": { "type": "array", "minItems": 3, "items": { "type": "string" } }
      }
    },
    "lane": {
      "type": "object",
      "additionalProperties": false,
      "required": ["targetOnline", "registered", "online", "organizationScoped", "ephemeral", "eligible", "candidates"],
      "properties": {
        "targetOnline": { "type": "integer", "minimum": 1 },
        "registered": { "$ref": "#/$defs/count" },
        "online": { "$ref": "#/$defs/count" },
        "organizationScoped": { "const": 0 },
        "ephemeral": { "const": 0 },
        "eligible": { "const": 0 },
        "candidates": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/candidate" } }
      }
    },
    "candidate": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "name", "scope", "status", "ephemeral", "admission"],
      "properties": {
        "id": { "type": "integer", "minimum": 1 },
        "name": { "type": "string" },
        "scope": { "type": "string" },
        "status": { "enum": ["online", "offline"] },
        "ephemeral": { "const": false },
        "admission": { "const": "DENIED" }
      }
    },
    "receipt": {
      "type": "object",
      "additionalProperties": false,
      "required": ["gate", "id", "requirement", "status"],
      "properties": {
        "gate": { "enum": ["D05-G01", "D05-G02"] },
        "id": { "type": "string", "pattern": "^(LINUX|MAC)-0[1-5]$" },
        "requirement": { "type": "string", "minLength": 20 },
        "status": { "const": "MISSING" }
      }
    }
  }
}
