# Stage: analyze ## Purpose Execute selected configured Scriptorium artifacts in dependency order and materialize outputs. ## Inputs - configured artifacts from `pipeline.scriptorium.artifacts` - optional selected artifact keys supplied through the stage environment - built-in, configured, extraction, and previous-session source references in artifact inputs Supported source families: - built-ins: `narratio.transcript.*`, `narratio.bounds.session` - prepared stable inputs: `narratio.input.players`, `narratio.input.party`, `narratio.input.glossary` - configured artifacts: `narratio.artifact.` - extraction lanes: `narratio.extraction.` - previous-session cache: `narratio.previous_session.artifact.` ## Outputs - one materialized output per executed configured artifact (`output_path`) - stage metadata describing selected/generated/reused artifacts ## Key Behavior - when Scriptorium is absent or no configured artifact is executable, completes successfully with no outputs and records explanatory metadata. This is not an explicit self-skip: both manifests record success, satisfy publish's prerequisite, and an ordinary later run reuses the result until forced. - builds a runtime artifact catalog containing built-ins, configured artifacts, and configured extraction lanes. Extraction availability is hydrated only from compatible successful extraction evidence. - uses enabled configured artifacts by default. An explicit `--artifacts` selection is a one-invocation override: it makes exactly the named configured artifacts executable even when disabled, and does not automatically include dependencies. A selected artifact's dependencies must instead already be available to the catalog. - marks non-executable configured artifacts as reusable when output files already exist. - validates selected artifact dependency order (cycle-safe topo ordering). - resolves required/optional inputs per artifact source definition. - omits an unavailable optional input; an unavailable required input fails. - resolves prepared stable input sources from `inputs/*.yml` materialized by `prepare`. - resolves previous-session sources from local `previous/` cache only. - runs optional render-debug, then artifact execution. - validates non-empty output files and materializes canonical outputs. ## Failure Semantics - required missing configured/previous-session inputs fail. - missing required prepared stable input source includes prepare rerun guidance. - missing required previous-session source includes prepare rerun guidance. - missing required `narratio.transcript.final_markdown` or `narratio.transcript.final_trimmed_markdown` inputs includes render rerun guidance. - dependency cycles or unavailable required dependencies fail. - adapter validation failures fail stage. ## Invariants - `analyze` performs no remote storage calls for previous-session source resolution. - output provenance and metadata are deterministic per execution. ## Related Contracts And Tests - [Configuration](../config.md#scriptorium-artifact-entries) owns artifact fields and source-selection rules. - [CLI](../cli.md) owns user-visible artifact selection. - [Scriptorium](../integrations/scriptorium.md) owns the subprocess contract. - Implementation and tests: `internal/stage/analyze.go`, `internal/stage/analyze_test.go`