4.8 KiB
4.8 KiB
Stage: prepare
Purpose
Materialize canonical current-session input state and provenance before downstream stages run.
Prepare owns:
- local input file materialization (
inputs/**); - audio input materialization (
audio/**); - previous-session cache hydration (
previous/**) for canonical previous-session artifact sources.
Inputs and outputs
Inputs:
- resolved config/session (
pipeline.yml,session.yml); - session-local input files (
speakers,autocorrect,glossary); - audio source:
- local:
session.inputs.audio_dirorsession.inputs.audio_files; - S3:
session.inputs.audio_s3.prefix;
- local:
- configured enabled Scriptorium artifact inputs (for previous-session requirement scanning);
- remote previous-session current archive state when previous hydration is required.
Outputs:
inputs/session.yml;inputs/pipeline.resolved.yml;inputs/speakers.yml;inputs/autocorrect.yml;inputs/glossary.yml;audio/*.flacin canonical sessionaudio/;- optional
previous/manifest.json; - optional
previous/artifacts/**; - deterministic
manifest.Inputsrecords with checksums and provenance metadata.
Boundaries
Owns:
- input path resolution and materialization;
- S3 audio list/download/copy flow;
- previous-session artifact requirement collection from enabled configured artifacts;
- previous cache lifecycle when requirements exist (clear and rehydrate managed
previous/state).
Does not own:
- transcript or artifact generation;
- analyze-stage source resolution;
- archive commit behavior.
Config fields used
session.session_idsession.previous_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_prefixpipeline.scriptorium.artifacts.<name>.enabledpipeline.scriptorium.artifacts.<name>.inputs.<key>.sourcepipeline.scriptorium.artifacts.<name>.inputs.<key>.required
External adapters used
storage.ObjectStorefor:- S3 audio listing/downloads;
- previous-session current pointer/manifest/artifact object checks and downloads.
State and manifest behavior
- Ensures workspace layout exists.
- Materializes canonical input files and audio files.
- Scans enabled configured artifact inputs for canonical sources:
narratio.previous_session.artifact.<artifact_key>
- If one or more canonical previous-session requirements exist:
- clears managed
previous/state; - hydrates required/optional previous artifacts from the configured previous session’s committed archive current state;
- writes
previous/manifest.jsonand hydratedprevious/artifacts/**; - records hydrated previous inputs in
manifest.Inputswith sourceprevious_session_archive.current.
- clears managed
- If no canonical previous-session requirements exist, prepare does not manage
previous/. manifest.Inputsis sorted deterministically by(kind, path).
Required and optional previous-session behavior
previous_session_idunset:- if any referenced previous artifact is required: fail;
- if all referenced previous artifacts are optional: continue and omit them.
- Previous session archive current pointer or manifest missing:
- if any referenced previous artifact is required: fail;
- if all referenced previous artifacts are optional: continue and omit missing ones.
- Missing required previous artifact object: fail.
- Missing optional previous artifact object: omit.
- Downloaded previous artifacts must validate as non-empty files.
Skip and resume behavior
- Runner-level skip remains authoritative:
- if
preparealready succeeded and run is not forced,preparedoes not run and no hydration/download occurs.
- if
- If
prepareruns (including with--force), it owns managedprevious/state for canonical previous-session inputs.
Failure behavior
- Fails on missing required input files, invalid audio-source combinations, empty/duplicate audio inputs, missing object store for S3 modes, and remote access/download/validation errors.
- For required canonical previous-session inputs, analyze-time missing-input guidance is to rerun:
narratio run-stage --force prepare
Tests to inspect before changing
internal/stage/prepare_test.gointernal/stage/prepare_previous_test.gointernal/artifacts/previous_requirements_test.gointernal/app/runner_test.go
Architectural invariants
audio_dir/audio_filesandaudio_s3are mutually exclusive.- Storage keys are computed by callers using archive/path helpers; storage adapter receives explicit keys.
prepareis the only stage that hydrates canonical previous-session cache state.