# Integration: Seriatim ## Purpose Define the Seriatim adapter contract used by `merge`, `normalize`, `trim`, and `render`. ## Adapter Boundary Interface: - `seriatim.Runner` - methods: - `Run(ctx, MergeRequest)` - `Normalize(ctx, NormalizeRequest)` - `Trim(ctx, TrimRequest)` - `Render(ctx, RenderRequest)` Primary implementation: - `internal/adapters/seriatim/SubprocessRunner` Execution modes: - `seriatim merge` - `seriatim normalize` - `seriatim trim` - `seriatim render` ## Request/Result Contracts - `MergeRequest`/`MergeResult`: multi-input merge to base transcript, optional report. - `NormalizeRequest`/`NormalizeResult`: transcript normalization with explicit schema. - `TrimRequest`/`TrimResult`: transcript trimming with required keep selector. - `RenderRequest`/`RenderResult`: transcript-to-markdown rendering with explicit format and render booleans. Results include output/log/config paths, timing, exit code, and metadata. ## Validation and Failure Semantics Runner construction validates: - binary presence; - timeout > 0; - supported output schema (`seriatim-minimal|seriatim-intermediate|seriatim-full`); - non-negative coalesce gap. Invocation fails on: - missing required request paths/inputs; - invalid normalize schema override; - unsupported render format; - subprocess failure; - invalid JSON outputs for merge/normalize/trim; - missing `segments` array for normalize/trim transcript outputs; - empty render output files. When report paths are provided/enabled, report files must parse as JSON. ## Deterministic Behavior - argument ordering is deterministic per command construction. - merge env overrides are explicit (`SERIATIM_*`) and only emitted when configured. - generated invocation YAML (`seriatim.generated.v1`) is emitted when requested. - adapter does not write manifests or choose stage inputs. ## Config Mapping Config fields consumed through runner/stage wiring are under `pipeline.seriatim.*` and `pipeline.render.*`. Maintained examples with Seriatim config: - `examples/pipeline.full.annotated.yml` - `examples/pipeline.production.yml`