Skip to content

fix(cron): retry transient errors before next natural cron slot (#85888)#85896

Closed
yetval wants to merge 1 commit into
openclaw:mainfrom
yetval:fix/cron-error-backoff-min-bound-85888
Closed

fix(cron): retry transient errors before next natural cron slot (#85888)#85896
yetval wants to merge 1 commit into
openclaw:mainfrom
yetval:fix/cron-error-backoff-min-bound-85888

Conversation

@yetval

@yetval yetval commented May 24, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Recurring cron error path used Math.max(naturalNext, backoffNext) for the next scheduled run. For daily schedules (e.g. 0 5 * * *), naturalNext is ~24h ahead and always dominated the short backoff, so retries for transient provider errors were effectively suppressed.
  • This matches the symptom in Cron jobs consistently fail with MiniMax 503 overload during early morning (05:00-07:30 CST), manual triggers succeed #85888: scheduled jobs hitting MiniMax overloaded_error (503) during 05:00-07:30 Asia/Shanghai never re-fired the same day, while manual reruns at 08:30+ (after the busy window) succeeded because they bypassed the broken scheduler path.
  • While retry budget is available and the error is classified retryable via resolveCronExecutionRetryHint, schedule at backoffNext. Once consecutiveErrors > retryConfig.maxAttempts or the error is permanent, fall back to max(naturalNext, backoffNext) so high-frequency recurring schedules cannot bypass the configured backoff after retry-budget exhaustion. When croner cannot resolve the natural next slot for a cron schedule, the retry path clears nextRunAtMs to preserve the unresolved-next-run guard from [Bug] Cron spin loop via MIN_REFIRE_GAP_MS fallback when computeJobNextRunAtMs returns undefined (incomplete fix for #17821) #66019.

Closes #85888

Files

  • src/cron/service/timer.ts — split recurring error path into "within retry budget" (use backoffNext, preserve unresolved-next-run guard) vs. "exhausted / permanent" (use max(naturalNext, backoffNext)).
  • src/cron/service/timer.regression.test.ts — four regressions: (1) same-day backoff retry on retryable daily-cron error, (2) high-frequency every-1s preserves backoff floor, (3) cron unresolved-next-run guard, (4) exhausted budget falls back to natural slot.
  • docs/gateway/configuration-reference.md, docs/automation/cron-jobs.md, src/config/schema.help.ts, src/config/types.cron.ts — align cron.retry contract surfaces with the new recurring-job behavior.

Real behavior proof

Behavior or issue addressed: Scheduled recurring cron jobs that hit a retryable provider error (e.g. MiniMax overloaded_error 503) on an infrequent schedule (#85888 reporter: daily 0 5 * * * Asia/Shanghai during 05:00-07:30 CST) had their next run pushed to the next natural slot (~24h away) instead of being retried with backoff, so the failure was effectively swallowed for that day while manual reruns at 08:30+ succeeded. After this patch, while the error is in cron.retry.retryOn and consecutiveErrors is still within cron.retry.maxAttempts, the next run is scheduled at the configured backoff slot rather than the natural cron/every slot; once retries are exhausted the job falls back to max(naturalNext, backoffNext) so high-frequency schedules cannot bypass backoff.

Real environment tested: Fresh DigitalOcean Fedora 43 Cloud Edition droplet (fedora-s-1vcpu-2gb-nyc1, redacted IP), kernel 6.17.1-300.fc43.x86_64, node v22.22.2, pnpm 9.15.9. Patched OpenClaw checkout at PR head 1c8a66cfe3f47e9dd2a17eaa2c0e93295a9c9d32. Real node:fs/promises writes under /tmp/cron-proof-85888-<redacted>/jobs.json. Real production applyJobResult, real createCronServiceState, real computeJobNextRunAtMs, real resolveCronExecutionRetryHint – none of the scheduler code under test is mocked. The proof-85888.mts script is executed via the project's own tsx (./node_modules/.bin/tsx) directly from the patched repo, outside the vitest test harness.

Exact steps or command run after this patch: Provision the droplet, install Node 22 + pnpm 9, clone the PR head, install deps, then run two captures against the patched code — vitest against the four new #85888 regressions, then a direct tsx invocation of proof-85888.mts that exercises the production applyJobResult outside the test harness on real fs.

dnf install -y nodejs npm git
npm install -g pnpm@9
git clone --branch fix/cron-error-backoff-min-bound-85888 --depth 1 https://github.com/yetval/openclaw.git
cd openclaw
pnpm install --no-frozen-lockfile
node scripts/run-vitest.mjs src/cron/service/timer.regression.test.ts -t "85888" --reporter=verbose
./node_modules/.bin/tsx proof-85888.mts

Evidence after fix: Redacted live terminal output from the Fedora 43 droplet on PR head 1c8a66cfe3. Token, IP, and tmp paths redacted in-place; everything else is the actual stdout from the patched scheduler running on real Linux. Two captures: vitest runner output for the new regressions (real fs via setupCronRegressionFixtures + real Node 22 + real Linux), and a direct tsx-invoked proof-85888.mts runtime script that imports the production applyJobResult and writes a real jobs.json to /tmp.

RUN  v4.1.7 /root/openclaw

 ✓ src/cron/service/timer.regression.test.ts > cron service timer regressions
   > schedules backoff retry within the same day when daily cron fails on a retryable error (#85888) 318ms
 ✓ src/cron/service/timer.regression.test.ts > cron service timer regressions
   > preserves backoff floor for high-frequency recurring jobs whose natural next is sooner than backoff (#85888) 5ms
 ✓ src/cron/service/timer.regression.test.ts > cron service timer regressions
   > clears schedule on retryable cron error when next-run is unresolved (#85888) 6ms
 ✓ src/cron/service/timer.regression.test.ts > cron service timer regressions
   > falls back to the next natural cron slot once retry budget is exhausted (#85888) 7ms

 Test Files  1 passed (1)
      Tests  4 passed (43, 39 skipped)
   Duration  14.07s

Direct runtime proof (proof-85888.mts — real applyJobResult invoked outside the test harness, real fs writes under /tmp, real createCronServiceState, no mocks of the scheduler under test):

===== Scenario 1: daily cron (Asia/Shanghai) MiniMax overload =====
  endedAt:         2026-05-24T05:02:44.264Z
  naturalNext:     2026-05-24T21:00:00.000Z (delta from endedAt: 15.95h)
[warn] cron: job run returned error status {"jobId":"memory-distill","error":"FailoverError: The AI service is temporarily overloaded (overloaded_error). status=503"}
[info] cron: applying error backoff {"jobId":"memory-distill","consecutiveErrors":1,"backoffMs":30000,"nextRunAtMs":1779598994264,"retryable":true,"retryCategory":"overloaded","retryBudgetAvailable":true,"maxAttempts":3,"scheduledMode":"backoff"}
  -> nextRunAtMs:  2026-05-24T05:03:14.264Z
  -> delta:        0.01h
  -> same-day?     YES (fixed)
  -> consecutive:  1

===== Scenario 2: high-frequency every-1s preserves backoff floor =====
  endedAt:         2026-05-24T12:00:00.200Z
  naturalNext:     2026-05-24T12:00:01.000Z (+800ms)
[warn] cron: job run returned error status {"jobId":"tick","error":"FailoverError: ... overloaded_error ... status=503"}
[info] cron: applying error backoff {"jobId":"tick","consecutiveErrors":1,"backoffMs":30000,"nextRunAtMs":1779624030200,"retryable":true,"retryCategory":"overloaded","retryBudgetAvailable":true,"maxAttempts":3,"scheduledMode":"backoff"}
  -> nextRunAtMs:  2026-05-24T12:00:30.200Z
  -> delay (ms):   30000
  -> floor ok?     YES (backoff respected)

===== Scenario 3: exhausted retry budget falls back =====
  endedAt:         2026-05-24T05:02:00.000Z
  naturalNext:     2026-05-24T21:00:00.000Z
  consecutive in:  99
[warn] cron: job run returned error status {"jobId":"memory-distill-exhausted","error":"FailoverError: ... overloaded_error ... status=503"}
[info] cron: applying error backoff {"jobId":"memory-distill-exhausted","consecutiveErrors":100,"backoffMs":300000,"nextRunAtMs":1779656400000,"retryable":true,"retryCategory":"overloaded","retryBudgetAvailable":false,"maxAttempts":3,"scheduledMode":"natural_floor"}
  -> nextRunAtMs:  2026-05-24T21:00:00.000Z
  -> falls back?   YES (natural slot)
  -> enabled?      true

===== fs writes =====
  tmpDir:         /tmp/cron-proof-85888-<redacted>
  jobs.json size: 11

Observed result after fix:

  • Scenario 1 is the exact reporter failure mode (0 5 * * * Asia/Shanghai, overloaded_error 503): on current main the runtime would push nextRunAtMs to 2026-05-24T21:00:00.000Z (15.95h away, next-day in Asia/Shanghai); on this PR head it lands at 2026-05-24T05:03:14.264Z (30s after endedAt). Same-day retry achieved. scheduledMode=backoff, retryBudgetAvailable=true.
  • Scenario 2 is the prior ClawSweeper P1 concern about high-frequency schedules: with every-1s cadence and a 30s backoff, the patched runtime respects the backoff floor and schedules at endedAt + 30000ms instead of the +800ms natural slot. Retry-storm protection preserved. scheduledMode=backoff.
  • Scenario 3 is the prior ClawSweeper P2 concern about exhausted retry budget: once consecutiveErrors > maxAttempts, scheduledMode flips to natural_floor and nextRunAtMs resolves to the next natural cron slot (max(naturalNext, backoffNext) semantics), so a high-frequency schedule cannot bypass backoff after the retry budget is gone. retryBudgetAvailable=false.
  • All three scenarios emit a real cron: applying error backoff log line on a real Node 22 process with real fs writes (/tmp/cron-proof-85888-<redacted>/jobs.json).

What was not tested: End-to-end flight against the live MiniMax minimax-portal / MiniMax-M2.7 provider on the issue reporter's tenant. I do not have credentials for that tenant. The retryable-error contract is exercised here by passing the exact FailoverError: The AI service is temporarily overloaded (overloaded_error). status=503 text the issue logs show; the upstream resolveCronExecutionRetryHint and resolveFailoverReasonFromError classifiers are production code and are not mocked in the proof above, so the patched scheduling decision is being made on the same retryable/overloaded classification path that production code would take when MiniMax returns the same error.

Test plan

  • node scripts/run-vitest.mjs src/cron/service/timer.regression.test.ts -t "85888" — 4/4 PR regressions pass on Fedora 43 / Node 22
  • Direct tsx proof-85888.mts against the patched scheduler — three scenarios match expected behavior
  • Full cron suite + cron/retry-hint.test.ts + cron/service.jobs.test.ts in CI

@openclaw-barnacle openclaw-barnacle Bot added size: S triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 24, 2026
@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

Thanks for the context here. I swept through the related work, and this is now duplicate or superseded.

This PR is still necessary: current main still delays recurring error retries to the later natural slot/backoff floor, while the branch targets that path with focused tests, docs/config help updates, and sufficient runtime proof. I found no blocking correctness finding, but the recurring retry upgrade semantics still need an explicit maintainer call before merge.

Canonical path: Close this PR as superseded by #74068.

So I’m closing this here and keeping the remaining discussion on #74068.

Review details

Best possible solution:

Close this PR as superseded by #74068.

Do we have a high-confidence way to reproduce the issue?

Yes, at source level. Current main schedules recurring errors at the later natural slot/backoff floor, so an infrequent daily cron with a retryable 503 can be delayed until the next natural slot; the PR body also includes after-fix terminal proof for the changed path.

Is this the best way to solve the issue?

Yes, if maintainers accept recurring cron.retry semantics. The patch is narrow to applyJobResult and preserves high-frequency backoff and unresolved-next-run guards; the safer alternative is an explicit recurring retry policy if compatibility wins.

Security review:

Security review cleared: The diff is limited to cron scheduler logic, config comments/help, docs, and regression tests; no concrete security or supply-chain concern was found.

What I checked:

  • linked superseding PR: fix(cron): keep recurring backoff stable after reload #74068 (fix(cron): keep recurring backoff stable after reload) is still open as the canonical replacement.
  • cluster evidence: the durable review links that PR in the work cluster or recommended risk path.
  • no human follow-up: live comments and timeline hydrated by apply contain no non-automation activity after the ClawSweeper review.

Likely related people:

  • Tyler Yust: git log -S points to the cron scheduling/delivery hardening commit that introduced the recurring error-backoff branch containing the current cron: applying error backoff path. (role: introduced behavior; confidence: medium; commits: 8fae55e8e057; files: src/cron/service/timer.ts)
  • NIO: Introduced the cron.retry policy and config/help surfaces that this PR extends from one-shot jobs to recurring jobs. (role: adjacent feature owner; confidence: medium; commits: ea3955cd78a9; files: src/cron/service/timer.ts, src/config/types.cron.ts, src/config/schema.help.ts)
  • Mariano: Implemented and preserved the unresolved next-run guard that the PR explicitly keeps for retryable recurring cron failures. (role: recent adjacent owner; confidence: high; commits: c60282421524, 190a4b48697b; files: src/cron/service/timer.ts, src/cron/service/timer.regression.test.ts, src/cron/service.issue-66019-unresolved-next-run.test.ts)
  • Vincent Koc: Recent docs history added and reorganized the cron configuration reference surfaces touched by this PR. (role: docs/config adjacent contributor; confidence: medium; commits: cb428aca1cb6, d9c662dc695c; files: docs/gateway/configuration-reference.md, docs/automation/cron-jobs.md)
  • Peter Steinberger: Current checkout blame for the inspected timer range maps through the latest shallow-boundary import commit, and recent main contains adjacent cron/service churn; this is a routing hint only because older history gives more specific owners above. (role: recent current-main contributor; confidence: low; commits: 679b6776d5d3; files: src/cron/service/timer.ts)

Codex review notes: model gpt-5.5, reasoning high; reviewed against 0ba6b235349a.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. labels May 24, 2026
@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

✨ Hatched: 🥚 common Brave Crabkin

Hatch command

Comment @clawsweeper hatch when this PR is hatchable.

Hatchability rules:

  • Merged PRs are hatchable.
  • Open PRs are hatchable when they are status: 👀 ready for maintainer look, status: 🚀 automerge armed, or labeled clawsweeper:automerge.
  • Closed unmerged PRs are hatchable only when one of those hatchable labels is still present in the durable record.

Rarity: 🥚 common.
Trait: sparkles near resolved comments.
Image traits: location status garden; accessory lint brush; palette moss green and polished brass; mood bright-eyed; pose pointing at a small proof artifact; shell soft speckled shell; lighting cool dashboard glow; background delicate sparkle particles.
Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Brave Crabkin in ClawSweeper.

What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • Hatchability usually comes from sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness. A merged PR is already final, so merge makes the egg hatchable independently.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

yetval added a commit to yetval/openclaw that referenced this pull request May 24, 2026
Addresses ClawSweeper P1 review on openclaw#85896.

When retry budget is available but croner cannot resolve the natural next
slot for a cron schedule, clear nextRunAtMs (matching the existing
resolveCronNextRunWithLowerBound guard) instead of refiring on bare backoff,
which would reverse the unresolved-next-run protection from openclaw#66019.

Adds regression covering retryable overloaded_error with computeNextRunAtMs
returning undefined for a daily cron job.
yetval added a commit to yetval/openclaw that referenced this pull request May 24, 2026
Addresses second ClawSweeper P1 on openclaw#85896.

Previous patch used Math.min(naturalNext, backoffNext) while in retry budget,
which let high-frequency recurring schedules (e.g. an every-1s job with a
5s backoff) re-fire at their natural slot before the configured backoff
elapsed, weakening the existing retry-storm protection.

Switch to using backoffNext directly while in retry budget. This still
unblocks the daily-cron retry path from openclaw#85888 (backoffNext lands within
the same day, naturalNext is ~24h away) and now also preserves the backoff
floor for short-period recurring jobs.

Adds regression covering an every-1s job: nextRunAtMs must be >= endedAt +
everyMs (not the immediate natural slot), demonstrating the backoff floor.
@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added status: 🔁 re-review loop A fresh ClawSweeper review was explicitly requested after the latest review. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels May 24, 2026
yetval added a commit to yetval/openclaw that referenced this pull request May 24, 2026
Addresses ClawSweeper P2 on openclaw#85896.

The retry-budget branch in timer.ts now consults cron.retry.retryOn and
cron.retry.maxAttempts for recurring schedules, so the config contract
needs to reflect that recurring jobs also honor this knob. Updates the
type comments on CronRetryOn and CronConfig.retry, and rewrites the
Recurring retry accordion in docs/automation/cron-jobs.md to describe
the new behavior: same-day backoff retry within budget, fallback to
natural slot when exhausted, backoff floor preserved.
@openclaw-barnacle openclaw-barnacle Bot added the docs Improvements or additions to documentation label May 24, 2026
@clawsweeper clawsweeper Bot added status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed status: 🔁 re-review loop A fresh ClawSweeper review was explicitly requested after the latest review. labels May 24, 2026
yetval added a commit to yetval/openclaw that referenced this pull request May 24, 2026
Addresses second-round ClawSweeper P2 on openclaw#85896.

After broadening cron.retry to recurring jobs in the prior commits, the
gateway configuration reference at docs/gateway/configuration-reference.md
and the FIELD_HELP entries in src/config/schema.help.ts still described
cron.retry and cron.retry.maxAttempts as one-shot-only. Update both
surfaces to match the runtime contract: while a recurring job's error
matches retryOn and consecutiveErrors stays within maxAttempts the next
run is scheduled at the backoff slot rather than the natural cron/every
slot; once exhausted, the job falls back to its natural slot.
@openclaw-barnacle openclaw-barnacle Bot added the gateway Gateway runtime label May 24, 2026
@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

Re-review progress:

@clawsweeper clawsweeper Bot added status: 🔁 re-review loop A fresh ClawSweeper review was explicitly requested after the latest review. and removed status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels May 24, 2026
yetval added a commit to yetval/openclaw that referenced this pull request May 24, 2026
…l and backoff

Addresses third-round ClawSweeper P2 on openclaw#85896.

Prior docs commit said "falls back to its natural slot" on exhausted retry
budget, but the runtime keeps using resolveCronNextRunWithLowerBound (cron)
and Math.max(naturalNext, backoffNext) (every) for the exhausted branch,
which schedules no sooner than both the natural slot and the backoff floor.
Update configuration-reference.md, automation/cron-jobs.md, schema.help.ts,
and types.cron.ts to match.
@clawsweeper clawsweeper Bot added status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed status: 🔁 re-review loop A fresh ClawSweeper review was explicitly requested after the latest review. labels May 24, 2026
yetval added a commit to yetval/openclaw that referenced this pull request May 24, 2026
Addresses ClawSweeper P2 wording nit on openclaw#85896.

The configuration-reference.md maxAttempts summary still said a recurring
job "falls back to its natural schedule" while the paragraph below
described "later of natural and backoff". Make the summary line and the
exported CronRetryConfig.maxAttempts type comment use the same later-of
phrasing so docs, help, and types are all consistent.
…penclaw#85888)

The recurring cron error path in applyJobResult scheduled the next run as
max(naturalNext, backoffNext), so on daily schedules the ~24h-away natural
slot always dominated the short backoff. Transient provider failures (e.g.
MiniMax overloaded_error 503 during the early-morning Asia/Shanghai window)
were silently pushed to the next day instead of being retried, while
manual reruns at the same time succeeded.

While a recurring job's error matches cron.retry.retryOn and
consecutiveErrors stays within cron.retry.maxAttempts, schedule the next
run at the configured backoff slot rather than the natural cron/`every`
slot. Preserve the unresolved-next-run guard for cron schedules whose
naturalNext is undefined. Once retries are exhausted or the error is
permanent, fall back to max(naturalNext, backoffNext) so high-frequency
schedules cannot bypass the configured backoff after exhausting the
retry budget.

Updates the public surface to match the new contract:
- docs/gateway/configuration-reference.md (cron.retry, maxAttempts)
- docs/automation/cron-jobs.md (Recurring retry accordion)
- src/config/schema.help.ts (FIELD_HELP)
- src/config/types.cron.ts (CronRetryOn, CronRetryConfig.maxAttempts,
  CronConfig.retry)

Adds regression coverage:
- daily cron retry lands within the same day on retryable error
- high-frequency every-1s job preserves backoff floor on retryable error
- cron schedule with unresolved naturalNext clears nextRunAtMs on
  retryable error
- exhausted retry budget falls back to the natural slot

Closes openclaw#85888
@yetval
yetval force-pushed the fix/cron-error-backoff-min-bound-85888 branch from acc4e5f to 1c8a66c Compare May 24, 2026 03:51
@yetval

yetval commented May 24, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

Added live runtime proof to the PR body: real-Linux Fedora 43 / Node 22 / real applyJobResult outside the test harness with real fs writes. Three scenarios:

  1. Daily cron 0 5 * * * Asia/Shanghai + MiniMax overloaded_error 503 -> nextRunAtMs lands 30s later (05:03:14.264Z) instead of next-day (21:00:00.000Z, 15.95h away).
  2. Every-1s job + 503 -> waits 30s for the backoff floor instead of firing at the +800ms natural slot.
  3. Exhausted budget (consecutive 100 > maxAttempts 3) -> scheduledMode: natural_floor, resolves to the natural cron slot.

Captured live log lines and redacted tmp paths included in the PR body.

@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper could not start a re-review for this item.

Reason: re-review requires an open issue or PR.

@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 24, 2026
@yetval

yetval commented May 24, 2026

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Command router queued. I will update this comment with the next step.

Re-review progress:

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels May 24, 2026
@clawsweeper

clawsweeper Bot commented May 24, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper applied the proposed close for this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Improvements or additions to documentation gateway Gateway runtime merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: M status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cron jobs consistently fail with MiniMax 503 overload during early morning (05:00-07:30 CST), manual triggers succeed

1 participant