From af7faab76e033f189a77c857f57f7275c72db217 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 18 Mar 2026 00:47:29 +0000 Subject: [PATCH 1/3] Initial plan From d747b25bb8f80e0d462c9cce35e25493f95ee248 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 18 Mar 2026 00:58:13 +0000 Subject: [PATCH 2/3] Fix safe_items_count missing when filtering logs by workflow_name Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- pkg/cli/logs_orchestrator.go | 4 ++-- pkg/cli/logs_summary_test.go | 43 ++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/pkg/cli/logs_orchestrator.go b/pkg/cli/logs_orchestrator.go index 72a0f12c09e..329a78e85d3 100644 --- a/pkg/cli/logs_orchestrator.go +++ b/pkg/cli/logs_orchestrator.go @@ -328,7 +328,7 @@ func DownloadWorkflowLogs(ctx context.Context, workflowName string, count int, s } processedRun := ProcessedRun{ - Run: run, + Run: result.Run, AccessAnalysis: result.AccessAnalysis, FirewallAnalysis: result.FirewallAnalysis, RedactedDomainsAnalysis: result.RedactedDomainsAnalysis, @@ -746,7 +746,7 @@ func downloadRunArtifactsConcurrent(ctx context.Context, runs []WorkflowRun, out CLIVersion: GetVersion(), RunID: run.DatabaseID, ProcessedAt: time.Now(), - Run: run, + Run: result.Run, Metrics: metrics, AccessAnalysis: accessAnalysis, FirewallAnalysis: firewallAnalysis, diff --git a/pkg/cli/logs_summary_test.go b/pkg/cli/logs_summary_test.go index 32da1cb6f5b..e1f4df9fc4d 100644 --- a/pkg/cli/logs_summary_test.go +++ b/pkg/cli/logs_summary_test.go @@ -322,3 +322,46 @@ func TestRunSummaryJSONStructure(t *testing.T) { t.Errorf("ArtifactsList length mismatch after round-trip: got %d, want %d", len(testUnmarshal.ArtifactsList), len(testSummary.ArtifactsList)) } } + +// TestSaveAndLoadRunSummary_SafeItemsCount verifies that SafeItemsCount is correctly +// persisted to and loaded from the RunSummary cache. This is a regression test for +// the bug where filtering logs by workflow_name returned safe_items_count=0 because +// the RunSummary was saved with Run: run (which had SafeItemsCount=0) instead of +// Run: result.Run (which had SafeItemsCount set after extractCreatedItemsFromManifest). +func TestSaveAndLoadRunSummary_SafeItemsCount(t *testing.T) { + tmpDir := testutil.TempDir(t, "test-safe-items-*") + runDir := filepath.Join(tmpDir, "run-99999") + if err := os.MkdirAll(runDir, 0755); err != nil { + t.Fatalf("Failed to create test directory: %v", err) + } + + originalVersion := GetVersion() + SetVersionInfo("1.0.0-test") + defer SetVersionInfo(originalVersion) + + testSummary := &RunSummary{ + CLIVersion: GetVersion(), + RunID: 99999, + ProcessedAt: time.Now(), + Run: WorkflowRun{ + DatabaseID: 99999, + WorkflowName: "Plan Command", + Status: "completed", + Conclusion: "success", + SafeItemsCount: 4, + }, + } + + if err := saveRunSummary(runDir, testSummary, false); err != nil { + t.Fatalf("Failed to save run summary: %v", err) + } + + loaded, ok := loadRunSummary(runDir, false) + if !ok { + t.Fatal("Failed to load run summary") + } + + if loaded.Run.SafeItemsCount != 4 { + t.Errorf("SafeItemsCount not persisted: got %d, want 4", loaded.Run.SafeItemsCount) + } +} From 5b7e13b731fbef0a0d4da7bcdad6d780eb778707 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 18 Mar 2026 01:43:58 +0000 Subject: [PATCH 3/3] Fix: revert ProcessedRun to use enriched run variable, keep RunSummary using result.Run Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- pkg/cli/logs_orchestrator.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/cli/logs_orchestrator.go b/pkg/cli/logs_orchestrator.go index 329a78e85d3..6bd1f592ab4 100644 --- a/pkg/cli/logs_orchestrator.go +++ b/pkg/cli/logs_orchestrator.go @@ -328,7 +328,7 @@ func DownloadWorkflowLogs(ctx context.Context, workflowName string, count int, s } processedRun := ProcessedRun{ - Run: result.Run, + Run: run, AccessAnalysis: result.AccessAnalysis, FirewallAnalysis: result.FirewallAnalysis, RedactedDomainsAnalysis: result.RedactedDomainsAnalysis,