@@ -270,6 +270,47 @@ struct CodexWeeklyResetConfirmationTests {
270270 == . preservePrevious)
271271 }
272272
273+ @Test
274+ func `redeemed reset credit confirms an early manual weekly reset`() throws {
275+ let formatter = ISO8601DateFormatter ( )
276+ let previousCapturedAt = try #require( formatter. date ( from: " 2026-07-28T03:09:20Z " ) )
277+ let previousReset = try #require( formatter. date ( from: " 2026-08-02T10:17:56Z " ) )
278+ let initialCapturedAt = try #require( formatter. date ( from: " 2026-07-28T03:59:23Z " ) )
279+ let initialReset = try #require( formatter. date ( from: " 2026-08-04T03:59:21Z " ) )
280+ let previous = self . snapshot (
281+ capturedAt: previousCapturedAt,
282+ weeklyUsed: 100 ,
283+ weeklyReset: previousReset,
284+ resetCredits: self . resetCredits (
285+ status: . available,
286+ capturedAt: previousCapturedAt) )
287+ let initial = self . snapshot (
288+ capturedAt: initialCapturedAt,
289+ weeklyUsed: 0 ,
290+ weeklyReset: initialReset,
291+ resetCredits: self . resetCredits (
292+ status: . redeeming,
293+ capturedAt: initialCapturedAt) )
294+ let confirmationCapturedAt = initialCapturedAt. addingTimeInterval ( 30 )
295+ let confirmation = self . snapshot (
296+ capturedAt: confirmationCapturedAt,
297+ weeklyUsed: 0 ,
298+ weeklyReset: initialReset. addingTimeInterval ( 30 ) ,
299+ resetCredits: self . resetCredits (
300+ status: . redeemed,
301+ capturedAt: confirmationCapturedAt) )
302+
303+ #expect(
304+ CodexWeeklyResetConfirmation . initialDecision ( previous: previous, initial: initial)
305+ == . requiresConfirmation)
306+ #expect(
307+ CodexWeeklyResetConfirmation . confirmationDecision (
308+ previous: previous,
309+ initial: initial,
310+ confirmation: confirmation)
311+ == . publishConfirmation)
312+ }
313+
273314 @Test
274315 func `prior boundary due tolerance includes the exact two minute edge`() {
275316 let previousBoundary = self . resetAt
@@ -442,20 +483,23 @@ struct CodexWeeklyResetConfirmationTests {
442483 offset: TimeInterval ,
443484 weeklyUsed: Double ? ,
444485 weeklyReset: Date ? ,
445- weeklyInPrimary: Bool = false ) -> UsageSnapshot
486+ weeklyInPrimary: Bool = false ,
487+ resetCredits: CodexRateLimitResetCreditsSnapshot ? = nil ) -> UsageSnapshot
446488 {
447489 self . snapshot (
448490 capturedAt: self . capturedAt. addingTimeInterval ( offset) ,
449491 weeklyUsed: weeklyUsed,
450492 weeklyReset: weeklyReset,
451- weeklyInPrimary: weeklyInPrimary)
493+ weeklyInPrimary: weeklyInPrimary,
494+ resetCredits: resetCredits)
452495 }
453496
454497 private func snapshot(
455498 capturedAt: Date ,
456499 weeklyUsed: Double ? ,
457500 weeklyReset: Date ? ,
458- weeklyInPrimary: Bool = false ) -> UsageSnapshot
501+ weeklyInPrimary: Bool = false ,
502+ resetCredits: CodexRateLimitResetCreditsSnapshot ? = nil ) -> UsageSnapshot
459503 {
460504 let weekly = weeklyUsed. map {
461505 RateWindow (
@@ -472,6 +516,26 @@ struct CodexWeeklyResetConfirmationTests {
472516 return UsageSnapshot (
473517 primary: weeklyInPrimary ? weekly : session,
474518 secondary: weeklyInPrimary ? session : weekly,
519+ codexResetCredits: resetCredits,
520+ updatedAt: capturedAt)
521+ }
522+
523+ private func resetCredits(
524+ status: CodexRateLimitResetCreditStatus ,
525+ capturedAt: Date ) -> CodexRateLimitResetCreditsSnapshot
526+ {
527+ CodexRateLimitResetCreditsSnapshot (
528+ credits: [ CodexRateLimitResetCredit (
529+ id: " manual-reset-credit " ,
530+ resetType: " codex_rate_limits " ,
531+ status: status,
532+ grantedAt: capturedAt. addingTimeInterval ( - 24 * 60 * 60 ) ,
533+ expiresAt: capturedAt. addingTimeInterval ( 24 * 60 * 60 ) ,
534+ redeemStartedAt: status == . available ? nil : capturedAt,
535+ redeemedAt: status == . redeemed ? capturedAt : nil ,
536+ title: nil ,
537+ description: nil ) ] ,
538+ availableCount: status == . available ? 1 : 0 ,
475539 updatedAt: capturedAt)
476540 }
477541}
0 commit comments