---
name: oral_history_basics
description: "Run an oral history project from scope to deposit: define the project, recruit narrators, settle informed consent and release choices in plain language, plan sessions around open prompts, record with a primary and a backup recorder in a quiet room, produce a transcript and a time-indexed summary, give the narrator a review step, and deposit the recording, transcript, and signed forms with a repository under clear access terms. Use when a project needs to create new first person accounts of the past as primary sources for preservation and future use."
metadata: { "includeInPrompt": true }
---

# Oral History Basics

## Purpose

Create a permanent, usable record of a narrator telling about past experience in the narrator's own words. The work runs in a fixed order: define the scope, find a repository before recording starts, recruit narrators for the relevance of their experience, do background research, settle consent and release choices before the microphone is on, record well, back the files up the same day, transcribe or index the session, let the narrator review, and deposit everything together. An oral history that cannot be found, played, or legally shared later has failed at its main job, so preservation and permission are part of the interview work, not paperwork after it.

Scope:
- interview-technique is recorded interviews for video and podcast narrative editing, where the recording is raw material to be cut into a story. This skill records sessions to preserve them whole as primary sources, with editing limited to agreed redactions.
- field-notes-basics is observation notes written about events and settings the note taker witnesses. This skill creates a recorded account with a narrator, not notes about a scene.
- archival-research-basics is using existing archives to answer a question. This skill creates primary sources and deposits them, so a later archival researcher has something to use.
- customer-interviews is product discovery, where interviews test whether a product idea fits a need. This skill records experience and reflection on the past for preservation, not product decisions.
- This skill is the full project method itself: scope, narrators, consent and release, session plan, recording, transcript and time-indexed summary, narrator review, and deposit with stated access terms.
- Verification note, 2026-10-22: the Oral History Association Principles and Best Practices text (adopted October 2009) was opened in full at https://oral-history.ir/enshow.php?page=post&id=4193 and supported the spine of this skill: contact a repository early, choose narrators for relevance, do background research in primary and secondary sources, hold a non-recorded pre-interview meeting, explain consent and release there, record a lead at the start of each session, agree session length in advance, work in a quiet room, secure a signed release after a session or at the end of the last session, and have repositories make transcripts, indexes, and time tags. The same best practices text, reprinted by the American Library Association, was opened at http://www.ala.org/lirt/oral-histories-resources and matched on pre-interview, interview, and post-interview points. The Oral History Association glossary was opened at https://oralhistory.org/best-practices-glossary/ and supported the definitions used here: informed consent documents that a narrator was given the information needed to decide, and does not itself cover copyright; an index or time log links a short summary of a section to the timestamp where that section starts, and differs from a word for word transcript; a deed of gift transfers materials or rights without reciprocal compensation; formal agreements include Creative Commons licenses, deeds of gift, nonexclusive licenses, permission to use agreements, and transfer of copyright; closed records stay listed in a collection but are withheld until a set period expires; and absolute anonymity is a high standard that is rarely offerable. The Montana State University Library oral history handbook page on release forms and consent, opened at https://guides.lib.montana.edu/oral_history/release_forms, supported the release as a formal agreement among interviewer, narrator, and archive that establishes rights and how the recording may be used, the point that some archives combine consent and copyright release in one form, the practice of also asking for recorded verbal permission at the start, and the advice to sign before the interview rather than presenting paperwork as a surprise after it. The James Madison University guide, opened at https://guides.lib.jmu.edu/c.php?g=321982&p=8551131, supported the stage order used here, backing up WAV files and making MP3 access copies, giving the narrator the transcript to review, handling redactions by muting audio and documenting them in an editorial note, and the deposit package list in step 11. The Utah State University recording guide, opened at https://libguides.usu.edu/c.php?g=1428499&p=10599217, supported the recording specifics: a backup recording device, WAV at 48 kHz to 96 kHz with 24-bit depth presented there as archival quality, a quiet location away from traffic and air conditioning, microphones 6 to 12 inches from the speaker, headphone monitoring, a spoken identifying statement at the start, avoiding lossy formats for the master, a consistent file naming scheme, storing files in three places, and its estimate of about 1 GB per hour for 48 kHz, 24-bit WAV. The Binghamton University Libraries deposit guidelines, opened at https://libraryguides.binghamton.edu/c.php?g=1141947&p=9195220, supported one real deposit pattern: consent forms required to archive and make interviews accessible, raw unprocessed recordings required with WAV preferred, a file name in the form last name and first name joined, then an underscore, then the date as YYYYMMDD, plus a project description, per interview metadata, and a transcript required for accessibility. What was NOT verified: no jurisdiction specific legal requirement was checked, so nothing here states what the law requires in a given place, and consent and release material is written as plain language choices to settle with each narrator, not as legal advice; copyright statements are limited to what the Association and Montana State pages above state in general terms, with no case law or statute text opened; institutional review board treatment was not relied on, because the guides opened differ in how they frame it and projects attached to a university should ask that institution directly; no specific repository policy beyond the Binghamton example was checked, so deposit requirements in step 11 are a preparation list, not a promise that a given archive will accept a collection on those terms; no transcription service, remote recording platform, or automated transcription accuracy figure was checked or is claimed; video practice was not verified beyond noting audio is the preservation core here.

