{
  "schemaVersion": "1.0",
  "protocolUrl": "https://www.flockblock.app/research/wireless-scanner-test-protocol/",
  "status": "schema-only-no-measured-captures",
  "trial": {
    "trialId": "string",
    "protocolVersion": "string",
    "startedAtUtc": "ISO-8601 timestamp",
    "durationSeconds": "number",
    "environmentId": "pseudonymous string",
    "operatorBlinded": "boolean",
    "target": {
      "present": "boolean",
      "manufacturer": "string",
      "model": "string",
      "hardwareRevision": "string",
      "firmwareOrSoftwareVersion": "string",
      "collectionMode": "passive | active | mixed",
      "backhaul": "none | local-storage | ethernet | cellular | wifi | other",
      "groundTruthTransitions": [
        "ISO-8601 timestamp + state"
      ]
    },
    "flockBlock": {
      "hardwareRevision": "string",
      "firmwareVersion": "string",
      "signatureLibraryVersion": "string",
      "decoyMode": "off | on",
      "alertEvents": [
        "ISO-8601 timestamp + signatureId + confidence"
      ]
    },
    "conditions": {
      "distanceMeters": "number",
      "obstruction": "none | body | wall | metal | other",
      "orientationDegrees": "number",
      "congestionClass": "low | medium | high"
    },
    "referenceReceiver": {
      "hardware": "string",
      "softwareVersion": "string",
      "observedAdvertisementCount": "number",
      "observedWifiFrameCount": "number",
      "observedTemporaryIdentifierCount": "number",
      "estimatedCaptureLossRate": "number from 0 to 1"
    },
    "outcome": {
      "supportedTarget": "boolean",
      "alertExpected": "boolean",
      "alertObserved": "boolean",
      "exclusionReason": "empty or documented reason",
      "reviewerNotes": "non-identifying string"
    }
  },
  "privacy": {
    "thirdPartyAddresses": "replace with per-experiment pseudonyms before publication",
    "unrelatedTraffic": "exclude from public release",
    "preciseLocation": "not collected",
    "protectedContent": "not collected"
  }
}
