{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://developer.reits.tech/schemas/d06-browser-auth-contracts.v1.schema.json",
  "title": "D06-P1 Browser Auth cross-repository contracts",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "$schema",
    "schemaVersion",
    "observedAt",
    "status",
    "program",
    "knife",
    "sourceSnapshot",
    "riskInventory",
    "clientRegistrations",
    "contracts",
    "transactionStates",
    "errorTaxonomy",
    "controlSurfaces",
    "migrationLanes",
    "rolloutStages",
    "hostileCases",
    "approvalSeats",
    "activationContract",
    "invariants",
    "boundary"
  ],
  "properties": {
    "$schema": { "const": "/schemas/d06-browser-auth-contracts.v1.schema.json" },
    "schemaVersion": { "const": "developer.reits.tech/d06-browser-auth-contracts/v1" },
    "observedAt": { "type": "string", "format": "date-time" },
    "status": { "const": "D06_P1_CROSS_REPOSITORY_CONTRACT_CONTROL_PLANE_READY_D05_AND_ACTIVATION_BLOCKED" },
    "program": {
      "type": "object",
      "additionalProperties": false,
      "required": ["totalKnives", "acceptedKnives", "currentOrdinal", "currentKnife", "candidateKnife", "remainingIncludingCurrent", "remainingAfterD05", "d05GatesSatisfied", "d05GatesRequired", "d06Activated"],
      "properties": {
        "totalKnives": { "const": 36 },
        "acceptedKnives": { "const": 4 },
        "currentOrdinal": { "const": 5 },
        "currentKnife": { "const": "D05" },
        "candidateKnife": { "const": "D06" },
        "remainingIncludingCurrent": { "const": 32 },
        "remainingAfterD05": { "const": 31 },
        "d05GatesSatisfied": { "const": 0 },
        "d05GatesRequired": { "const": 11 },
        "d06Activated": { "const": false }
      }
    },
    "knife": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "title", "kind", "repositoryImplementationComplete", "countsAsProgramAcceptance", "nextExecutableTask", "activationRequires"],
      "properties": {
        "id": { "const": "D06-P1" },
        "title": { "type": "string", "minLength": 20 },
        "kind": { "const": "PRE_ADMISSION_CONTRACT" },
        "repositoryImplementationComplete": { "const": true },
        "countsAsProgramAcceptance": { "const": false },
        "nextExecutableTask": { "const": "D05-T02" },
        "activationRequires": { "const": "D05_ACCEPTED_AND_LEDGER_CAS_TO_D06" }
      }
    },
    "sourceSnapshot": {
      "type": "object",
      "additionalProperties": false,
      "required": ["repositoriesFetched", "repositories"],
      "properties": {
        "repositoriesFetched": { "const": 4 },
        "repositories": {
          "type": "array",
          "minItems": 4,
          "maxItems": 4,
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": ["id", "revision", "branch", "dirtyFiles", "evidence"],
            "properties": {
              "id": { "enum": ["reits-auth", "miniapp-open-platform", "public-booking-platform", "opensdk"] },
              "revision": { "type": "string", "pattern": "^[0-9a-f]{40}$" },
              "branch": { "const": "main" },
              "dirtyFiles": { "const": 0 },
              "evidence": {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": ["path", "gitBlob", "finding"],
                  "properties": {
                    "path": { "type": "string", "minLength": 3 },
                    "gitBlob": { "type": "string", "pattern": "^[0-9a-f]{40}$" },
                    "finding": { "type": "string", "minLength": 20 }
                  }
                }
              }
            }
          }
        }
      }
    },
    "riskInventory": {
      "type": "object",
      "additionalProperties": false,
      "required": ["browserCredentialStorageOperations", "seededBrowserClientsWithSevenDayTtl", "registeredRedirectUris", "pkceCapableClients", "browserSdkPackages", "productionStateReceipts", "consoleStateReceiptsRequired"],
      "properties": {
        "browserCredentialStorageOperations": { "const": 19 },
        "seededBrowserClientsWithSevenDayTtl": { "const": 3 },
        "registeredRedirectUris": { "const": 0 },
        "pkceCapableClients": { "const": 0 },
        "browserSdkPackages": { "const": 0 },
        "productionStateReceipts": { "const": 0 },
        "consoleStateReceiptsRequired": { "const": 36 }
      }
    },
    "clientRegistrations": {
      "type": "array",
      "minItems": 3,
      "maxItems": 3,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["id", "displayName", "owner", "origin", "redirectUris", "postLogoutRedirectUris", "audience", "scopes", "grantTypes", "responseTypes", "pkceMethod", "tokenEndpointAuthMethod", "browserTokenCustody", "status"],
        "properties": {
          "id": { "type": "string", "minLength": 5 },
          "displayName": { "type": "string", "minLength": 5 },
          "owner": { "type": "string", "minLength": 3 },
          "origin": { "type": "string", "pattern": "^https://" },
          "redirectUris": { "type": "array", "minItems": 1, "items": { "type": "string", "pattern": "^https://" } },
          "postLogoutRedirectUris": { "type": "array", "minItems": 1, "items": { "type": "string", "pattern": "^https://" } },
          "audience": { "type": "string", "minLength": 5 },
          "scopes": { "type": "array", "minItems": 2, "items": { "type": "string" } },
          "grantTypes": { "const": ["authorization_code", "refresh_token"] },
          "responseTypes": { "const": ["code"] },
          "pkceMethod": { "const": "S256" },
          "tokenEndpointAuthMethod": { "const": "private_key_jwt" },
          "browserTokenCustody": { "const": false },
          "status": { "const": "PROPOSED_NOT_REGISTERED" }
        }
      }
    },
    "contracts": {
      "type": "array",
      "minItems": 8,
      "maxItems": 8,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["id", "method", "path", "owner", "browserExposure", "success", "failure"],
        "properties": {
          "id": { "pattern": "^AUTH-CN0[1-8]$", "type": "string" },
          "method": { "enum": ["GET", "POST"] },
          "path": { "type": "string", "pattern": "^/" },
          "owner": { "type": "string", "minLength": 5 },
          "browserExposure": { "type": "string", "minLength": 5 },
          "success": { "type": "string", "minLength": 20 },
          "failure": { "type": "string", "minLength": 5 }
        }
      }
    },
    "transactionStates": { "$ref": "#/$defs/tenItems" },
    "errorTaxonomy": {
      "type": "array",
      "minItems": 12,
      "maxItems": 12,
      "uniqueItems": true,
      "items": { "type": "string", "pattern": "^[A-Z0-9_]+$" }
    },
    "controlSurfaces": {
      "type": "array",
      "minItems": 4,
      "maxItems": 4,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["id", "title", "operator", "decision", "realStates", "status"],
        "properties": {
          "id": { "pattern": "^AUTH-C0[1-4]$", "type": "string" },
          "title": { "type": "string", "minLength": 5 },
          "operator": { "type": "string", "minLength": 5 },
          "decision": { "type": "string", "minLength": 20 },
          "realStates": { "type": "array", "minItems": 9, "maxItems": 9, "uniqueItems": true, "items": { "type": "string" } },
          "status": { "const": "TARGET_UI_ONLY" }
        }
      }
    },
    "migrationLanes": { "$ref": "#/$defs/fourObjects" },
    "rolloutStages": {
      "type": "array",
      "minItems": 5,
      "maxItems": 5,
      "items": {
        "type": "object",
        "required": ["ordinal", "id", "exit", "status"],
        "properties": {
          "ordinal": { "type": "integer", "minimum": 1, "maximum": 5 },
          "id": { "type": "string" },
          "exit": { "type": "string", "minLength": 20 },
          "status": { "const": "WAIT_D05" }
        }
      }
    },
    "hostileCases": { "type": "array", "minItems": 24, "maxItems": 24, "uniqueItems": true, "items": { "type": "string" } },
    "approvalSeats": {
      "type": "array",
      "minItems": 4,
      "maxItems": 4,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["role", "decision"],
        "properties": {
          "role": { "enum": ["IDENTITY_OWNER", "SECURITY_OWNER", "CONSUMER_OWNER", "QA_OWNER"] },
          "decision": { "const": "ABSENT" }
        }
      }
    },
    "activationContract": {
      "type": "object",
      "additionalProperties": false,
      "required": ["d06ActivationAuthorized", "clientRegistrationsExecuted", "consumerMigrationsExecuted", "externalWritesExecuted", "ledgerMutationExecuted"],
      "properties": {
        "d06ActivationAuthorized": { "const": false },
        "clientRegistrationsExecuted": { "const": 0 },
        "consumerMigrationsExecuted": { "const": 0 },
        "externalWritesExecuted": { "const": 0 },
        "ledgerMutationExecuted": { "const": false }
      }
    },
    "invariants": {
      "type": "object",
      "additionalProperties": false,
      "required": ["programAdvanced", "d05RemainsCurrent", "productionSecretsStored", "browserTokenValuesProjected", "sharedEc2QualifiedForD05"],
      "properties": {
        "programAdvanced": { "const": false },
        "d05RemainsCurrent": { "const": true },
        "productionSecretsStored": { "const": 0 },
        "browserTokenValuesProjected": { "const": 0 },
        "sharedEc2QualifiedForD05": { "const": false }
      }
    },
    "boundary": { "type": "string", "minLength": 100 }
  },
  "$defs": {
    "tenItems": {
      "type": "array",
      "minItems": 10,
      "maxItems": 10,
      "items": {
        "type": "object",
        "required": ["id", "responsibility"],
        "properties": {
          "id": { "type": "string" },
          "responsibility": { "type": "string", "minLength": 20 }
        }
      }
    },
    "fourObjects": {
      "type": "array",
      "minItems": 4,
      "maxItems": 4,
      "items": { "type": "object" }
    }
  }
}
