Generate a structured markdown transcript from a simulation JSON file. Produces reports/transcripts/<timestamp>_transcript.md with header, turn breakdown table, and annotated Q&A with focus nodes and extracted concepts.
Generates a structured markdown transcript from a simulation JSON file.
reports/transcripts/<timestamp>_transcript.md with three sections:
Most recent simulation:
uv run python scripts/generate_transcript.py
Specific file:
uv run python scripts/generate_transcript.py synthetic_interviews/<filename>.json
Backfill all existing JSONs (adds focus_node_id/focus_node_label to old files):
uv run python scripts/backfill_focus_nodes.py
Identify which JSON file to use:
ls -t synthetic_interviews/*.json | head -1Run the transcript generator:
uv run python scripts/generate_transcript.py <path-to-json>
Report the output path: reports/transcripts/<timestamp>_transcript.md
Optionally show the user the turn breakdown table from the generated file:
sed -n '/## Turn Breakdown/,/## Turn-by-Turn/p' reports/transcripts/<timestamp>_transcript.md | head -30
focus_node_id is stored directly in the JSON.score_decomposition — no manual action needed.focus_node_label shows as — for a specific turn, it means that turn used a conversation-level strategy with no node targeting (e.g. revitalize).Run backfill_focus_nodes.py when:
focus_node_id into existing JSON files (optional — generate_transcript.py resolves it on-the-fly anyway)focus_node_id directly from the JSONThe backfill is idempotent — safe to re-run. Already-patched turns are skipped.
| Script | Purpose |
|---|---|
scripts/generate_transcript.py | JSON → Markdown transcript |
scripts/backfill_focus_nodes.py | Patch focus_node_id into existing JSONs |
reports/transcripts/ | Output directory |
synthetic_interviews/ | Source JSON files |