Resume parked work when a provider's monthly limit is raised
The heartbeat scheduler enqueued runs even while a provider's monthly usage window was full, so every task burned its 3-attempt retry budget on instant quota failures within seconds and stayed dead forever - raising the limit (or restarting) never revived anything. - Park tasks (skip enqueue) while their provider is at its monthly_request_limit instead of creating runs doomed to fail - Exclude quota-blocked failures from the 3-attempt retry budget, retroactively reviving tasks abandoned by past filled windows - Share the gate message as PROVIDER_MONTHLY_LIMIT_MESSAGE and log quota-block transitions once per state change for diagnosability - Ignore landing/ (self-contained Next.js sub-project) and built-in skills/ (prompt content) in eslint so verify:ci lints only application code
This commit is contained in:
1 parent
8e01317a46
commit
349547a0de
6 files changed
+222
-8
No files matched your search
@@ -29,6 +29,15 @@ export interface ProviderRateLimitObservationRecord extends ProviderObservedRate
|
||||
observedAt: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Exact message recorded on runs blocked by a provider's monthly usage window.
|
||||
* The heartbeat scheduler matches task_runs.error_message against this string
|
||||
* so quota-blocked attempts never consume a task's retry budget — the text is
|
||||
* a cross-module contract and also matches rows written by earlier builds
|
||||
* that inlined it.
|
||||
*/
|
||||
export const PROVIDER_MONTHLY_LIMIT_MESSAGE = "Provider monthly request limit has been reached.";
|
||||
|
||||
export function currentProviderUsageWindow(now = new Date()): { start: string; end: string } {
|
||||
const start = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), 1));
|
||||
const end = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth() + 1, 1));
|
||||
|
||||
Reference in new issue
Block a user