feat(worker): Toggle "Continue on session limit reset" für Usage-Limit-Abbrüche
Klassifiziert einen echten Usage-Limit-Abbruch als eigene FailureReason
"usage_limit" (TaskRunner.ClassifyFailureReason: nur bei terminal_reason
"api_error" plus einem Limit-Muster im gerenderten Fehlertext, nicht an
Status==Failed allein). Neuer Toggle AutoContinueOnUsageLimit (app_settings,
Default aus) unter Settings → General → "Usage limit stop":
- UsageLimitAutoContinueCoordinator feuert pro Task genau einmal ContinueTask
über OverrideSlotService, sobald das 5h-Fenster (UsageState.Snapshot.FiveHour
.ResetsAt) tatsächlich zurückgesetzt ist; ein persistenter Marker
(TaskEntity.UsageLimitAutoContinuedAt) verhindert einen zweiten Anlauf bei
einem erneuten Limit-Treffer.
- QueueService schedult zusätzlich einen exakten Wake-Timer auf den
Reset-Zeitpunkt, statt nur auf den 30s-Backstop zu warten.
- Fail-open durchgängig: kein Snapshot/keine Reset-Zeit → kein Timer, kein
Continue, kein Throw. Toggle aus ändert das heutige Verhalten nicht.
Migration AddUsageLimitAutoContinue fügt beide Spalten hinzu; die von
`dotnet ef migrations add` mitgescaffoldete leere UpdateData auf app_settings
(columns/values: []) erzeugte ungültiges SQL ("near WHERE") und wurde entfernt
— TaskNumberMigrationTests deckte das über den vollen Migrate()-Pfad auf.
This commit is contained in:
@@ -55,4 +55,9 @@ public sealed class AppSettingsEntity
|
||||
public int UsageThrottleFiveHourHardPct { get; set; } = 65;
|
||||
public int UsageThrottleSevenDaySoftPct { get; set; } = 50;
|
||||
public int UsageThrottleSevenDayHardPct { get; set; } = 65;
|
||||
|
||||
// Off by default. When on: a task that failed on the Anthropic usage limit gets exactly one
|
||||
// automatic ContinueTask once the 5h window resets, and the gate-blocked queue wakes exactly
|
||||
// at that reset time instead of only on the 30s backstop.
|
||||
public bool AutoContinueOnUsageLimit { get; set; }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user