# Dictation fixtures

Persistent, committed test recordings. These are the regression corpus for the
Whisper pipeline — `scripts/regress_whisper.sh` iterates over them and compares
live output against the golden transcripts.

## File layout

Per fixture, three files share a common stem:

| File                   | Required | Purpose                                                           |
|------------------------|----------|-------------------------------------------------------------------|
| `<name>.m4a`           | yes      | Raw AAC recording as produced by `scripts/dictate.sh` / the watch |
| `<name>.expected.txt`  | yes      | Golden transcript, hand-reviewed — the regression target          |
| `<name>.notes.md`      | no       | Short description: what this case exercises, any gotchas          |

## Naming convention

`<domain>_<topic>[_<variant>]` — all lowercase, snake_case, no spaces:

- `cardio_hocm_valsalva`
- `cardio_hocm_valsalva_quiet`  (same content, low SNR variant)
- `ortho_knie_meniskus`
- `psych_ptbs_flashbacks`

The prefix encodes the medical domain so we can group by specialty.

## Adding a new fixture

1. Record via `./scripts/dictate.sh -n`. Speak a realistic case.
2. Note the case UUID the script prints.
3. Copy `$DATA_PATH/<slug>/open/<case_id>/<timestamp>.m4a`
   → `tests/fixtures/dictations/<name>.m4a`.
4. Extract the transcript from the recording metadata sidecar:
   `jq -r '.transcript.text' $DATA_PATH/<slug>/open/<case_id>/<timestamp>.json`
   → write it to `tests/fixtures/dictations/<name>.expected.txt`.
5. **Review the transcript** — fix any ASR errors by hand. This is the
   golden reference; accept nothing that is actually wrong.
6. Commit the files together.

## What not to commit here

- Personal / real patient data — everything here must be synthetic.
- Long recordings (>2 min) — keep fixtures tight, we want fast regression runs.
- Multiple takes of the same content unless they test a specific variant (noise,
  speaker, tempo).