## Workflow

1. Define the scope in writing before contacting anyone.
   - Write one paragraph that states: the subject and time period, whose experience the project needs, roughly how many narrators and sessions, what the finished collection is for, and where it is meant to live long term. Vague scope produces interviews that wander and a collection nobody can describe.
   - Set the boundaries out loud in that paragraph: topics in, topics out, languages the project can record and transcribe, and any subject the project is not equipped to handle well, such as recent trauma with no support plan.
   - Name who does each job, even if one person holds several: project lead, interviewer, transcriber or indexer, and the person who handles files and forms. A gap here usually shows up later as missing releases or unbacked up audio.
   - Set a realistic session count and length. The Association guidance treats a session as a substantial sitting, commonly around one to two hours, agreed in advance. Plan fewer, fuller sessions over many short ones.
   - Write the completion test now: a session counts as done only when the recording, the session log, the signed forms, and the transcript or index all exist and agree with each other.

2. Choose the repository early and record its terms.
   - Contact a repository with the capacity to preserve the recordings and make them accessible before the first interview, not after a box of files exists. A university archive, a public library special collections unit, a historical society, or a well run digital archive can all fit, if the collecting focus matches the project.
   - Ask the repository, in writing where possible: what audio format and file naming it wants, which consent and release forms it requires and whether it supplies its own, what metadata fields it needs per interview, whether it accepts restrictions such as closed periods, and how access is given in practice (reading room, online, on request).
   - Record the answers in the project file. If the repository wants raw unprocessed WAV files, or a name pattern such as the Binghamton pattern cited in the verification note, the recording and naming steps below follow that instruction over any default in this skill.
   - If no repository will take the collection, say so in the scope document and decide who holds the files, on what storage, with what access rules. Do not promise narrators a permanent archive the project does not have.

3. Recruit narrators for relevance, and keep a selection record.
   - List candidate narrators by what they directly experienced, not by availability alone. The Association best practices choose narrators based on the relevance of their experience to the subject.
   - Aim for a cross section within the scope: different roles in the same events, different periods, and people whose accounts may disagree. A collection of near identical vantage points is thin evidence later.
   - Keep a simple selection log: name or code, how the narrator was identified, why the experience fits the scope, contact state, and outcome (agreed, declined, no reply, deferred). Declines are recorded without pressure or repeated chasing.
   - First contact is an introductory letter or email that states the focus and purpose of the project, who is running it, what taking part involves, where the recording would be kept, and that the person can decline or stop at any point. Follow up once by phone or email.
   - Note access needs and preferences at first contact: language, hearing or mobility needs, preferred place and time of day, and anyone the narrator wants present. Sort these before the session, not during it.

