Slice 105 - Transcript Source Runtime Boundaries
Scope#
Split the transcript source runtime by responsibility without changing the
public TranscriptSourceRuntimeAdapter behavior.
Why Now#
After slice 104, integrations/sources/transcripts/runtime.py is the largest
production module. It mixes the adapter port, transcript path resolution,
JSONL reading, Pydantic edge models, known-provider entry normalization,
prompt rendering, and truncation. That shape works today, but it makes the
next transcript-source change feel like editing a grab bag.
Cosmic Python chapter 04 describes the service layer as the main way into an app and separates orchestration logic from interfacing code. Chapter 10 says commands capture intent and should fail noisily. Applied here: the source runtime adapter is the command-facing integration edge; the mechanics behind it should be named by reason to change.
In Scope#
- Keep
TranscriptSourceRuntimeAdapteras the package export. - Move Pydantic transcript JSON and runtime entry models to
models.py. - Move path resolution to
paths.py. - Move unavailable diagnostics to
errors.py. - Move JSONL file reading to
reader.py. - Move line-to-entry normalization to
entries.py. - Move prompt-facing text rendering and tail truncation to
rendering.py. - Add an architecture guard so the adapter does not regrow parsing/rendering mechanics.
Out of Scope#
- New transcript providers.
- Cursor transcript support.
- A different normalized transcript event schema.
- Sync ledger behavior changes.
- Raw provider transcript browsing in the viewer.
Verification#
- Focused transcript runtime tests.
- Focused sync/ingest prompt test proving transcript runtime still reaches lifecycle prompts.
- Architecture test for transcript runtime module boundaries.
- Full pytest and ruff after docs updates.