{
  "_about": "The corpus manifest. One row per transcript with: when, who (as persistent entity ids), which interview guide, and how it was extracted (provenance). Segment attributes are the facets you filter and cross-tabulate on after 100 interviews - and every one of them points at the evidence it was derived from, so a segment is never an unsourced label.",
  "corpus_id": "cd_reporting_2026",
  "title": "Customer discovery: recurring report preparation",
  "transcripts": [
    {
      "transcript_id": "tx_001",
      "recorded_on": "2026-09-14",
      "conversation_type": "customer_discovery_interview",
      "guide_version": "v1",
      "speakers": { "spk_0": "person_interviewer", "spk_1": "person_A" },
      "organization": "org_A",
      "segments": {
        "role_family":            { "value": "operations",   "from": ["ev_001"] },
        "report_cadence":         { "value": "weekly",       "from": ["ev_003"] },
        "team_size":              { "value": 4,              "from": ["ev_002"] },
        "in_house_scripting":     { "value": "attempted, abandoned", "from": ["ev_012", "ev_014"] },
        "discretionary_budget":   { "value": "~5k, no allocation known", "from": ["ev_021", "ev_023"] },
        "security_review_gate":   { "value": "yes, if system-connected", "from": ["ev_024"] },
        "org_size":               { "value": null,           "from": [], "note": "not discussed" }
      },
      "extraction": {
        "run_id": "run_2026-09-16_a",
        "model": "claude-opus-5",
        "prompt_version": "extract-v0.3",
        "extracted_on": "2026-09-16",
        "coverage_audit": "full",
        "adversarial_pass": true,
        "validator": "pass",
        "unit_count": 29
      }
    },
    {
      "transcript_id": "tx_002",
      "recorded_on": "2026-09-22",
      "conversation_type": "customer_discovery_interview",
      "guide_version": "v1",
      "speakers": { "spk_0": "person_interviewer", "spk_1": "person_B" },
      "organization": "org_B",
      "segments": {
        "role_family":            { "value": "finance",      "from": ["ev_101"] },
        "report_cadence":         { "value": "monthly",      "from": ["ev_101"] },
        "team_size":              { "value": 2,              "from": ["ev_102"] },
        "in_house_scripting":     { "value": "succeeded, in use", "from": ["ev_104", "ev_106"] },
        "discretionary_budget":   { "value": "~20k, allocated", "from": ["ev_111"] },
        "security_review_gate":   { "value": "only for direct ERP connection", "from": ["ev_114"] },
        "org_size":               { "value": null,           "from": [], "note": "not discussed" }
      },
      "extraction": {
        "run_id": "run_2026-09-23_a",
        "model": "claude-opus-5",
        "prompt_version": "extract-v0.3",
        "extracted_on": "2026-09-23",
        "coverage_audit": "none",
        "adversarial_pass": false,
        "validator": "pass",
        "unit_count": 14,
        "note": "Audit skipped deliberately: audit is run on a sample of transcripts, not all. This is the cheaper default."
      }
    },
    {
      "transcript_id": "tx_003",
      "recorded_on": "2026-12-10",
      "conversation_type": "customer_discovery_followup",
      "guide_version": "v2-followup",
      "follow_up_of": "tx_001",
      "speakers": { "spk_0": "person_interviewer", "spk_1": "person_A" },
      "organization": "org_A",
      "segments": {
        "role_family":            { "value": "operations",   "from": ["ev_001"], "note": "inherited from tx_001; not restated" },
        "report_cadence":         { "value": "weekly",       "from": ["ev_202"] },
        "team_size":              { "value": 3,              "from": ["ev_002", "ev_213"], "note": "4 in tx_001 minus Priya" },
        "in_house_scripting":     { "value": "replaced by vendor tool (pilot)", "from": ["ev_201"] },
        "discretionary_budget":   { "value": "~5k; 8k quote pending director sign-off", "from": ["ev_209", "ev_210", "ev_211"] },
        "security_review_gate":   { "value": "yes; took 9 weeks", "from": ["ev_206"] },
        "org_size":               { "value": null,           "from": [], "note": "still not discussed" }
      },
      "extraction": {
        "run_id": "run_2026-12-11_a",
        "model": "claude-opus-5",
        "prompt_version": "extract-v0.4",
        "extracted_on": "2026-12-11",
        "coverage_audit": "none",
        "adversarial_pass": true,
        "validator": "pass",
        "unit_count": 14,
        "note": "prompt_version bumped: v0.4 adds the follow-up context (previous transcript's open items) to the extractor input."
      }
    }
  ],
  "saturation": {
    "_about": "New codes introduced per interview, in chronological order. When this trends to zero you are hearing the same things again - that is the standard 'stop interviewing' signal in qualitative research. Three interviews is far too few to read anything into it; the shape is what matters.",
    "series": [
      { "transcript_id": "tx_001", "new_codes": ["C01", "C02", "C03", "C04", "C06", "C07", "C09", "C10", "C11", "C12", "C13"], "cumulative": 11 },
      { "transcript_id": "tx_002", "new_codes": ["C05", "C08"], "cumulative": 13 },
      { "transcript_id": "tx_003", "new_codes": ["C14"], "cumulative": 14 }
    ]
  }
}
