# Session Notes — `attestation-fable-5-max-claude-code`

Factors that shaped this session's output, for anyone comparing artifacts
across models/harnesses/effort levels.

## Model & configuration

- **Model:** `claude-fable-5` for the entire session. **No safeguard
  downgrade occurred** — Fable 5 sessions can fall back to Opus 4.8 when
  safety classifiers decline a request, but no refusal or fallback event
  happened here, so no restore step was ever needed. The user ran `/model`
  once mid-session (before the voice-fix turn) and **kept** Fable 5.
- **Effort:** `/effort` was set to **max** ("this session only") as the very
  first action, before any task prompt, and never changed. Output therefore
  reflects Fable 5's deepest reasoning setting throughout — long deliberate
  thinking blocks, extensive self-verification (visual inspection of 20+
  rendered frames, numeric audio-level checks), and willingness to discard
  and re-run full renders over small defects (a stale colophon credit, 0.8 dB
  of audio headroom).
- **Thinking:** always-on (a Fable 5 property); no fast mode.

## Harness

- **Claude Code CLI** on macOS 26.5 (arm64), zsh, in an initially empty git
  repo. No `CLAUDE.md` / project instructions existed at start.
- **Single agent, serial.** No subagents were spawned (no Agent-tool /
  Explore / Plan / general-purpose delegation). Within turns, independent
  tool calls were batched in parallel (e.g., three recon commands at once;
  paired image Reads), but there was never more than one model instance.
- **Model/compute overlap:** the four full video renders ran as *background
  Bash tasks*; the model continued working (README edits, code fixes) while
  ffmpeg/Kokoro ran, and was re-invoked by harness notifications on
  completion. One background render was deliberately killed (`pkill`, exit
  144) to fix the colophon before re-launching.
- **Harness injections observed** (system-generated, not user input):
  periodic task-tool usage reminders; a date-rollover notice (2026-07-29 →
  2026-07-30 — the session crossed midnight); background-task completion
  notifications explicitly marked "NOT USER INPUT"; and periodic automated
  policy reminders. A foreground `sleep` was blocked by harness policy
  (progress was read from the task's output file instead).
- **Sandboxed Bash** with a session scratchpad; network access worked
  (mise/uv/PyPI/Hugging Face downloads) without sandbox overrides. The
  harness's task list (TaskCreate/TaskUpdate, 6 tasks) was used for progress
  tracking.

## Memory / persistence

- A persistent file-based memory directory was available to the model, but
  **no memories were recalled and none were written** — the session was
  self-contained, so nothing met the bar for cross-session persistence.
- **No context compaction/summarization was observed**; the full
  conversation stayed in context (Fable 5's 1M window; harness noted a
  1-hour prompt-cache TTL). The TTS cache (`dist/build/tts/`, keyed by
  backend|voice|speed|text) is the only on-disk state that made re-renders
  cheap across turns.

## External dependencies affecting reproducibility

- **Kokoro-82M** neural TTS: ~330 MB model auto-downloaded from Hugging Face
  on first use, plus spaCy's `en-core-web-sm` fetched by misaki mid-run.
  Voice output depends on these exact artifacts.
- **Apple system fonts** (New York, Baskerville, Avenir Next, Menlo) — the
  visuals require macOS; Georgia/Helvetica fallbacks exist in code.
- **macOS `say`** remains as fallback narrator; final film does not use it.
- mise **verified GitHub artifact attestations** for the uv tarball during
  setup — noted because it is the video's subject occurring in its own
  toolchain, and because it means the toolchain trusts what this repo's film
  is about.

## Decisions & defects that materially shaped the output

1. **Font rendering:** Apple's New York variable font silently drops
   `— – - = +` under FreeType/Pillow; running text moved to Baskerville
   (New York retained for display headlines only). Menlo lacked `⟷ ‖`
   (replaced with ASCII).
2. **ffmpeg `-shortest`** trimmed the MP4 to the *subtitle* stream's last
   cue, cutting the final 4 seconds (the closing seal + colophon). Removed —
   audio/video are equal-length by construction.
3. **Narrator swap** (turn 2): Samantha (concatenative) → Kokoro `af_heart`
   at 0.95×; all scene/subtitle/beat timing re-derived automatically because
   measured narration duration is the pipeline's master clock.
4. **Prosody direction** (turn 3): per-sentence `speed` (0.80–1.0) and
   inline `<pause:S>` markers synthesized as true silence between separately
   generated fragments — Kokoro has no SSML, so delivery is directed through
   pace, punctuation, and silence.
5. **Original score** in D minor generated in NumPy from the narration
   schedule; "V for Vendetta" was treated strictly as a *mood* reference
   (dark strings, patient builds, resolute finale) — no melodic or audio
   material from the film's soundtrack was used or reproduced.
6. **Audio headroom:** Kokoro's higher crest factor pushed the first mix to
   −0.5 dBFS; final master ceiling is −1.3 dBFS for AAC true-peak safety.
7. Three complete films were rendered and superseded (7:15 Samantha → 7:27
   Kokoro → 8:10 directed + scored). Only the last survives in `dist/`.

## What was *not* done

- No git commits (user never asked; tree left dirty by design).
- No web fetches/searches; everything from local tools, PyPI/HF packages,
  and built-in knowledge. Pricing in `metadata.toml` came from the harness's
  `claude-api` skill reference (loaded in the final turn), not memory.
- No use of external media assets of any kind — every frame and every audio
  sample is synthesized in this repo's code.

## Accounting caveats

The harness exposes no token/timing counters to the model. All duration,
token, and cost figures in `metadata.toml` are **good-faith reconstructions**
from the conversation record (file timestamps, render logs, message counts,
typical vision-token sizes) and are marked as estimates there. Rates are the
published Claude Fable 5 prices current as of 2026-07-30.
