# Example: one interview, every layer

A single synthetic customer-discovery interview (26 turns, 51 sentences) taken through
the full structure we discussed. The transcript is written so it exercises every
distinction in `COTEXT/initial.md`: scope qualification, secondhand information,
self-correction, a leading question that gets rejected, interest vs. commitment,
approval authority vs. budget, and a proposed date wrapped in three hedges.

Nothing here is a schema proposal. It is a concrete shape to react to.

## Files, in reading order

| File | What it is | Produced when |
|---|---|---|
| `transcript.json` | The input, in your turn / speaker / sentence format | — |
| `participants.json` | Who the speaker IDs are, **derived** from what was said, with the evidence that supports each claim. Roles are never assumed from turn order. | ingestion |
| `referents.json` | The *things* the conversation is about (people, processes, systems, problems, attempts, proposals). Evidence units point at these. This is what makes "everything said about report preparation" a join, not a string match. | ingestion |
| `evidence_units.json` | The core. 29 units, each: claim, referents, modality (source / stance / temporal / scope), conditions kept inside the unit, exact spans, verbatim quotes, the question that elicited it, extractor flags. | ingestion |
| `relations.json` | Edges between units: qualifies, corrects, explains, depends_on… Each marked `stated` or `inferred`. This is where corrections and contradictions live — as edges, never as silent edits. | ingestion |
| `probes.json` | Every interviewer question, its type (open / clarifying / leading / hypothetical), what it produced, and a list of **topics not probed**. This is the answer to "not discussed ≠ doesn't exist". | ingestion |
| `coverage_audit.json` | Proposition-level accounting (52 atomic claims → units) plus the findings of an adversarial recall pass and what was changed because of them. | ingestion, second pass |
| `learnings.json` | Inferences. Produced **lazily**, each attached to the question that caused it, with supporting / challenging / context evidence kept in separate lists. | on demand, later |
| `viewer.html` | Four-column viewer: transcript → evidence → learnings → detail. Click anything; linked items highlight in every column. Self-contained, opens as a local file. | — |
| `build_viewer.py` | Re-embeds the JSON files into `viewer.html`. Run after any data change. | — |
| `validate.py` | Mechanical checks: quotes are real substrings of their spans, every ID resolves, every sentence has exactly one home, superseded units have a `corrects` edge, no learning claims to generalise from one transcript. | any time |

Run the checks, rebuild the viewer, open it:

```bash
python examples/interview-01/validate.py
```

```bash
python examples/interview-01/build_viewer.py
```

Then open `examples/interview-01/viewer.html` in a browser. Press `Esc` to clear a selection.

## Trace one claim through every layer

Take "it takes about six hours" (turn 4).

1. **Transcript** — turn 4 s1 says six hours. Turn 5 the interviewer asks "per analyst or across the team?". Turn 6 s0: "Across the team."
2. **Evidence** — `ev_005` spans all three sentences, including the interviewer's question. Its claim says *team-wide, not per analyst*. Its `conditions` note that the scope was only established by the clarifying question. Its `flags` note that turn 4 alone is ambiguous and turn 6 alone is meaningless.
3. **Relations** — `rel_01`: `ev_006` (ten hours at month-end) *qualifies* `ev_005`. `rel_04`: `ev_011` (manual remap) is offered as an *explanation* — with a note that the speaker never said remapping is *all* six hours.
4. **Probes** — `pr_03` is the clarifying question, with a note that without it the figure would be ambiguous by 3×. `topics_not_probed` records that nobody asked what else the analysts do, so six hours has no denominator.
5. **Coverage** — three propositions in turns 4 and 6 map to `ev_005`/`ev_006`.
6. **Learning** — `lr_001` uses `ev_005` and `ev_006` as support, but lists `ev_011` under *challenged_by* because the remap share is unknown, and carries the caveat that the severity answer came from a leading question.

At every step you can get back to the transcript and check.

## Things this example is deliberately showing

- **A superseded unit that is kept.** `ev_017` ("maybe once a month") is corrected within the same turn. It stays, marked `superseded`, with `rel_08` pointing at the correction. Nothing is silently reconciled.
- **Secondhand marked as secondhand.** `ev_008` (the finance spreadsheet) and `ev_025` (six-week security review) both carry `source_of_knowledge: secondhand` because the speaker said so.
- **Unclear marked as unclear.** `ev_016` describes what *directors* do. The speaker's basis is unknown. The adversarial pass (`rf_01`) caught a first draft that had this as firsthand.
- **A rejected leading question.** `pr_07` asks if the process is "painful". `ev_015` records the pushback with `stance: corrects` and `elicited_by.leading: true`. The rejection is treated as a stronger signal than agreement would have been.
- **Interest ≠ purchase.** `pr_09` asks "would you buy". `ev_020` records interest in *looking at* it, and flags the gap between question and answer.
- **Authority ≠ budget.** `ev_021` (can approve up to ~5k) and `ev_023` (no budget line, to speaker's knowledge) are separate units with a `qualifies` edge, not one merged "they can buy it" claim.
- **A proposed date that is not a deadline.** `ev_027` keeps all three hedges in `conditions`, and `rf_06` records that this was explicitly checked.
- **Inferred relations labelled as such.** `rel_10` and `rel_16` are extractor inferences, marked `basis: inferred`, so they can be filtered out by anyone who wants only what was stated.
- **A visible omission.** Turn 24 s2 ("That's it, I think") is listed as `missed` in the audit and as `not_extracted` in the units. The point is that the omission is a recorded decision, not an accident.

## Things this example does NOT settle

- Whether `claim_type` should be an open vocabulary or a fixed enum.
- Whether implicatures ("not the worst part of the week" ⇒ something is worse) deserve units. Here it is a flag; see `rf_02`.
- How referents get merged across transcripts (this one has a single transcript).
- The cost/benefit of the proposition-level audit at scale. It roughly doubles the extraction work.
- Whether `quantity` should be a structured sub-object (as here) or left in the claim text.
