{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://developer.reits.tech/schemas/runner-factory-capacity-controller.v1.schema.json",
  "title": "REITs globally fenced ephemeral-worker capacity dossier",
  "type": "object",
  "required": ["schemaVersion", "status", "observedAt", "scope", "truth", "implementation", "operations", "driverCalls", "stateMachine", "invariants", "verification", "failureClasses", "productionPrerequisites", "fixtureRegistry", "discovery"],
  "properties": {
    "schemaVersion": { "const": "developer.reits.tech/runner-factory-capacity-controller/v1" },
    "status": { "const": "ADAPTER_IMPLEMENTED_NOT_CONFIGURED" },
    "observedAt": { "type": "string", "format": "date-time" },
    "scope": {
      "type": "object",
      "required": ["poolId", "desiredSlots", "slotsPerAdmission", "maxJobsPerWorker", "capacityMeaning", "failureMode"],
      "properties": {
        "poolId": { "const": "rfpool_linux-amd64" },
        "desiredSlots": { "const": 2 },
        "slotsPerAdmission": { "const": 1 },
        "maxJobsPerWorker": { "const": 1 },
        "capacityMeaning": { "const": "CONCURRENT_EPHEMERAL_WORKER_BUDGET_NOT_WARM_INSTANCES" },
        "failureMode": { "const": "WHOLE_POOL_FREEZE" }
      },
      "additionalProperties": false
    },
    "truth": {
      "type": "object",
      "required": ["runtimeDriverConfigured", "durableCapacityLedgerCreated", "readinessGateSatisfied", "livePools", "liveSlots", "liveAcquisitions", "runtimeReplacements", "runtimeFreezes", "externalReadsExecuted", "externalWritesExecuted", "paidResourcesCreated", "deploymentPermitted"],
      "properties": {
        "runtimeDriverConfigured": { "const": false }, "durableCapacityLedgerCreated": { "const": false }, "readinessGateSatisfied": { "const": false },
        "livePools": { "const": 0 }, "liveSlots": { "const": 0 }, "liveAcquisitions": { "const": 0 }, "runtimeReplacements": { "const": 0 }, "runtimeFreezes": { "const": 0 },
        "externalReadsExecuted": { "const": 0 }, "externalWritesExecuted": { "const": 0 }, "paidResourcesCreated": { "const": false }, "deploymentPermitted": { "const": false }
      },
      "additionalProperties": false
    },
    "implementation": {
      "type": "object",
      "required": ["adapter", "testDriver", "fixtureRegistry", "verifier", "runtimeDriver", "receiptVerifier"],
      "properties": {
        "adapter": { "const": "ops/runner-factory/capacity-controller.mjs" },
        "testDriver": { "const": "ops/runner-factory/memory-capacity-driver.mjs" },
        "fixtureRegistry": { "const": "ops/runner-factory/capacity-controller-fixtures.json" },
        "verifier": { "const": "scripts/verify-runner-factory-capacity-controller.mjs" },
        "runtimeDriver": { "const": "NOT_CONFIGURED" },
        "receiptVerifier": { "const": "PINNED_KMS_PUBLIC_KEY_REQUIRED_AT_RUNTIME" }
      },
      "additionalProperties": false
    },
    "operations": { "type": "array", "minItems": 4, "maxItems": 4 },
    "driverCalls": { "type": "array", "minItems": 5, "maxItems": 5 },
    "stateMachine": { "type": "array", "minItems": 9, "maxItems": 9 },
    "invariants": { "type": "array", "minItems": 16, "maxItems": 16, "items": { "type": "string", "minLength": 12 } },
    "verification": {
      "type": "object",
      "required": ["status", "fixtures", "allowedTransitions", "deniedTransitions", "driverCallsModeled", "concurrencyBoundCases", "receiptAndWorkerProofDenials", "freezeProofCases", "idempotentTerminalCases", "leaseValuesRecorded", "externalCallsExecuted"],
      "properties": {
        "status": { "const": "PASS_TEST_DRIVER_ONLY" }, "fixtures": { "const": 30 }, "allowedTransitions": { "const": 8 }, "deniedTransitions": { "const": 22 },
        "driverCallsModeled": { "const": 5 }, "concurrencyBoundCases": { "const": 2 }, "receiptAndWorkerProofDenials": { "const": 8 }, "freezeProofCases": { "const": 4 },
        "idempotentTerminalCases": { "const": 2 }, "leaseValuesRecorded": { "const": 0 }, "externalCallsExecuted": { "const": 0 }
      },
      "additionalProperties": false
    },
    "failureClasses": { "type": "array", "minItems": 5, "maxItems": 5 },
    "productionPrerequisites": { "type": "array", "minItems": 7, "maxItems": 7, "items": { "type": "string", "minLength": 12 } },
    "fixtureRegistry": {
      "type": "object",
      "required": ["schemaVersion", "fixedTime", "cases"],
      "properties": {
        "schemaVersion": { "const": "developer.reits.tech/runner-factory-capacity-controller-fixtures/v1" },
        "fixedTime": { "const": "2026-07-20T18:35:00.000Z" },
        "cases": { "type": "array", "minItems": 30, "maxItems": 30 }
      },
      "additionalProperties": false
    },
    "discovery": {
      "type": "object",
      "required": ["lifecycle", "controller", "workbench", "schema"],
      "properties": {
        "lifecycle": { "const": "/api/runner-factory" },
        "controller": { "const": "/api/runner-factory/controller" },
        "workbench": { "const": "/release-foundation#capacity-controller" },
        "schema": { "const": "/schemas/runner-factory-capacity-controller.v1.schema.json" }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
