package app import ( "os" "path/filepath" "testing" "time" "gitea.maximumdirect.net/eric/narratio/internal/artifacts" "gitea.maximumdirect.net/eric/narratio/internal/config" "gitea.maximumdirect.net/eric/narratio/internal/manifest" ) func TestBuildHelperArtifactCatalogUsesAnalyzeManifestEvidence(t *testing.T) { root := t.TempDir() cfg := &config.Config{ Pipeline: &config.PipelineConfig{ Workspace: config.WorkspaceConfig{Root: root}, Scriptorium: &config.ScriptoriumConfig{Artifacts: map[string]config.ScriptoriumArtifactConfig{ "session_recap": {Enabled: true, OutputPath: "artifacts/session_recap.md"}, }}, }, Session: &config.SessionConfig{Campaign: "campaign", SessionID: "session"}, } paths := artifacts.NewLocalStore(root).SessionPathsFor("campaign", "session") outputPath := filepath.Join(paths.ArtifactsDir, "session_recap.md") if err := os.MkdirAll(filepath.Dir(outputPath), 0o755); err != nil { t.Fatal(err) } body := []byte("# recap\n") if err := os.WriteFile(outputPath, body, 0o644); err != nil { t.Fatal(err) } m := manifest.New("session", time.Date(2026, 8, 29, 12, 0, 0, 0, time.UTC)) incidental, err := buildHelperArtifactCatalog(cfg, m) if err != nil { t.Fatal(err) } entry, _ := incidental.Lookup(artifacts.ConfiguredArtifactSourceID("session_recap")) if entry.Available { t.Fatal("operator catalog advertised incidental configured artifact") } setAppAnalyzeEvidence(m, "session_recap", "artifacts/session_recap.md", body) current, err := buildHelperArtifactCatalog(cfg, m) if err != nil { t.Fatal(err) } entry, _ = current.Lookup(artifacts.ConfiguredArtifactSourceID("session_recap")) if !entry.Available || entry.Provenance != artifacts.ArtifactProvenanceCurrentAnalyzeManifest { t.Fatalf("operator catalog entry = %#v", entry) } }