Infer artifact dependencies from configured inputs

This commit is contained in:
2026-09-07 04:39:49 +00:00
parent 92432232ef
commit 63a86c43f4
12 changed files with 321 additions and 65 deletions

View File

@@ -627,25 +627,36 @@ func TestAnalyzeRunsDependenciesBeforeDependents(t *testing.T) {
paths := sessionPathsForEnv(env, m.SessionID)
writeAnalyzeFile(t, filepath.Join(paths.TranscriptsDir, "final.trimmed.json"), `{"segments":[]}`)
env.Config.Pipeline.Scriptorium.Artifacts["player_handout"] = config.ScriptoriumArtifactConfig{
Enabled: true,
DependsOn: []string{"session_recap"},
PromptID: "dnd.player_handout",
ProfileID: "local-quality",
OutputPath: "artifacts/player_handout.md",
Inputs: map[string]config.ScriptoriumInputConfig{
"recap": {
Source: "narratio.artifact.session_recap",
Required: true,
},
"transcript": {
Source: "narratio.transcript.final_trimmed",
Required: true,
},
},
writeAnalyzeFile(t, env.Config.PipelinePath, "workspace:\n root: "+env.Config.Pipeline.Workspace.Root+`
scriptorium:
binary: scriptorium
artifacts:
session_recap:
enabled: true
prompt_id: dnd.session_recap
profile_id: local-quality
output_path: artifacts/session_recap.md
inputs:
transcript: {source: narratio.transcript.final_trimmed, required: true}
player_handout:
enabled: true
prompt_id: dnd.player_handout
profile_id: local-quality
output_path: artifacts/player_handout.md
inputs:
recap: {source: narratio.artifact.session_recap, required: true}
transcript: {source: narratio.transcript.final_trimmed, required: true}
`)
loadedPipeline, err := config.LoadPipeline(env.Config.PipelinePath)
if err != nil {
t.Fatalf("LoadPipeline() error = %v", err)
}
env.Config.Pipeline = loadedPipeline
if dependencies := loadedPipeline.Scriptorium.Artifacts["player_handout"].DependsOn; len(dependencies) != 1 || dependencies[0] != "session_recap" {
t.Fatalf("materialized dependencies = %#v, want [session_recap]", dependencies)
}
_, err := (analyzeStage{}).Run(context.Background(), env, m)
_, err = (analyzeStage{}).Run(context.Background(), env, m)
if err != nil {
t.Fatalf("Run() error = %v", err)
}