Complete comparison failure summaries

This commit is contained in:
2026-08-02 13:28:16 +00:00
parent acb476a142
commit faf547e4a8
5 changed files with 217 additions and 20 deletions

View File

@@ -90,6 +90,11 @@ func CompareDetailed(ctx context.Context, req ComparisonRequest) (*ComparisonRes
return nil, fmt.Errorf("build comparison identity: %w", err)
}
result := initialComparisonResult(req, resolved, comparisonID, now.UTC())
defer func() {
if result.FinishedAt.IsZero() {
finalizeComparisonResult(result, clock)
}
}()
outputName, err := resolved.OutputName()
if err != nil {
@@ -99,11 +104,11 @@ func CompareDetailed(ctx context.Context, req ComparisonRequest) (*ComparisonRes
if err != nil {
return result, err
}
initialPlan, err := comparison.PlanDestination(req.WorkingDir, outputDirectory, req.Replace)
result.OutputDirectory = outputDirectory
_, err = comparison.PlanDestination(req.WorkingDir, outputDirectory, req.Replace)
if err != nil {
return result, fmt.Errorf("preflight comparison destination: %w", err)
}
result.OutputDirectory = initialPlan.Target
debugWriter, err := promptdebug.NewPromptDebugWriter(req.LLMDebugDir)
if err != nil {
@@ -129,7 +134,7 @@ func CompareDetailed(ctx context.Context, req ComparisonRequest) (*ComparisonRes
executed := executeComparisonProfiles(ctx, comparisonExecutionRequest{
Prepared: prepared, Inspection: inspection, ComparisonID: comparisonID, DebugWriter: debugWriter, Executor: req.Executor,
})
result.FinishedAt = clock.Now().UTC()
finalizeComparisonResult(result, clock)
copyComparisonOutcomes(result, executed.Outcomes, false)
if executed.Canceled {
return result, fmt.Errorf("comparison execution: %w", ctx.Err())
@@ -160,6 +165,17 @@ func CompareDetailed(ctx context.Context, req ComparisonRequest) (*ComparisonRes
return result, nil
}
func finalizeComparisonResult(result *ComparisonResult, clock timeutil.Clock) {
finishedAt := clock.Now().UTC()
if finishedAt.IsZero() {
finishedAt = time.Unix(0, 1).UTC()
}
if finishedAt.Before(result.StartedAt) {
finishedAt = result.StartedAt
}
result.FinishedAt = finishedAt
}
func initialComparisonResult(req ComparisonRequest, resolved report.Resolved, comparisonID string, startedAt time.Time) *ComparisonResult {
metadata := resolved.Metadata()
return &ComparisonResult{