+ {analytics.versionRegressions.map((reg) => (
+
+ ↑ Duration regression:{" "}
+ median install duration rose from {(reg.previousMedianSeconds / 60).toFixed(1)} to{" "}
+ {(reg.currentMedianSeconds / 60).toFixed(1)} min after version{" "}
+ {reg.currentVersion}{" "}
+ ({reg.currentMeasuredCount} measured installs vs {reg.previousMeasuredCount} on{" "}
+ {reg.previousVersion} — lift {reg.lift}x)
+
+ ))}
+
+ )}
+
{/* Charts row 2: version breakdown + phase breakdown.
Each card is hidden when empty so the row collapses gracefully:
- Version: will appear once new agents emit AppVersion data
@@ -547,6 +584,17 @@ function AppDetailContent() {
/>
)}
+ {analytics.versionBreakdown.some((v) => v.measuredInstalls > 0) && (
+