{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://developer.reits.tech/schemas/runner-factory-gitea-control-plane.v1.schema.json",
  "title": "REITs Gitea one-job runner control-plane dossier",
  "type": "object",
  "required": ["schemaVersion", "status", "observedAt", "scope", "truth", "implementation", "operations", "modeledCalls", "stateMachine", "invariants", "verification", "failureClasses", "productionPrerequisites", "officialReferences", "fixtureRegistry", "discovery"],
  "properties": {
    "schemaVersion": { "const": "developer.reits.tech/runner-factory-gitea-control-plane/v1" },
    "status": { "const": "ADAPTER_IMPLEMENTED_NOT_CONFIGURED" },
    "observedAt": { "type": "string", "format": "date-time" },
    "scope": {
      "type": "object",
      "required": ["baseUrl", "organization", "repositoryPattern", "credentialSelection", "agentSocket", "allowedLabels", "maxJobs"],
      "properties": {
        "baseUrl": { "const": "https://gitea.reits.tech" },
        "organization": { "const": "reits" },
        "repositoryPattern": { "const": "reits/<admitted-repository>" },
        "credentialSelection": { "const": "SECRET_REFERENCE_ONLY" },
        "agentSocket": { "const": "unix:///run/reits-runner/agent.sock" },
        "allowedLabels": { "const": ["ubuntu-latest"] },
        "maxJobs": { "const": 1 }
      },
      "additionalProperties": false
    },
    "truth": {
      "type": "object",
      "required": ["runtimeDriverConfigured", "controlCredentialConfigured", "workerAgentInstalled", "liveRunners", "runtimeAssignments", "giteaReadsExecuted", "giteaWritesExecuted", "registrationSecretsRecorded", "runnerCredentialsRecorded", "readinessGateSatisfied", "paidResourcesCreated", "deploymentPermitted"],
      "properties": {
        "runtimeDriverConfigured": { "const": false }, "controlCredentialConfigured": { "const": false }, "workerAgentInstalled": { "const": false },
        "liveRunners": { "const": 0 }, "runtimeAssignments": { "const": 0 }, "giteaReadsExecuted": { "const": 0 }, "giteaWritesExecuted": { "const": 0 },
        "registrationSecretsRecorded": { "const": 0 }, "runnerCredentialsRecorded": { "const": 0 }, "readinessGateSatisfied": { "const": false },
        "paidResourcesCreated": { "const": false }, "deploymentPermitted": { "const": false }
      },
      "additionalProperties": false
    },
    "implementation": {
      "type": "object",
      "required": ["adapter", "testDriver", "fixtureRegistry", "verifier", "runtimeDriver"],
      "properties": {
        "adapter": { "const": "ops/runner-factory/gitea-control-plane.mjs" },
        "testDriver": { "const": "ops/runner-factory/memory-gitea-control-driver.mjs" },
        "fixtureRegistry": { "const": "ops/runner-factory/gitea-control-plane-fixtures.json" },
        "verifier": { "const": "scripts/verify-runner-factory-gitea-control-plane.mjs" },
        "runtimeDriver": { "const": "NOT_CONFIGURED" }
      },
      "additionalProperties": false
    },
    "operations": { "type": "array", "minItems": 3, "maxItems": 3 },
    "modeledCalls": { "type": "array", "minItems": 6, "maxItems": 6 },
    "stateMachine": { "type": "array", "minItems": 10, "maxItems": 10 },
    "invariants": { "type": "array", "minItems": 16, "maxItems": 16, "items": { "type": "string", "minLength": 12 } },
    "verification": {
      "type": "object",
      "required": ["status", "fixtures", "allowedTransitions", "deniedTransitions", "adapterOperations", "modeledCalls", "internalRegistrationCompensations", "idempotentTerminalCases", "secretExposureCount", "externalCallsExecuted"],
      "properties": {
        "status": { "const": "PASS_TEST_DRIVER_ONLY" }, "fixtures": { "const": 34 }, "allowedTransitions": { "const": 8 }, "deniedTransitions": { "const": 26 },
        "adapterOperations": { "const": 3 }, "modeledCalls": { "const": 6 }, "internalRegistrationCompensations": { "const": 3 }, "idempotentTerminalCases": { "const": 2 },
        "secretExposureCount": { "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 } },
    "officialReferences": {
      "type": "object",
      "required": ["liveOpenApi", "openApiVersion", "ephemeralRunners"],
      "properties": { "liveOpenApi": { "type": "string", "format": "uri" }, "openApiVersion": { "const": "1.25.4" }, "ephemeralRunners": { "type": "string", "format": "uri" } },
      "additionalProperties": false
    },
    "fixtureRegistry": {
      "type": "object",
      "required": ["schemaVersion", "fixedTime", "cases"],
      "properties": {
        "schemaVersion": { "const": "developer.reits.tech/runner-factory-gitea-control-plane-fixtures/v1" },
        "fixedTime": { "const": "2026-07-20T17:55:00.000Z" },
        "cases": { "type": "array", "minItems": 34, "maxItems": 34 }
      },
      "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#gitea-control-plane" },
        "schema": { "const": "/schemas/runner-factory-gitea-control-plane.v1.schema.json" }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
