harness/interview.shTalks with the analyst at an interview point, in a folder of its own restored from that leg's checkpoint.
interview.sh [LEG | NN.LEG | --list]. It finds the
closed interview point (default the last), checks its checkpoint is
committed, records the fork in CONTROL/interviews.tsv, and
has protocol_guard.py interview restore the leg's
checkpoint: the analyst's folder, exactly as it stood at the close, into
interview-workspaces/<label>__<fork>/, and the
leg's sessions into a Claude project of the interview's own
(projects/iv-<fork>). The copy's settings shut the
live folder and every other interview's copy, and carry no hooks. It
names the brief and the reply file, and opens
claude --resume <session> --fork-session in the copy,
with the line "This is an interview, not a leg." The analyst may read
and, when asked, write; you may add files to the copy. Nothing reaches
the live run, and no interview reuses another's folder (J, 29 September
2026). Afterwards it copies the fork's transcript to
interviews/<label>__<fork>.jsonl beside the run
and calls publish.sh; .gitignore keeps the
transcript out of git unless the principal investigator commits it.
The principal investigator, after close.sh of a leg that
ended with --cut interview. From the leg handler's chat,
legs.py interview opens the same kind of fork (a copy of
the saved folder, the leg's sessions in a project of its own, a row in
CONTROL/interviews.tsv), and leaves its transcript in the
run's Claude folder (CONTROL/.cc/projects/iv-<fork>/,
not committed); both kinds reach the analyst at stage E2a.
STANDING §2: "nothing said there enters the run unless it comes back
as a reply", the brief's name with -reply added, which the
next leg reads before its first write and answers under rule 13.
Checked against: harness/interview.sh, STANDING-INSTRUCTIONS.md §2, harness/step.sh.