{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://developer.reits.tech/schemas/runner-controller-activation-evidence.v1.schema.json",
  "title": "REITs D05 G05/G06 Controller Activation Evidence",
  "type": "object",
  "additionalProperties": false,
  "required": ["schemaVersion", "status", "observedAt", "observationMode", "program", "gateSummary", "gates", "routeSeparation", "host", "readiness", "listenerAuthorization", "verificationPacks", "operatorPlan", "safetyTruth"],
  "properties": {
    "schemaVersion": { "const": "developer.reits.tech/runner-controller-activation-evidence/v1" },
    "status": { "const": "G05_G06_DENIED_NO_LIVE_READINESS_OR_LISTENER_AUTHORIZATION" },
    "observedAt": { "type": "string", "format": "date-time" },
    "observationMode": { "const": "READ_ONLY_HOST_ROUTE_AND_RECEIPT_AUDIT_NO_SERVICE_START" },
    "program": {
      "type": "object", "additionalProperties": false,
      "required": ["acceptedKnives", "totalKnives", "currentKnife", "closeoutCut", "remainingIncludingCurrent", "remainingAfterAcceptance", "d05Accepted"],
      "properties": {
        "acceptedKnives": { "const": 4 }, "totalKnives": { "const": 36 }, "currentKnife": { "const": "D05" }, "closeoutCut": { "const": 4 },
        "remainingIncludingCurrent": { "const": 32 }, "remainingAfterAcceptance": { "const": 31 }, "d05Accepted": { "const": false }
      }
    },
    "gateSummary": {
      "type": "object", "additionalProperties": false,
      "required": ["targetedGates", "satisfiedGates", "positiveAcceptanceReceipts", "missingArtifactGroups", "missingReadinessReceipts", "decision"],
      "properties": {
        "targetedGates": { "const": 2 }, "satisfiedGates": { "const": 0 }, "positiveAcceptanceReceipts": { "const": 0 }, "missingArtifactGroups": { "const": 14 }, "missingReadinessReceipts": { "const": 11 },
        "decision": { "const": "DENY_AND_ESCALATE_TO_CONTROLLER_AND_RELEASE_OWNERS" }
      }
    },
    "gates": { "type": "array", "minItems": 2, "maxItems": 2, "items": { "$ref": "#/$defs/gate" } },
    "routeSeparation": { "type": "array", "minItems": 4, "maxItems": 4, "items": { "$ref": "#/$defs/route" } },
    "host": {
      "type": "object", "additionalProperties": false,
      "required": ["environment", "portalReleaseAtAudit", "portalSourceAtAudit", "checks"],
      "properties": {
        "environment": { "type": "string" }, "portalReleaseAtAudit": { "type": "string", "pattern": "^developer-portal@[0-9a-f]{12}-[0-9a-f]{12}$" }, "portalSourceAtAudit": { "type": "string", "pattern": "^[0-9a-f]{40}$" },
        "checks": { "type": "array", "minItems": 7, "maxItems": 7, "items": { "$ref": "#/$defs/hostCheck" } }
      }
    },
    "readiness": {
      "type": "object", "additionalProperties": false,
      "required": ["required", "observed", "ready", "receiptStoreInstalled", "runtimeIdentityConfigured", "gates", "admissionRequirements"],
      "properties": {
        "required": { "const": 11 }, "observed": { "const": 0 }, "ready": { "const": false }, "receiptStoreInstalled": { "const": false }, "runtimeIdentityConfigured": { "const": false },
        "gates": { "type": "array", "minItems": 11, "maxItems": 11, "items": { "$ref": "#/$defs/readinessGate" } },
        "admissionRequirements": { "type": "array", "minItems": 6, "maxItems": 6, "items": { "$ref": "#/$defs/requirement" } }
      }
    },
    "listenerAuthorization": {
      "type": "object", "additionalProperties": false,
      "required": ["endpoint", "maximumValiditySeconds", "authorizationReceiptsObserved", "listenerStarts", "publicRoutes", "reverseProxyRoutes", "requirements", "stateModel"],
      "properties": {
        "endpoint": { "const": "127.0.0.1:8110" }, "maximumValiditySeconds": { "const": 120 }, "authorizationReceiptsObserved": { "const": 0 }, "listenerStarts": { "const": 0 }, "publicRoutes": { "const": 0 }, "reverseProxyRoutes": { "const": 0 },
        "requirements": { "type": "array", "minItems": 8, "maxItems": 8, "items": { "$ref": "#/$defs/requirement" } },
        "stateModel": { "type": "array", "minItems": 8, "maxItems": 8, "items": { "type": "string" } }
      }
    },
    "verificationPacks": { "type": "array", "minItems": 2, "maxItems": 2, "items": { "$ref": "#/$defs/verificationPack" } },
    "operatorPlan": {
      "type": "object", "additionalProperties": false, "required": ["nextAction", "forbiddenActions"],
      "properties": { "nextAction": { "type": "string", "minLength": 120 }, "forbiddenActions": { "type": "array", "minItems": 5, "maxItems": 5, "items": { "type": "string", "minLength": 40 } } }
    },
    "safetyTruth": {
      "type": "object", "additionalProperties": false,
      "required": ["readOnlyAuditPerformed", "credentialsRecorded", "configurationWrites", "serviceInstallations", "readinessReceiptsIssued", "listenerAuthorizationsIssued", "listenerStarts", "reverseProxyChanges", "externalReadsExecuted", "externalWritesExecuted", "paidResourcesCreated", "g05Satisfied", "g06Satisfied", "d05Accepted"],
      "properties": {
        "readOnlyAuditPerformed": { "const": true }, "credentialsRecorded": { "const": false }, "configurationWrites": { "const": 0 }, "serviceInstallations": { "const": 0 }, "readinessReceiptsIssued": { "const": 0 }, "listenerAuthorizationsIssued": { "const": 0 }, "listenerStarts": { "const": 0 }, "reverseProxyChanges": { "const": 0 }, "externalReadsExecuted": { "const": 0 }, "externalWritesExecuted": { "const": 0 }, "paidResourcesCreated": { "const": false }, "g05Satisfied": { "const": false }, "g06Satisfied": { "const": false }, "d05Accepted": { "const": false }
      }
    },
    "verification": { "type": "object" },
    "discovery": { "type": "object" }
  },
  "$defs": {
    "gate": {
      "type": "object", "additionalProperties": false, "required": ["id", "name", "owner", "target", "observed", "positiveReceiptsObserved", "decision"],
      "properties": {
        "id": { "enum": ["D05-G05", "D05-G06"] }, "name": { "type": "string" }, "owner": { "enum": ["CONTROLLER_OWNER", "RELEASE_OWNER"] }, "target": { "type": "string", "minLength": 60 }, "observed": { "type": "string", "minLength": 40 }, "positiveReceiptsObserved": { "const": 0 },
        "decision": { "enum": ["DENIED_NO_LIVE_READINESS_RECEIPTS", "DENIED_NO_LISTENER_AUTHORIZATION"] }
      }
    },
    "route": {
      "type": "object", "additionalProperties": false, "required": ["id", "label", "endpoint", "httpStatus", "classification", "countsAsControllerListener"],
      "properties": { "id": { "type": "string" }, "label": { "type": "string" }, "endpoint": { "type": "string" }, "httpStatus": { "type": "string" }, "classification": { "type": "string" }, "countsAsControllerListener": { "const": false } }
    },
    "hostCheck": {
      "type": "object", "additionalProperties": false, "required": ["id", "label", "target", "observed", "status"],
      "properties": { "id": { "pattern": "^ACT-0[1-7]$" }, "label": { "type": "string" }, "target": { "type": "string" }, "observed": { "type": "string" }, "status": { "enum": ["DENIED", "SAFE_ABSENT", "SAFE_CLOSED"] } }
    },
    "readinessGate": {
      "type": "object", "additionalProperties": false, "required": ["id", "owner", "evidence", "status"],
      "properties": { "id": { "pattern": "^RF_READY_[A-Z_]+$" }, "owner": { "type": "string" }, "evidence": { "type": "string", "minLength": 20 }, "status": { "const": "MISSING" } }
    },
    "requirement": {
      "type": "object", "additionalProperties": false, "required": ["id", "count", "proof", "status"],
      "properties": { "id": { "type": "string" }, "count": { "type": "integer", "minimum": 1 }, "proof": { "type": "string", "minLength": 20 }, "status": { "const": "MISSING" } }
    },
    "verificationPack": {
      "type": "object", "additionalProperties": false, "required": ["id", "status", "fixtures", "accepted", "denied", "fixtureSignatures"],
      "properties": { "id": { "enum": ["production-evidence-admission", "listener-authorization"] }, "status": { "type": "string", "pattern": "^PASS_" }, "fixtures": { "type": "integer", "minimum": 1 }, "accepted": { "type": "integer", "minimum": 0 }, "denied": { "type": "integer", "minimum": 0 }, "fixtureSignatures": { "type": "integer", "minimum": 1 } }
    }
  }
}
