{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://developer.reits.tech/schemas/runner-factory-controller-listener-authorization.v1.schema.json",
  "title": "REITs Runner Factory Controller listener authorization boundary",
  "type": "object",
  "required": ["schemaVersion", "status", "observedAt", "scope", "truth", "requirements", "operations", "stateModel", "invariants", "verification", "productionPrerequisites", "fixtureRegistry", "discovery"],
  "properties": {
    "schemaVersion": { "const": "developer.reits.tech/runner-factory-controller-listener-authorization/v1" },
    "status": { "const": "LISTENER_AUTHORIZATION_BOUNDARY_IMPLEMENTED_NOT_CONFIGURED" },
    "observedAt": { "type": "string", "format": "date-time" },
    "scope": {
      "type": "object",
      "required": ["mode", "input", "output", "endpoint", "validitySeconds", "networkAuthority", "deploymentAuthority"],
      "properties": {
        "mode": { "const": "TEST_ONLY_CANDIDATE_AUTHORIZATION_NO_ACTIVATION" },
        "input": { "const": "ADMISSION_ROLLBACK_WEBHOOK_DRILLS_OWNER_APPROVALS" },
        "output": { "const": "OPAQUE_ONE_SHOT_LISTENER_CANDIDATE" },
        "endpoint": { "const": "127.0.0.1:8110" },
        "validitySeconds": { "const": 120 },
        "networkAuthority": { "const": "NONE" },
        "deploymentAuthority": { "const": "NONE" }
      },
      "additionalProperties": false
    },
    "truth": {
      "type": "object",
      "required": ["productionListenerAuthorizationReceipts", "productionOwnerApprovals", "productionRollbackRehearsals", "productionNegativeWebhookRehearsals", "productionOperationalDrills", "controllerListeners", "listenerStarts", "publicRoutes", "reverseProxyRoutes", "externalReadsExecuted", "externalWritesExecuted", "mutationsExecuted", "paidResourcesCreated", "deploymentPermitted"],
      "properties": {
        "productionListenerAuthorizationReceipts": { "const": 0 }, "productionOwnerApprovals": { "const": 0 }, "productionRollbackRehearsals": { "const": 0 }, "productionNegativeWebhookRehearsals": { "const": 0 }, "productionOperationalDrills": { "const": 0 }, "controllerListeners": { "const": 0 }, "listenerStarts": { "const": 0 }, "publicRoutes": { "const": 0 }, "reverseProxyRoutes": { "const": 0 }, "externalReadsExecuted": { "const": 0 }, "externalWritesExecuted": { "const": 0 }, "mutationsExecuted": { "const": 0 }, "paidResourcesCreated": { "const": false }, "deploymentPermitted": { "const": false }
      },
      "additionalProperties": false
    },
    "requirements": {
      "type": "array", "minItems": 8, "maxItems": 8,
      "items": { "type": "object", "required": ["id", "count", "proof"], "properties": { "id": { "type": "string" }, "count": { "type": "integer", "minimum": 1 }, "proof": { "type": "string" } }, "additionalProperties": false }
    },
    "operations": {
      "type": "array", "minItems": 4, "maxItems": 4,
      "items": { "type": "object", "required": ["id", "guard", "result"], "properties": { "id": { "enum": ["authorize", "verify", "project", "dispose"] }, "guard": { "type": "string" }, "result": { "type": "string" } }, "additionalProperties": false }
    },
    "stateModel": {
      "type": "array", "minItems": 8, "maxItems": 8,
      "items": { "type": "object", "required": ["id", "meaning"], "properties": { "id": { "type": "string" }, "meaning": { "type": "string" } }, "additionalProperties": false }
    },
    "invariants": { "type": "array", "minItems": 36, "maxItems": 36, "items": { "type": "string" } },
    "verification": {
      "type": "object",
      "required": ["status", "fixtures", "acceptedOutcomes", "deniedOutcomes", "fixtureEvidenceSignaturesVerified", "plansProjected", "productionListenerAuthorizationReceipts", "listenerStarts", "externalReadsExecuted", "externalWritesExecuted", "mutationsExecuted"],
      "properties": {
        "status": { "const": "PASS_FIXTURE_ONLY" }, "fixtures": { "const": 53 }, "acceptedOutcomes": { "const": 6 }, "deniedOutcomes": { "const": 47 }, "fixtureEvidenceSignaturesVerified": { "const": 132 }, "plansProjected": { "const": 3 }, "productionListenerAuthorizationReceipts": { "const": 0 }, "listenerStarts": { "const": 0 }, "externalReadsExecuted": { "const": 0 }, "externalWritesExecuted": { "const": 0 }, "mutationsExecuted": { "const": 0 }
      },
      "additionalProperties": false
    },
    "productionPrerequisites": { "type": "array", "minItems": 9, "maxItems": 9, "items": { "type": "string" } },
    "fixtureRegistry": {
      "type": "object",
      "required": ["schemaVersion", "fixedTime", "cases"],
      "properties": {
        "schemaVersion": { "const": "developer.reits.tech/runner-factory-controller-listener-authorization-fixtures/v1" },
        "fixedTime": { "const": "2026-07-21T04:00:00.000Z" },
        "cases": {
          "type": "array", "minItems": 53, "maxItems": 53,
          "items": { "type": "object", "required": ["id", "profile", "expected"], "properties": { "id": { "pattern": "^RFLA-[0-9]{2}$" }, "profile": { "type": "string" }, "expected": { "enum": ["ACCEPT", "DENY"] }, "outcome": { "type": "string" }, "errorCode": { "type": "string" } }, "additionalProperties": false }
        }
      },
      "additionalProperties": false
    },
    "discovery": {
      "type": "object",
      "required": ["controller", "productionEvidenceAdmission", "workbench", "schema"],
      "properties": {
        "controller": { "const": "/api/runner-factory/controller" },
        "productionEvidenceAdmission": { "const": "/api/runner-factory/controller/production-evidence-admission" },
        "workbench": { "const": "/release-foundation#listener-authorization" },
        "schema": { "const": "/schemas/runner-factory-controller-listener-authorization.v1.schema.json" }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
