diff --git a/Sources/CodexBar/UsagePaceText.swift b/Sources/CodexBar/UsagePaceText.swift index fb5af32d74..5a57483109 100644 --- a/Sources/CodexBar/UsagePaceText.swift +++ b/Sources/CodexBar/UsagePaceText.swift @@ -60,6 +60,9 @@ enum UsagePaceText { guard let runOutProbability = pace.runOutProbability else { return etaLabel } let roundedRisk = self.roundedRiskPercent(runOutProbability) let riskLabel = L("≈ %d%% run-out risk", roundedRisk) + if pace.willLastToReset, roundedRisk > 0 { + return riskLabel + } if let etaLabel { return L("%@ · %@", etaLabel, riskLabel) } diff --git a/Tests/CodexBarTests/UsagePaceTextTests.swift b/Tests/CodexBarTests/UsagePaceTextTests.swift index 2fc4cc1ef2..3002f670a5 100644 --- a/Tests/CodexBarTests/UsagePaceTextTests.swift +++ b/Tests/CodexBarTests/UsagePaceTextTests.swift @@ -83,6 +83,24 @@ struct UsagePaceTextTests { #expect(detail.rightLabel == "Runs out in 2d · ≈ 70% run-out risk") } + @Test + func `weekly pace detail does not combine lasts until reset with run out risk`() { + let now = Date(timeIntervalSince1970: 0) + let pace = UsagePace( + stage: .slightlyBehind, + deltaPercent: -9, + expectedUsedPercent: 21, + actualUsedPercent: 12, + etaSeconds: nil, + willLastToReset: true, + runOutProbability: 0.45) + + let detail = UsagePaceText.weeklyDetail(pace: pace, now: now) + + #expect(detail.leftLabel == "9% in reserve") + #expect(detail.rightLabel == "≈ 45% run-out risk") + } + // MARK: - Session pace (5-hour window) @Test