{
  "schemaVersion": 1,
  "study": "cold-email-subject-line-experiment",
  "title": "Subject line experiment: study protocol",
  "status": "awaiting-real-data",
  "scope": "Collection template, not a dataset or completed field study. All null values are intentionally uncollected.",
  "unitOfObservation": "prospect",
  "requiredInputs": "Eligible contacts and two exact truthful subjects with a fixed body.",
  "controls": "Balance mailbox and segment; do not use opens as the primary human-engagement outcome.",
  "primaryAnalysis": "Qualified replies per assigned prospect; no winner from tracking pixels alone.",
  "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": {
    "assignment_id": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "assignment id",
      "missingValue": null
    },
    "company_id": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "company id",
      "missingValue": null
    },
    "arm": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "arm",
      "missingValue": null
    },
    "subject_text": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "subject text",
      "missingValue": null
    },
    "body_version": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "body version",
      "missingValue": null
    },
    "mailbox_id": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "mailbox id",
      "missingValue": null
    },
    "assigned_at": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "assigned at",
      "missingValue": null
    },
    "cutoff_at": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "cutoff at",
      "missingValue": null
    },
    "qualified_reply": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "qualified reply",
      "missingValue": null
    },
    "optout": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "optout",
      "missingValue": null
    }
  },
  "blankRecord": {
    "observation_id": null,
    "assignment_id": null,
    "company_id": null,
    "arm": null,
    "subject_text": null,
    "body_version": null,
    "mailbox_id": null,
    "assigned_at": null,
    "cutoff_at": null,
    "qualified_reply": null,
    "optout": null,
    "excluded": false,
    "exclusion_reason": null,
    "protocol_deviation": null
  },
  "records": [],
  "analysisStatus": "not-run",
  "results": null,
  "interpretationLimits": "Repeated tests across many subjects increase false discovery risk. Register one primary comparison and disclose exploratory follow-ups. Publish results only after the evidence, method and limitations have been reviewed. This protocol provides no benchmark, expected lift or completed-study claim.",
  "procedure": [
    "Record exact subject strings, body version, mailbox and segment. Choose qualified replies as the primary outcome rather than tracked opens.",
    "Balance assignments within mailbox and segment. Do not use fake reply prefixes or urgency as a test treatment.",
    "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": []
}