4. Do background research and hold a pre-interview meeting.
   - Research the person, the topic, and the wider context in primary and secondary sources before drafting questions. Good follow up questions come from preparation, and narrators can tell when no preparation happened.
   - Hold a non-recorded pre-interview meeting or call. Cover: the project purpose, likely topics, how the session will run, how long it will last, what happens to the recording afterward, and the consent and release choices in step 5. Ask what topics the narrator thinks matter and what the narrator does not want to discuss.
   - Treat consent as a conversation that starts here and continues, not a signature collected at the door. The Montana State guide makes the same point: explain the form, walk through it, and avoid presenting paperwork as a surprise after recording.
   - Agree the session logistics at the pre-interview: place, date, start time, agreed length, who else will be present, and a plan for breaks.
   - Leave the narrator a written summary of the project and the draft release choices to sit with. A decision made with time to think is a better decision, and it reduces withdrawals later.

5. Settle informed consent and release choices in plain language.
   - Separate two things that are often merged on one form and confused in conversation. Informed consent records that the narrator was given the information needed to decide whether to take part. Rights and release choices record what may be done with the recording afterward, and any transfer or license of rights. Some archives combine them in a single agreement; the project should still explain them as two separate decisions.
   - Cover, in plain words, before recording: the project purpose; that taking part is voluntary; that the narrator may decline any question, pause, or stop and withdraw at any time; that the session will be recorded; where the recording, transcript, and forms will be kept; who will be able to listen or read, and through what route; that the words may be quoted in research and other outputs if the release allows it; and how to contact the project later with a change of mind or a question.
   - Offer release choices as a short menu the narrator picks from, and record the pick exactly. Plain options that cover most projects: open access with no time limit; access after a set closed period (a stated number of years or a stated date); access in the repository only, with no online posting; use under a stated name, or under a pseudonym where the repository allows it; permission for research and education use only, or wider use including publication and broadcast; and any named topics or passages restricted or redacted.
   - State the limits honestly while offering those choices. Anonymity is hard to guarantee in a life story full of identifying detail, and confidentiality cannot be promised absolutely, for example where a court order compels disclosure. Do not promise control over later interpretation, total secrecy, or benefits the project cannot deliver.
   - Record consent in the way the repository requires. Common patterns in the guides opened are a signed form before the interview, plus a short recorded verbal confirmation at the start of the session asking whether the interviewer has permission to record. If a narrator cannot sign, follow the repository instruction for a recorded oral statement instead, and note why in the session log.
   - This step is method, not legal advice. Legal requirements for consent, copyright, privacy, and defamation vary by place and by project type, and projects with funding, a university affiliation, minors, or sensitive topics should get local advice and use the repository form where one exists. Where the narrator's rights in the interview are described, describe them as the agreement states them, not as a general legal claim.

6. Build the session plan around open prompts.
   - Draft an interview guide, not a script: a topic outline in a sensible order (often chronological within a life or an event sequence), with one open prompt per topic and two or three possible follow ups noted lightly underneath.
   - Write prompts that invite telling, not prompts that supply the answer. Workable shapes: tell me about, describe, walk me through, what happened next, how did that change things, who else was there. Avoid yes or no prompts as openers, and avoid prompts that embed a conclusion the narrator is then pushed to confirm or fight.
   - Plan the arc: an easy opening topic that lets the narrator settle, the core topics in the middle while energy is high, harder topics only after trust is built and never as an ambush, and a closing section that asks what else should have been asked and what the narrator wants on the record.
   - Note factual anchors to check gently if they do not surface: dates, place names, spellings of names of people mentioned, and the narrator's role at each stage. Spelling of names matters for the transcript and the index.
   - Keep the guide to a length that fits the agreed session. If the topics need more time, plan a second session rather than rushing the first.

