From b9fe5f44a9d21e54e5697f229f0e96188ecad6da Mon Sep 17 00:00:00 2001 From: bearsyankees Date: Mon, 13 Jul 2026 14:20:03 -0400 Subject: [PATCH] Preserve scan ended retry reason --- strix/report/state.py | 1 + strix/telemetry/posthog.py | 4 +++- strix/telemetry/scarf.py | 4 +++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/strix/report/state.py b/strix/report/state.py index e4d1a16b..9dede601 100644 --- a/strix/report/state.py +++ b/strix/report/state.py @@ -137,6 +137,7 @@ class ReportState: self.posthog_scan_ended_sent: bool = False self.scarf_scan_ended_sent: bool = False + self.scan_ended_exit_reason: str | None = None def get_run_dir(self) -> Path: if self._run_dir is None: diff --git a/strix/telemetry/posthog.py b/strix/telemetry/posthog.py index 1cf0d448..df6bed4d 100644 --- a/strix/telemetry/posthog.py +++ b/strix/telemetry/posthog.py @@ -86,6 +86,8 @@ def finding(severity: str) -> None: def end(report_state: "ReportState", exit_reason: str = "completed") -> None: if report_state.posthog_scan_ended_sent: return + if report_state.scan_ended_exit_reason is None: + report_state.scan_ended_exit_reason = exit_reason vulnerabilities_counts = {"critical": 0, "high": 0, "medium": 0, "low": 0, "info": 0} for v in report_state.vulnerability_reports: @@ -119,7 +121,7 @@ def end(report_state: "ReportState", exit_reason: str = "completed") -> None: "scan_ended", { **base_props(), - "exit_reason": exit_reason, + "exit_reason": report_state.scan_ended_exit_reason, "duration_seconds": round(duration), "vulnerabilities_total": len(report_state.vulnerability_reports), **{f"vulnerabilities_{k}": v for k, v in vulnerabilities_counts.items()}, diff --git a/strix/telemetry/scarf.py b/strix/telemetry/scarf.py index f4c17abe..6e48570c 100644 --- a/strix/telemetry/scarf.py +++ b/strix/telemetry/scarf.py @@ -89,6 +89,8 @@ def finding(severity: str) -> None: def end(report_state: ReportState, exit_reason: str = "completed") -> None: if report_state.scarf_scan_ended_sent: return + if report_state.scan_ended_exit_reason is None: + report_state.scan_ended_exit_reason = exit_reason vulnerabilities_counts = {"critical": 0, "high": 0, "medium": 0, "low": 0, "info": 0} for v in report_state.vulnerability_reports: @@ -125,7 +127,7 @@ def end(report_state: ReportState, exit_reason: str = "completed") -> None: { **base_props(), "session": SESSION_ID, - "exit_reason": exit_reason, + "exit_reason": report_state.scan_ended_exit_reason, "duration_seconds": round(duration), "vulnerabilities_total": len(report_state.vulnerability_reports), **{f"vulnerabilities_{k}": v for k, v in vulnerabilities_counts.items()},