{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://developer.reits.tech/schemas/runner-controller-readiness-evidence.v1.schema.json",
  "title": "REITs D05 G03/G04 Controller Readiness Evidence",
  "type": "object",
  "additionalProperties": false,
  "required": ["schemaVersion", "status", "observedAt", "observationMode", "program", "gateSummary", "gates", "host", "configuration", "factoryReview", "verificationPacks", "receiptRequirements", "operatorPlan", "safetyTruth"],
  "properties": {
    "schemaVersion": { "const": "developer.reits.tech/runner-controller-readiness-evidence/v1" },
    "status": { "const": "G03_G04_DENIED_NO_PRODUCTION_CONFIGURATION_OR_FACTORIES" },
    "observedAt": { "type": "string", "format": "date-time" },
    "observationMode": { "const": "READ_ONLY_HOST_AND_SOURCE_AUDIT_NO_INSTALL_NO_CONFIGURATION" },
    "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": 3 },
        "remainingIncludingCurrent": { "const": 32 }, "remainingAfterAcceptance": { "const": 31 }, "d05Accepted": { "const": false }
      }
    },
    "gateSummary": {
      "type": "object", "additionalProperties": false,
      "required": ["targetedGates", "satisfiedGates", "positiveAcceptanceReceipts", "missingReceiptRequirements", "decision"],
      "properties": {
        "targetedGates": { "const": 2 }, "satisfiedGates": { "const": 0 }, "positiveAcceptanceReceipts": { "const": 0 }, "missingReceiptRequirements": { "const": 10 },
        "decision": { "const": "DENY_AND_ESCALATE_TO_SECURITY_AND_ARCHITECTURE" }
      }
    },
    "gates": { "type": "array", "minItems": 2, "maxItems": 2, "items": { "$ref": "#/$defs/gate" } },
    "host": {
      "type": "object", "additionalProperties": false,
      "required": ["environment", "observedPortalRelease", "checks"],
      "properties": {
        "environment": { "type": "string" }, "observedPortalRelease": { "type": "string", "pattern": "^[0-9a-f]{40}$" },
        "checks": { "type": "array", "minItems": 7, "maxItems": 7, "items": { "$ref": "#/$defs/hostCheck" } }
      }
    },
    "configuration": {
      "type": "object", "additionalProperties": false,
      "required": ["manifestPath", "requiredOwner", "requiredGroup", "requiredMode", "maxBytes", "manifestInstalled", "configuredConfigRefs", "requiredConfigRefs", "configuredKeyRefs", "requiredKeyRefs", "referenceTypes"],
      "properties": {
        "manifestPath": { "const": "/etc/reits-runner-factory/controller-runtime.json" }, "requiredOwner": { "const": "root" }, "requiredGroup": { "const": "reits-runner-factory" }, "requiredMode": { "const": "0640" }, "maxBytes": { "const": 65536 },
        "manifestInstalled": { "const": false }, "configuredConfigRefs": { "const": 0 }, "requiredConfigRefs": { "const": 11 }, "configuredKeyRefs": { "const": 0 }, "requiredKeyRefs": { "const": 1 },
        "referenceTypes": { "type": "array", "minItems": 7, "maxItems": 7, "items": { "$ref": "#/$defs/referenceType" } }
      }
    },
    "factoryReview": {
      "type": "object", "additionalProperties": false,
      "required": ["auditedSourceRevision", "implementation", "closedFactoryCount", "readOnlySourceCount", "productionBindings", "components"],
      "properties": {
        "auditedSourceRevision": { "type": "string", "pattern": "^[0-9a-f]{40}$" }, "implementation": { "const": "ops/runner-factory/controller-bootstrap-composition.mjs" },
        "closedFactoryCount": { "const": 6 }, "readOnlySourceCount": { "const": 5 }, "productionBindings": { "const": 0 },
        "components": { "type": "array", "minItems": 6, "maxItems": 6, "items": { "$ref": "#/$defs/component" } }
      }
    },
    "verificationPacks": { "type": "array", "minItems": 4, "maxItems": 4, "items": { "$ref": "#/$defs/verificationPack" } },
    "receiptRequirements": { "type": "array", "minItems": 10, "maxItems": 10, "items": { "$ref": "#/$defs/receipt" } },
    "operatorPlan": {
      "type": "object", "additionalProperties": false, "required": ["nextAction", "forbiddenActions"],
      "properties": { "nextAction": { "type": "string", "minLength": 80 }, "forbiddenActions": { "type": "array", "minItems": 5, "items": { "type": "string", "minLength": 30 } } }
    },
    "safetyTruth": {
      "type": "object", "additionalProperties": false,
      "required": ["readOnlyAuditPerformed", "credentialsRecorded", "configurationWrites", "serviceInstallations", "productionFactoriesConstructed", "externalReadsExecuted", "externalWritesExecuted", "listenerStarts", "paidResourcesCreated", "g03Satisfied", "g04Satisfied", "d05Accepted"],
      "properties": {
        "readOnlyAuditPerformed": { "const": true }, "credentialsRecorded": { "const": false }, "configurationWrites": { "const": 0 }, "serviceInstallations": { "const": 0 }, "productionFactoriesConstructed": { "const": 0 },
        "externalReadsExecuted": { "const": 0 }, "externalWritesExecuted": { "const": 0 }, "listenerStarts": { "const": 0 }, "paidResourcesCreated": { "const": false }, "g03Satisfied": { "const": false }, "g04Satisfied": { "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-G03", "D05-G04"] }, "name": { "type": "string" }, "owner": { "enum": ["SECURITY", "GLOBAL_ARCHITECTURE"] }, "target": { "type": "string" }, "observed": { "type": "string" }, "positiveReceiptsObserved": { "const": 0 },
        "decision": { "enum": ["DENIED_CONFIGURATION_NOT_INSTALLED", "DENIED_FACTORIES_NOT_PRODUCTION_BOUND"] }
      }
    },
    "hostCheck": {
      "type": "object", "additionalProperties": false, "required": ["id", "label", "target", "observed", "status"],
      "properties": { "id": { "pattern": "^CFG-0[1-7]$" }, "label": { "type": "string" }, "target": { "type": "string" }, "observed": { "type": "string" }, "status": { "enum": ["DENIED", "SAFE_ABSENT", "SAFE_CLOSED"] } }
    },
    "referenceType": {
      "type": "object", "additionalProperties": false, "required": ["kind", "count", "state"],
      "properties": { "kind": { "type": "string" }, "count": { "type": "integer", "minimum": 1 }, "state": { "const": "NOT_CONFIGURED" } }
    },
    "component": {
      "type": "object", "additionalProperties": false, "required": ["id", "kind", "authority", "permission", "sourceState", "productionState"],
      "properties": { "id": { "type": "string" }, "kind": { "enum": ["READ_ONLY_READER", "ATTESTATION_VERIFIER"] }, "authority": { "type": "string" }, "permission": { "type": "string" }, "sourceState": { "const": "IMPLEMENTED_TEST_ONLY" }, "productionState": { "const": "NOT_BOUND" } }
    },
    "verificationPack": {
      "type": "object", "additionalProperties": false, "required": ["id", "status", "fixtures", "accepted", "denied"],
      "properties": { "id": { "type": "string" }, "status": { "type": "string", "pattern": "^PASS_" }, "fixtures": { "type": "integer", "minimum": 1 }, "accepted": { "type": "integer", "minimum": 0 }, "denied": { "type": "integer", "minimum": 0 } }
    },
    "receipt": {
      "type": "object", "additionalProperties": false, "required": ["gate", "id", "requirement", "status"],
      "properties": { "gate": { "enum": ["D05-G03", "D05-G04"] }, "id": { "pattern": "^(CONFIG|FACTORY)-0[1-5]$" }, "requirement": { "type": "string", "minLength": 30 }, "status": { "const": "MISSING" } }
    }
  }
}
