{
  "schemaVersion": 1,
  "study": "cold-email-open-tracking-noise-study",
  "title": "Open tracking noise study: study protocol",
  "status": "awaiting-real-data",
  "scope": "Collection template, not a dataset or completed field study. All null values are intentionally uncollected.",
  "unitOfObservation": "message-client-condition",
  "requiredInputs": "Owned seed inboxes and a separate reader-action log.",
  "controls": "Randomize condition order; include unopened controls and record settings.",
  "primaryAnalysis": "Image requests without a recorded human open, by controlled client condition.",
  "registration": {
    "owner": null,
    "protocolVersion": "1",
    "registeredAt": null,
    "population": null,
    "eligibilityRules": null,
    "primaryOutcomeDefinition": null,
    "denominator": null,
    "observationWindow": null,
    "targetSampleAndJustification": null,
    "assignmentProcedureAndSeed": null,
    "exclusionRules": null,
    "safetyStopConditions": null,
    "missingDataPolicy": null,
    "retentionAndAccessOwner": null
  },
  "collectionRules": [
    "Assign pseudonymous IDs; do not store mailbox passwords, access tokens or unnecessary identifiers.",
    "Freeze the outcome and exclusions before collection; retain exclusions with reasons.",
    "Do not use repeated observations as independent people. Record clustering by person, company or mailbox.",
    "Do not treat a software test, simulated reply or researcher-written example as participant or campaign evidence.",
    "Record complaints and opt-outs and follow the actual suppression workflow.",
    "For interviews obtain permission before recording and respect withdrawal.",
    "Publish aggregate or redacted evidence only after review; keep original private records outside the public website."
  ],
  "fieldDictionary": {
    "message_id": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "message id",
      "missingValue": null
    },
    "client_version": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "client version",
      "missingValue": null
    },
    "privacy_setting": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "privacy setting",
      "missingValue": null
    },
    "images_setting": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "images setting",
      "missingValue": null
    },
    "sent_at": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "sent at",
      "missingValue": null
    },
    "image_requested_at": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "image requested at",
      "missingValue": null
    },
    "reader_action": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "reader action",
      "missingValue": null
    },
    "reader_action_at": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "reader action at",
      "missingValue": null
    }
  },
  "blankRecord": {
    "observation_id": null,
    "message_id": null,
    "client_version": null,
    "privacy_setting": null,
    "images_setting": null,
    "sent_at": null,
    "image_requested_at": null,
    "reader_action": null,
    "reader_action_at": null,
    "excluded": false,
    "exclusion_reason": null,
    "protocol_deviation": null
  },
  "records": [],
  "analysisStatus": "not-run",
  "results": null,
  "interpretationLimits": "Changing security or privacy settings changes the experiment; record the setting instead of inferring a person’s behavior. Publish results only after the evidence, method and limitations have been reviewed. This protocol provides no benchmark, expected lift or completed-study claim.",
  "procedure": [
    "Capture send time, image request time, client version, privacy setting and an independent reader action log.",
    "Use owned seed accounts. Randomize the order of privacy-on, privacy-off and images-blocked conditions; include messages intentionally left unread.",
    "Before collection, write the primary outcome, observation window, exclusion rules and stopping conditions. Preserve excluded observations with a reason rather than quietly removing them.",
    "Pilot the procedure with fictional or owned test data, resolve ambiguous fields, and freeze a dated protocol version before the main run."
  ],
  "interviewPrompts": []
}