7. Set up recording: two recorders, checked levels, quiet room.
   - Use the best recording setup available within the project means, and know it before the session. Test the full chain at home: recorder, microphones, cables, headphones, batteries, and storage cards.
   - Record on a primary recorder and run a second, independent backup recorder at the same time. The Utah State guide directs a secondary device to guard against failure. The backup can be simpler than the primary; its job is to exist when the primary file does not. Check both files after the session, not just the primary.
   - Record the master in an uncompressed format. Where the repository gives no other instruction, record WAV at 48 kHz and 24-bit as a workable archival setting, inside the 48 kHz to 96 kHz WAV range the Utah State guide presents for oral history. Do not record the only copy as MP3 or another lossy format. Access copies come later, in step 10.
   - Choose a quiet indoor room: away from traffic, air conditioning, refrigerators, ticking clocks, and rooms with hard echo where a softer furnished room is available. Turn off phones and notifications, close windows, and note any unavoidable noise in the session log with the time it occurred.
   - Place the microphone 6 to 12 inches from the narrator, slightly off axis to soften plosives, with a second microphone or a well placed single recorder for the interviewer voice. The interviewer voice matters: a transcript with inaudible questions is hard to follow.
   - Set levels on speech, not on a silent room. Have the narrator speak at normal volume, set gain so peaks sit comfortably below clipping with headroom for laughter or emphasis, then lock the setting if the device allows it. Monitor on closed headphones for the first minutes and at intervals through the session, listening for hum, handling noise, rustle, and a recorder that has stopped.
   - Carry spare batteries or a mains lead, spare storage, and a paper session log. Power and storage failures end more sessions than microphone choice does.

8. Run the session: lead slate, open prompts, and silence.
   - Start the recording, then speak a lead slate before the first question: narrator name (or agreed pseudonym), interviewer name, date, place, project title, session number, and a one line statement of the session subject. The slate keeps the recording self identifying if file names are lost, a point both the Association practices and the deposit guides make.
   - Confirm consent on the recording in one short exchange, as settled in step 5, then begin.
   - Ask one prompt at a time, then stop talking. Silence after an answer is a working tool: narrators often continue after a pause with the more considered part of the account. Filling every pause with the next question trains short answers.
   - Follow what the narrator gives. Use short neutral follow ups (what happened then, can you give an example, what did that look like day to day) and return to the guide when a topic is spent. Do not argue with an account, correct memory mid flow, or finish the narrator's sentences.
   - Keep interviewer talk low. Agreeing sounds, overlapping speech, and long interviewer stories all damage the recording and the transcript, and overlapping speech is hard to transcribe accurately.
   - Watch the agreed length and the narrator's energy. Offer a break at natural topic boundaries. If the narrator tires, close the session cleanly and arrange a continuation rather than pushing through.
   - Handle difficult material with care: remind the narrator that any topic can be skipped, pause or stop recording when asked, and never press for detail the narrator has declined. If the narrator shares something and immediately asks for it to stay off the record, note the time, honor it, and carry the restriction into steps 10 to 12.
   - Close on the recording: thank the narrator, state that the session has ended, note any follow up agreed (photographs to identify, names to confirm, a second session), and stop both recorders only after the closing words are complete.

9. Handle files and the session log the same day.
   - Copy the master files off both recorders as soon as possible after the session, without editing, renaming on the device, or deleting the card copies until the transfers are verified.
   - Apply the file naming scheme from step 2 at transfer. If the project has no repository pattern, use a consistent scheme that carries narrator, date, and session, for example: lastname_firstname_YYYYMMDD_session01_master.wav and the same stem with _backup for the second recorder. Keep one scheme for the whole project.
   - Store the masters in three places before doing any other work: the project working drive, a separate local drive, and an off site or institutional store. Verify each copy by file size and by playing a short section from the start, middle, and end.
   - Complete the session log while memory is fresh: date, place, start and end time, duration, narrator and interviewer names, recorder and microphone used, file names created, topics covered in order, any noise or interruption with its time, any restriction or off record request with its time, and any names that need spelling checks.
   - Log the consent state in the same record: form signed before, during, or after the session, recorded verbal confirmation present or absent, release choice picked, and where the signed form is filed.

