Enforce requested adapter output paths

This commit is contained in:
2026-08-10 21:57:54 +00:00
parent 702f622e18
commit 8ff1b4fa66
15 changed files with 137 additions and 126 deletions

View File

@@ -4,7 +4,6 @@ import (
"context"
"encoding/json"
"fmt"
"os"
"path/filepath"
"strings"
@@ -131,17 +130,17 @@ func (polishStage) Run(ctx context.Context, env *Env, m *manifest.Manifest) (*St
return nil, fmt.Errorf("polish: audita polish failed: %w", err)
}
finalProcessedPath := processedPath
if strings.TrimSpace(res.ProcessedTranscriptPath) != "" {
finalProcessedPath = res.ProcessedTranscriptPath
finalProcessedPath, err := authoritativeOutputPath(processedPath, res.ProcessedTranscriptPath)
if err != nil {
return nil, fmt.Errorf("polish: %w", err)
}
if err := validateProcessedTranscriptOutput(finalProcessedPath); err != nil {
return nil, fmt.Errorf("polish: processed transcript %q invalid: %w", finalProcessedPath, err)
}
finalReportPath := req.ReportPath
if strings.TrimSpace(res.ReportPath) != "" {
finalReportPath = res.ReportPath
finalReportPath, err := authoritativeOutputPath(req.ReportPath, res.ReportPath)
if err != nil {
return nil, fmt.Errorf("polish: %w", err)
}
if reportEnabled {
if err := validateTranscriptJSONFile(finalReportPath); err != nil {
@@ -246,38 +245,7 @@ func (polishStage) Run(ctx context.Context, env *Env, m *manifest.Manifest) (*St
}
func discoverMergedTranscript(m *manifest.Manifest, paths artifacts.SessionPaths) (string, string, error) {
candidates := make([]string, 0)
if m != nil && m.Stages != nil {
if sr := m.Stages["merge"]; sr != nil {
for _, out := range sr.Outputs {
if out.Kind != "transcript_base" {
continue
}
p := strings.TrimSpace(out.LocalPath)
if p == "" {
continue
}
resolved := artifacts.ResolveSessionLocalPathForRead(paths, p)
candidates = append(candidates, filepath.Clean(resolved))
}
}
}
deduped := dedupeAndSortPaths(candidates)
for _, p := range deduped {
if info, err := os.Stat(p); err == nil && !info.IsDir() {
return p, "manifest.merge.outputs", nil
}
}
fallback := filepath.Join(paths.TranscriptsDir, "base.json")
if info, err := os.Stat(fallback); err == nil && !info.IsDir() {
return filepath.Clean(fallback), "fallback.transcripts_dir", nil
}
if len(deduped) > 0 {
return deduped[0], "manifest.merge.outputs", nil
}
return "", "", nil
return resolveSingletonTranscript(m, paths, artifacts.ArtifactTranscriptBase)
}
func validateProcessedTranscriptOutput(path string) error {