{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://developer.reits.tech/schemas/native-mac-runner-qualification.v1.schema.json",
  "title": "D05-T05 native Mac runner qualification",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schemaVersion",
    "status",
    "observedAt",
    "program",
    "task",
    "planBinding",
    "preconditions",
    "hostCandidateObservation",
    "liveSummary",
    "runnerCandidates",
    "scopePartitions",
    "nativeJobObservations",
    "lifecycle",
    "adversarialProbes",
    "acceptanceContract",
    "controls",
    "liveEvidence",
    "invariants",
    "sources",
    "boundary"
  ],
  "properties": {
    "schemaVersion": {
      "const": "developer.reits.tech/native-mac-runner-qualification/v1"
    },
    "status": {
      "const": "T05_REPOSITORY_IMPLEMENTED_LIVE_DEVICE_QUALIFICATION_BLOCKED"
    },
    "observedAt": {
      "type": "string",
      "format": "date-time"
    },
    "program": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "acceptedKnives",
        "totalKnives",
        "currentOrdinal",
        "currentKnife",
        "remainingIncludingCurrent",
        "remainingAfterCurrentAcceptance"
      ],
      "properties": {
        "acceptedKnives": { "const": 4 },
        "totalKnives": { "const": 36 },
        "currentOrdinal": { "const": 5 },
        "currentKnife": { "const": "D05" },
        "remainingIncludingCurrent": { "const": 32 },
        "remainingAfterCurrentAcceptance": { "const": 31 }
      }
    },
    "task": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id",
        "title",
        "owner",
        "repositoryImplementationComplete",
        "liveDeviceExecutionObserved",
        "liveExecutionAdmitted",
        "productionAccepted",
        "nextTask",
        "nextTaskTitle",
        "nextTaskBlocked"
      ],
      "properties": {
        "id": { "const": "D05-T05" },
        "title": { "type": "string", "minLength": 20 },
        "owner": { "type": "string", "minLength": 10 },
        "repositoryImplementationComplete": { "const": true },
        "liveDeviceExecutionObserved": { "const": true },
        "liveExecutionAdmitted": { "const": false },
        "productionAccepted": { "const": false },
        "nextTask": { "const": "D05-T06" },
        "nextTaskTitle": { "type": "string", "minLength": 20 },
        "nextTaskBlocked": { "const": true }
      }
    },
    "planBinding": {
      "type": "object",
      "additionalProperties": false,
      "required": ["planId", "path", "sha256", "exactRevisionRequired", "maximumReceiptAgeHours"],
      "properties": {
        "planId": { "const": "D05-T05-NATIVE-MAC-RUNNER-V1" },
        "path": { "const": "ops/gitea-runner/macos/native-qualification-plan.json" },
        "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
        "exactRevisionRequired": { "const": true },
        "maximumReceiptAgeHours": { "const": 24 }
      }
    },
    "preconditions": {
      "type": "array",
      "minItems": 4,
      "maxItems": 4
    },
    "hostCandidateObservation": {
      "type": "object",
      "required": [
        "source",
        "architecture",
        "macosVersion",
        "macosBuild",
        "xcodeVersion",
        "xcodeBuild",
        "swiftVersion",
        "developerDirectory",
        "actRunnerBinaryObserved",
        "runnerProcessObserved",
        "boundRunnerId",
        "qualificationState"
      ],
      "properties": {
        "source": { "const": "LOCAL_DEVELOPER_WORKSTATION_READ_ONLY_UNBOUND" },
        "architecture": { "const": "arm64" },
        "actRunnerBinaryObserved": { "const": false },
        "runnerProcessObserved": { "const": false },
        "boundRunnerId": { "type": "null" }
      }
    },
    "liveSummary": {
      "type": "object",
      "required": [
        "giteaVersion",
        "adminRunnersRegistered",
        "runnersOnline",
        "macRunnersRegistered",
        "macRunnersOnline",
        "organizationMacRunnersOnline",
        "ephemeralMacRunnersOnline",
        "eligibleMacRunners",
        "exactNativeJobsRequired",
        "historicalNativeSuccesses",
        "historicalNativeCancellations",
        "qualifiedNativeJobReceipts",
        "cleanupReceipts",
        "trustedSignatures"
      ],
      "properties": {
        "giteaVersion": { "const": "1.25.4" },
        "adminRunnersRegistered": { "const": 3 },
        "runnersOnline": { "const": 2 },
        "macRunnersRegistered": { "const": 2 },
        "macRunnersOnline": { "const": 1 },
        "organizationMacRunnersOnline": { "const": 0 },
        "ephemeralMacRunnersOnline": { "const": 0 },
        "eligibleMacRunners": { "const": 0 },
        "exactNativeJobsRequired": { "const": 2 },
        "historicalNativeSuccesses": { "const": 1 },
        "historicalNativeCancellations": { "const": 1 },
        "qualifiedNativeJobReceipts": { "const": 0 },
        "cleanupReceipts": { "const": 0 },
        "trustedSignatures": { "const": 0 }
      }
    },
    "runnerCandidates": {
      "type": "array",
      "minItems": 2,
      "maxItems": 2,
      "items": {
        "type": "object",
        "required": ["id", "name", "platform", "status", "busy", "ephemeral", "scope", "labels", "admission", "reason"],
        "properties": {
          "platform": { "const": "macos" },
          "ephemeral": { "const": false },
          "admission": { "type": "string", "pattern": "^DENIED_" }
        }
      }
    },
    "scopePartitions": {
      "type": "array",
      "minItems": 2,
      "maxItems": 2
    },
    "nativeJobObservations": {
      "type": "array",
      "minItems": 2,
      "maxItems": 2,
      "items": {
        "type": "object",
        "required": [
          "repository",
          "revision",
          "runId",
          "jobId",
          "runnerId",
          "runnerName",
          "runnerLabel",
          "conclusion",
          "startedAt",
          "completedAt",
          "qualificationState",
          "qualifiedReceipt"
        ],
        "properties": {
          "revision": { "type": "string", "pattern": "^[0-9a-f]{40}$" },
          "qualifiedReceipt": { "const": false }
        }
      }
    },
    "lifecycle": {
      "type": "array",
      "minItems": 8,
      "maxItems": 8
    },
    "adversarialProbes": {
      "type": "array",
      "minItems": 6,
      "maxItems": 6
    },
    "acceptanceContract": {
      "type": "object",
      "required": [
        "requiredExactNativeJobReceipts",
        "observedExactNativeJobReceipts",
        "requiredEphemeralRunnerRegistrations",
        "observedEphemeralRunnerRegistrations",
        "requiredCleanupReceipts",
        "observedCleanupReceipts",
        "requiredAdversarialProbeReceipts",
        "observedAdversarialProbeReceipts",
        "requiredSignatureRoles",
        "observedSignatures",
        "maximumConcurrentJobs",
        "maximumReceiptAgeHours",
        "historicalGreenJobIsQualification",
        "onlineReusableRunnerIsQualification",
        "allConditionsRequired"
      ],
      "properties": {
        "requiredExactNativeJobReceipts": { "const": 2 },
        "observedExactNativeJobReceipts": { "const": 0 },
        "requiredEphemeralRunnerRegistrations": { "const": 2 },
        "observedEphemeralRunnerRegistrations": { "const": 0 },
        "requiredCleanupReceipts": { "const": 2 },
        "observedCleanupReceipts": { "const": 0 },
        "requiredAdversarialProbeReceipts": { "const": 6 },
        "observedAdversarialProbeReceipts": { "const": 0 },
        "requiredSignatureRoles": {
          "const": ["MOBILE_PLATFORM", "SECURITY", "QA"]
        },
        "observedSignatures": { "const": 0 },
        "maximumConcurrentJobs": { "const": 1 },
        "maximumReceiptAgeHours": { "const": 24 },
        "historicalGreenJobIsQualification": { "const": false },
        "onlineReusableRunnerIsQualification": { "const": false },
        "allConditionsRequired": { "const": true }
      }
    },
    "controls": {
      "type": "array",
      "minItems": 8,
      "maxItems": 8
    },
    "liveEvidence": {
      "type": "object",
      "required": [
        "giteaReadOnlyRequests",
        "repositoriesScanned",
        "giteaMutationCalls",
        "deviceMutationCalls",
        "runnerRegistrationCalls",
        "workflowDispatchCalls",
        "credentialsRecorded",
        "paidResourcesCreated",
        "d05GateG02Satisfied"
      ],
      "properties": {
        "repositoriesScanned": { "const": 50 },
        "giteaMutationCalls": { "const": 0 },
        "deviceMutationCalls": { "const": 0 },
        "runnerRegistrationCalls": { "const": 0 },
        "workflowDispatchCalls": { "const": 0 },
        "credentialsRecorded": { "const": false },
        "paidResourcesCreated": { "const": 0 },
        "d05GateG02Satisfied": { "const": false }
      }
    },
    "invariants": {
      "type": "object",
      "required": [
        "historicalSuccessPromotesG02",
        "onlineWrongScopeRunnerPromotesG02",
        "repositoryPacketAuthorizesDeviceMutation",
        "repositoryPacketAuthorizesGiteaMutation",
        "crossOrganizationCredentialReuseAllowed",
        "d05Accepted",
        "programAdvanced"
      ],
      "properties": {
        "historicalSuccessPromotesG02": { "const": false },
        "onlineWrongScopeRunnerPromotesG02": { "const": false },
        "repositoryPacketAuthorizesDeviceMutation": { "const": false },
        "repositoryPacketAuthorizesGiteaMutation": { "const": false },
        "crossOrganizationCredentialReuseAllowed": { "const": false },
        "d05Accepted": { "const": false },
        "programAdvanced": { "const": false }
      }
    },
    "sources": {
      "type": "array",
      "minItems": 3
    },
    "boundary": {
      "type": "string",
      "minLength": 200
    }
  }
}