10. Transcribe, then build the time-indexed summary.
    - Produce a transcript where the project and the repository call for one. Transcribe what was said, mark unclear passages with a timestamp and an inaudible note rather than guessing, keep speaker labels consistent, and record the transcription conventions used (for example whether false starts and fillers are kept) at the top of the transcript.
    - Treat the transcript as a close guide to the recording, not a replacement for it. The recording stays the primary source, and any cleaned up wording in the transcript should follow the stated conventions, not silent rewriting.
    - Build a time-indexed summary for every session, transcript or not. One entry per topic segment: a timestamp in HH:MM:SS for where the segment starts, and a one or two line summary of what is discussed, including names, places, and events in the words a later searcher would use. The Association glossary defines this log as a summary linked to a timestamp, distinct from the transcript, and it is often the first thing a researcher uses.
    - Add a short abstract for the whole interview: two to five sentences on who the narrator is in relation to the subject, the main periods and topics covered, and anything unusual about the session, such as a second narrator joining or a topic restricted.
    - Make access copies from the master for listening and review, commonly MP3 for audio. Access copies are working files. The master stays raw and unprocessed, because a repository may require the raw copy, as in the Binghamton guidelines cited above.
    - Run the index checker in the Operating Rules on every index file before the narrator review step. Fix every error it reports. A timestamp that runs past the session length, a repeated timestamp, or an entry with no real summary all break later searching.

11. Give the narrator a review step, then finalize the forms.
    - Offer the narrator the transcript or index, and the recording if wanted, with a stated review window and a clear way to respond. The James Madison guide includes narrator transcript review as a standard stage, and the Association practices include, where possible, an opportunity for the narrator to approve the oral history before public release.
    - Explain what review can change and what it cannot. Corrections of fact and spelling, added clarifications marked as additions, and requests to restrict or redact specific passages are all workable. Rewriting the spoken account into a different account is not transcription, and any substantive change should be documented rather than blended in silently.
    - Apply agreed redactions properly: mute the passage in an access copy, keep the master handling consistent with the agreement and the repository instruction, replace redacted transcript text with a bracketed note, and record each redaction, with its timestamp and reason in general terms, in an editorial note attached to the transcript.
    - Confirm the final release after review. Where the project took consent before recording, the release signed after the last session, or re confirmed after review, is the version that governs deposit. File the signed form, and any restriction note, with the session records, and update the session log to match.
    - Send the narrator a copy of the finished recording and transcript or index where the agreement allows it, with thanks and a note of where the interview will be kept and how the narrator can reach the project or repository later.

12. Deposit the collection with clear access terms.
    - Assemble the deposit package per interview: master recording and backup disposition note, access copy if the repository wants one, transcript, time-indexed summary and abstract, signed consent and release forms, session log, and metadata (narrator name or pseudonym, interviewer, date, place, duration, subjects, language, restriction state). Add the project description for the collection as a whole: project title, who ran it, purpose and scope, dates, and a narrator list.
    - Write the access terms per interview in the metadata and the transmittal note, using the exact release choice from step 5 and step 11: open, closed until a stated date, repository use only, named restrictions, or pseudonym conditions. Terms that live only in a signed form nobody copies into the catalog record will be missed later.
    - Transfer by the repository route (upload, drive delivery, or its submission form), get a receipt or accession confirmation, and record it in the project file with the date and the collection identifier the repository assigns.
    - Keep the project copies after deposit until the repository confirms the files play, the forms are legible, and the metadata is accepted. Then follow the project retention decision from step 2 for the working copies, and record where the preservation copy now lives.
    - Close the project with a short report: sessions completed, deposits confirmed, any interviews still restricted or pending a narrator decision, and any follow up promised. Unfinished items named in a report get finished. Unfinished items left in memory do not.

## Output Contract

Deliver these items, in this order:

