# Stage: polish ## Purpose Polish merged transcript with Audita and produce a processed transcript for downstream normalization/analyze. ## Inputs and Outputs Inputs: - `transcripts/merged.json` - `inputs/glossary.yml` Outputs: - `transcripts/processed.json` - optional `artifacts/audita.report.json` (when report enabled) ## Boundaries Owns: - Merged transcript discovery/validation - Audita invocation request construction - Run-local logs/config/work-dir/report wiring - Promotion of processed transcript and optional report Does not own: - Upstream merge normalization - Downstream normalize/trim/analyze logic ## Config Fields Used - `session.session_id` - `session.campaign` - `pipeline.workspace.root` - `pipeline.audita.binary` - `pipeline.audita.timeout` - `pipeline.audita.llm_api_key_env` - `pipeline.audita.modules` - `pipeline.audita.base_url` - `pipeline.audita.model` - `pipeline.audita.transcript_description` - `pipeline.audita.config_path` - `pipeline.audita.output_schema` - `pipeline.audita.work_dir_retention` - `pipeline.audita.total_llm_concurrency` - `pipeline.audita.proposal_llm_concurrency` - `pipeline.audita.validation_model` - `pipeline.audita.validation_llm_concurrency` - `pipeline.audita.report` ## External Adapters Used - Audita adapter (`env.Audita.Run`). ## State and Manifest Behavior - Reads merged transcript from merge manifest outputs when available; falls back to canonical merged path. - Uses run-local output/report/log/config/scratch paths when run layout is enabled. - Promotes canonical `transcripts/processed.json` and optional report. - Records adapter invocation metadata, credential presence signal, and output provenance in stage metadata. ## Skip and Resume Behavior - Runner-level skip applies when already succeeded and not forced. - Forced rerun can stale downstream succeeded stages via runner invalidation. ## Failure Behavior - Fails on missing/invalid merged transcript, missing glossary, adapter error, invalid processed output shape (`segments` array required), or invalid report JSON when enabled. ## Tests to Inspect Before Changing - `internal/stage/polish_test.go` - `internal/adapters/audita/subprocess_test.go` ## Architectural Invariants - Processed transcript must contain a top-level `segments` array. - Report behavior is strictly config-gated. - Stage output canonicalization always ends at `transcripts/processed.json`.