2.6 KiB
2.6 KiB
Stage: prepare
Purpose
Materialize all required session inputs into canonical local workspace paths and record input provenance in the session manifest.
Inputs and Outputs
Inputs:
session.yml(resolved session config)pipeline.resolved.yml(materialized from resolved pipeline config)speakers.ymlautocorrect.ymlglossary.yml- audio source:
- local (
session.inputs.audio_dirorsession.inputs.audio_files), or - S3 (
session.inputs.audio_s3.prefix)
- local (
Outputs:
inputs/session.ymlinputs/pipeline.resolved.ymlinputs/speakers.ymlinputs/autocorrect.ymlinputs/glossary.ymlaudio/*.flacin session workdirmanifest.Inputsrecords with checksums and source metadata
Boundaries
Owns:
- Input path resolution and validation
- Local copy/materialization of configs and audio files
- S3 audio download to run-scoped spool, then copy into work audio dir
Does not own:
- Transcript generation/processing
- Archive publish behavior
Config Fields Used
session.session_idsession.campaignsession.inputs.speakers_filesession.inputs.autocorrect_filesession.inputs.glossary_filesession.inputs.audio_dirsession.inputs.audio_filessession.inputs.audio_s3.prefixpipeline.workspace.rootpipeline.spool.rootpipeline.storage.s3.bucketpipeline.storage.s3.root_prefix
External Adapters Used
- Object storage backend (
env.ObjectStore) for S3 audio list/download whenaudio_s3is configured.
State and Manifest Behavior
- Ensures workspace layout exists.
- Writes resolved config and input files to canonical
inputs/paths. - Records all prepared inputs into
manifest.Inputs(sorted deterministically by kind/path). - For S3 audio, records
S3Bucket,S3Key,S3Size,S3ETag, andSpoolPathin each audio input record.
Skip and Resume Behavior
- Runner-level skip applies when stage already
succeededand--forceis not set. - Stage itself is deterministic/idempotent for unchanged inputs (
copyFileIfChanged,writeBytesIfChanged).
Failure Behavior
- Fails on missing required files, invalid audio source combinations, no discoverable
.flacfiles, duplicate audio basenames, missing object store for S3 mode, or S3 list/download failures.
Tests to Inspect Before Changing
internal/stage/prepare_test.gointernal/app/session_cli_test.gointernal/config/load_validate_test.go
Architectural Invariants
audio_dir/audio_filesandaudio_s3are mutually exclusive.- Audio files must be
.flac. - Canonical
inputs/*andaudio/*paths are the durable source for downstream stages.