1. Scope document: the paragraph from step 1, plus roles, session plan totals, and the completion test.
2. Repository note: the repository chosen or the interim holding decision, with its format, naming, form, metadata, restriction, and access instructions recorded as given.
3. Narrator log: the selection record from step 3, with fit reason and outcome per narrator, and contact state kept current.
4. Consent and release set: per narrator, the plain language information given, the release choice picked in the narrator's own confirmed terms, the signed form location, and the recorded verbal confirmation state from the session log.
5. Session package, per session: master and backup file names with durations, session log, interview guide used, transcript if made, time-indexed summary, and abstract.
6. Index checker output: the full output of oral_index_check.py for each index file. On the worked fixture in the Operating Rules the headline numbers are: entries: 9, first_stamp: 00:00:00, last_stamp: 00:56:30, duration: 01:02:00, errors: 0, warnings: 0, verdict: PASS.
7. Narrator review record: what was sent for review, the window given, corrections and redaction requests received, how each was handled, and the editorial note where redactions exist.
8. Deposit record: package contents per interview as transferred, the access terms recorded per interview, the transmittal date and route, and the repository receipt or accession identifier.
9. Limits: anything the project did not cover, stated plainly (for example a narrator who declined review, a session with no backup file and the reason, a topic the scope excluded, or a repository term the project could not meet).

## Operating Rules

1. No recording before consent is explained. A session recorded first and papered later breaks trust and can make the recording unusable to a repository.
2. The repository instruction beats the project default. Format, naming, forms, and metadata follow the deposit target named in step 2, and any conflict is settled before recording, not at transfer.
3. Two recorders, every session. A session with only one working file is noted as an exception in the session log and in the Limits item, with the reason.
4. The master never gets edited. Redactions, cleanup, and clips happen on copies, and every change to an access copy is matched by a note in the session record.
5. Restrictions travel with the files. Every restriction, closed period, pseudonym, and off record request appears in the session log, the metadata, and the deposit transmittal, not only in the signed form.
6. Open prompts, low interviewer talk, and silence are the default session discipline. Leading prompts, argued corrections, and filled pauses are defects to note and fix in the next session, not a style choice.
7. Same day backup, same week paperwork. Files are copied and verified the day of the session, and the session log is completed while the session can still be remembered accurately.
8. Consent and release language in this skill is plain language method guidance, not legal advice. Projects use the repository form where one exists and get local advice where the topic, funding, or setting raises legal questions.
9. Use the checker below for index files. Save it as oral_index_check.py, build the sample index exactly as shown, run it, and put its full output in the deliverable as item 6 of the Output Contract. Report counts from its output, not from reading the index by eye.

### Index checker (oral_index_check.py)

Run: `python3 oral_index_check.py --duration 3720 sample_index.txt` after saving the checker below as oral_index_check.py and saving the sample index below as sample_index.txt in the same folder. The duration flag is the session length in seconds (3720 is 62 minutes). Run it on a real index with `python3 oral_index_check.py --duration SECONDS INDEX.txt`.

Sample index (sample_index.txt):

```text
# Time-indexed summary, narrator session 1, recorded 2026-10-20
00:00:00 | Lead slate: narrator name, interviewer name, date, place, project title
00:01:10 | Childhood home and school years in the mill district
00:08:45 | First job at the textile mill, training and shift patterns
00:17:30 | Daily work on the loom floor and relations with supervisors
00:25:10 | Union organizing in the late 1970s, meetings and leaflets
00:33:40 | Mill closure announcement and the final working week
00:41:20 | Retraining and community center work after the closure
00:49:55 | Looking back on the mill years and what changed locally
00:56:30 | Closing remarks, photographs named, and follow up topics agreed
```

Expected output for the fixture run:

```text
file: sample_index.txt
entries: 9
first_stamp: 00:00:00
last_stamp: 00:56:30
duration: 01:02:00
errors: 0
warnings: 0
verdict: PASS
```

The fixture is built to pass clean: nine entries in rising order inside a 62 minute session, the first at the slate, each summary at three words or more, and no gap over 600 seconds. The checker also fails a file on purpose in testing: a repeated timestamp, a timestamp past the stated duration, and a one word summary in a four line test file produced three errors and verdict: FAIL, which confirms the ordering, duration, and summary checks all fire.

