{
  "schemaVersion": 1,
  "study": "cold-email-agency-reporting-interview-study",
  "title": "Agency reporting interview protocol",
  "status": "awaiting-real-data",
  "scope": "Collection template, not a dataset or completed field study. All null values are intentionally uncollected.",
  "unitOfObservation": "agency-interview",
  "requiredInputs": "Consenting agency operators and optional redacted artifacts.",
  "controls": "Use the last real reporting cycle; ask neutral follow-ups before feature preferences.",
  "primaryAnalysis": "Qualitative themes with case IDs and contradictory cases, not market percentages.",
  "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": {
    "participant_id": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "participant id",
      "missingValue": null
    },
    "agency_size": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "agency size",
      "missingValue": null
    },
    "client_model": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "client model",
      "missingValue": null
    },
    "consent_recorded": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "consent recorded",
      "missingValue": null
    },
    "reporting_task": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "reporting task",
      "missingValue": null
    },
    "metric_dispute": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "metric dispute",
      "missingValue": null
    },
    "evidence_retrieved": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "evidence retrieved",
      "missingValue": null
    },
    "workaround": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "workaround",
      "missingValue": null
    },
    "contradictory_case": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "contradictory case",
      "missingValue": null
    },
    "redacted_quote": {
      "required": true,
      "type": "string, number or boolean as specified by the registered protocol; null until collected",
      "meaning": "redacted quote",
      "missingValue": null
    }
  },
  "blankRecord": {
    "observation_id": null,
    "participant_id": null,
    "agency_size": null,
    "client_model": null,
    "consent_recorded": null,
    "reporting_task": null,
    "metric_dispute": null,
    "evidence_retrieved": null,
    "workaround": null,
    "contradictory_case": null,
    "redacted_quote": null,
    "excluded": false,
    "exclusion_reason": null,
    "protocol_deviation": null
  },
  "records": [],
  "analysisStatus": "not-run",
  "results": null,
  "interpretationLimits": "A convenience sample does not establish market share or demand volume. Separate participant quotes, researcher interpretations and product decisions. Publish results only after the evidence, method and limitations have been reviewed. This protocol provides no benchmark, expected lift or completed-study claim.",
  "procedure": [
    "Recruit across relevant agency sizes and client models. Request a redacted report only with permission; avoid client identifiers.",
    "Ask the participant to reconstruct the last reporting cycle, explain a disputed metric and show how they reconciled it. Probe concrete actions before feature preferences.",
    "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": [
    "Walk me through the last specific instance.",
    "What did you do next?",
    "What evidence or artifact did you use?",
    "What remained unresolved?",
    "Tell me about a case that worked differently."
  ]
}
