package artifactmodel import "strings" const ( SourceTranscriptBase = "narratio.transcript.base" SourceTranscriptPolished = "narratio.transcript.polished" SourceTranscriptFinal = "narratio.transcript.final" SourceTranscriptFinalTrimmed = "narratio.transcript.final_trimmed" ) const ( TranscriptPathBase = "transcripts/base.json" TranscriptPathPolished = "transcripts/polished.json" TranscriptPathFinal = "transcripts/final.json" TranscriptPathFinalTrimmed = "transcripts/final.trimmed.json" ) const ( TranscriptOutputKindBase = "transcript_base" TranscriptOutputKindPolished = "transcript_polished" TranscriptOutputKindFinal = "transcript_final" TranscriptOutputKindFinalTrimmed = "transcript_final_trimmed" ) // TranscriptArtifactSpec describes one built-in transcript artifact mapping. type TranscriptArtifactSpec struct { SourceID string CanonicalRelPath string ProducerStage string OutputKind string } var runtimeTranscriptArtifacts = []TranscriptArtifactSpec{ { SourceID: SourceTranscriptBase, CanonicalRelPath: TranscriptPathBase, ProducerStage: "merge", OutputKind: TranscriptOutputKindBase, }, { SourceID: SourceTranscriptPolished, CanonicalRelPath: TranscriptPathPolished, ProducerStage: "polish", OutputKind: TranscriptOutputKindPolished, }, { SourceID: SourceTranscriptFinal, CanonicalRelPath: TranscriptPathFinal, ProducerStage: "normalize", OutputKind: TranscriptOutputKindFinal, }, { SourceID: SourceTranscriptFinalTrimmed, CanonicalRelPath: TranscriptPathFinalTrimmed, ProducerStage: "trim", OutputKind: TranscriptOutputKindFinalTrimmed, }, } // RuntimeTranscriptArtifacts returns transcript mappings in pipeline order. func RuntimeTranscriptArtifacts() []TranscriptArtifactSpec { return cloneTranscriptSpecs(runtimeTranscriptArtifacts) } // LookupRuntimeTranscriptArtifact returns runtime transcript metadata by source ID. func LookupRuntimeTranscriptArtifact(sourceID string) (TranscriptArtifactSpec, bool) { trimmed := strings.TrimSpace(sourceID) for _, spec := range runtimeTranscriptArtifacts { if spec.SourceID == trimmed { return spec, true } } return TranscriptArtifactSpec{}, false } func cloneTranscriptSpecs(specs []TranscriptArtifactSpec) []TranscriptArtifactSpec { if len(specs) == 0 { return nil } out := make([]TranscriptArtifactSpec, len(specs)) copy(out, specs) return out }