oral_index_check.py (plain Python, standard library only). Save this code as oral_index_check.py:

```python
#!/usr/bin/env python3
"""Check a time-indexed oral history summary file.

Save this file as oral_index_check.py, then run it with plain Python:

  python3 oral_index_check.py --duration 3720 sample_index.txt

The index file is plain text, one entry per line:

  HH:MM:SS | Short summary of what is discussed from that point

A two-part MM:SS form is also accepted for sessions under one hour.
Blank lines and lines starting with # are ignored. Timestamps must
increase through the file, stay inside the session duration, and
each entry needs a summary of at least three words. Gaps longer
than 600 seconds between entries are flagged, because a long
unindexed stretch is hard for a later reader to search.

The verdict is PASS when there are no errors. Warnings alone still
print PASS, with the warnings listed above the counts.
"""
import argparse
import re

STAMP = re.compile(r"^(\d+):(\d{2})(?::(\d{2}))?$")


def parse_stamp(text):
    m = STAMP.match(text.strip())
    if not m:
        return None
    if m.group(3) is not None:
        hours, mins, secs = int(m.group(1)), int(m.group(2)), int(m.group(3))
    else:
        hours, mins, secs = 0, int(m.group(1)), int(m.group(2))
    if mins > 59 or secs > 59:
        return None
    return hours * 3600 + mins * 60 + secs


def fmt(seconds):
    return f"{seconds // 3600:02d}:{(seconds % 3600) // 60:02d}:{seconds % 60:02d}"


def check(path, duration):
    errors = []
    warnings = []
    entries = []
    with open(path, encoding="utf-8") as fh:
        lines = fh.readlines()
    for lineno, raw in enumerate(lines, 1):
        line = raw.strip()
        if not line or line.startswith("#"):
            continue
        if "|" not in line:
            errors.append(f"line {lineno}: missing | separator")
            continue
        stamp_text, summary = line.split("|", 1)
        seconds = parse_stamp(stamp_text)
        if seconds is None:
            errors.append(f"line {lineno}: bad timestamp {stamp_text.strip()!r}")
            continue
        summary = summary.strip()
        if len(summary.split()) < 3:
            errors.append(f"line {lineno}: summary under three words")
            continue
        if duration is not None and seconds > duration:
            errors.append(
                f"line {lineno}: timestamp {fmt(seconds)} past duration {fmt(duration)}"
            )
            continue
        entries.append((lineno, seconds, summary))
    for prev, cur in zip(entries, entries[1:]):
        if cur[1] <= prev[1]:
            errors.append(
                f"line {cur[0]}: timestamp {fmt(cur[1])} not after {fmt(prev[1])}"
            )
        elif cur[1] - prev[1] > 600:
            warnings.append(
                f"gap {fmt(prev[1])} to {fmt(cur[1])} is {cur[1] - prev[1]}s, over 600s"
            )
    if entries and entries[0][1] > 60:
        warnings.append(f"first entry starts at {fmt(entries[0][1])}, after 00:01:00")
    print(f"file: {path}")
    print(f"entries: {len(entries)}")
    if entries:
        print(f"first_stamp: {fmt(entries[0][1])}")
        print(f"last_stamp: {fmt(entries[-1][1])}")
    if duration is not None:
        print(f"duration: {fmt(duration)}")
    for warning in warnings:
        print(f"WARNING {warning}")
    for error in errors:
        print(f"ERROR {error}")
    print(f"errors: {len(errors)}")
    print(f"warnings: {len(warnings)}")
    print(f"verdict: {'PASS' if not errors else 'FAIL'}")
    return 0 if not errors else 1


def main():
    parser = argparse.ArgumentParser(description="Check a time-indexed oral history summary.")
    parser.add_argument("index_file")
    parser.add_argument("--duration", type=int, default=None,
                        help="session length in seconds, for example 3720")
    args = parser.parse_args()
    return check(args.index_file, args.duration)


if __name__ == "__main__":
    raise SystemExit(main())
```
