{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://dashfin.org/schemas/df-synthetic-evaluation-starter-kit-v1.schema.json",
  "title": "DashFin Synthetic Evaluation Starter Kit v1 manifest",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "kit_schema",
    "kit_id",
    "version",
    "status",
    "record_class",
    "data_contract",
    "reference_pack",
    "custom_flow_contract",
    "boundaries"
  ],
  "properties": {
    "kit_schema": {"const": "DF-SYNTHETIC-EVALUATION-STARTER-KIT-v1"},
    "kit_id": {"type": "string", "pattern": "^DF-KIT-[A-Z0-9-]+$"},
    "version": {"type": "string", "pattern": "^1\\.[0-9]+\\.[0-9]+$"},
    "status": {"const": "EXPERIMENTAL"},
    "record_class": {"const": "SYNTHETIC_TEST"},
    "data_contract": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "synthetic_only",
        "contains_real_person_data",
        "accepts_claimed_redacted_patient_data",
        "external_side_effects_permitted",
        "production_credentials_permitted"
      ],
      "properties": {
        "synthetic_only": {"const": true},
        "contains_real_person_data": {"const": false},
        "accepts_claimed_redacted_patient_data": {"const": false},
        "external_side_effects_permitted": {"const": false},
        "production_credentials_permitted": {"const": false}
      }
    },
    "reference_pack": {
      "type": "object",
      "additionalProperties": false,
      "required": ["envelope", "scenarios", "trace_index", "minimum_scenarios", "paired_variants_required"],
      "properties": {
        "envelope": {"$ref": "#/$defs/safePath"},
        "scenarios": {"$ref": "#/$defs/safePath"},
        "trace_index": {"$ref": "#/$defs/safePath"},
        "minimum_scenarios": {"type": "integer", "minimum": 6},
        "paired_variants_required": {"const": true}
      }
    },
    "custom_flow_contract": {
      "type": "object",
      "additionalProperties": false,
      "required": ["template", "required_declarations", "fail_closed_on_missing_declaration"],
      "properties": {
        "template": {"$ref": "#/$defs/safePath"},
        "required_declarations": {
          "type": "array",
          "minItems": 8,
          "uniqueItems": true,
          "items": {
            "enum": [
              "synthetic_data_provenance",
              "target_and_version",
              "permitted_tools",
              "resource_scope",
              "approval_points",
              "safety_invariants",
              "stop_conditions",
              "fault_scenarios",
              "expected_safe_behaviour",
              "evidence_capture"
            ]
          }
        },
        "fail_closed_on_missing_declaration": {"const": true}
      }
    },
    "boundaries": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "not_clinical_care",
        "not_a_clinical_protocol",
        "not_regulatory_certification",
        "not_dcb_signoff",
        "not_deployment_authority",
        "client_retains_system_and_data_authority"
      ],
      "properties": {
        "not_clinical_care": {"const": true},
        "not_a_clinical_protocol": {"const": true},
        "not_regulatory_certification": {"const": true},
        "not_dcb_signoff": {"const": true},
        "not_deployment_authority": {"const": true},
        "client_retains_system_and_data_authority": {"const": true}
      }
    }
  },
  "$defs": {
    "safePath": {
      "type": "string",
      "minLength": 1,
      "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\).+$"
    }
  }
}
