Skip to content

fix(agent): prevent sticky model fallback#75270

Open
Komzpa wants to merge 3 commits into
openclaw:mainfrom
Komzpa:codex/nonsticky-model-fallback
Open

fix(agent): prevent sticky model fallback#75270
Komzpa wants to merge 3 commits into
openclaw:mainfrom
Komzpa:codex/nonsticky-model-fallback

Conversation

@Komzpa

@Komzpa Komzpa commented Apr 30, 2026

Copy link
Copy Markdown

Summary

  • roll back temporary auto fallback model overrides after successful fallback attempts
  • keep session routing pointed at the selected model while still recording usage/cost for the actual fallback model used
  • update runner/session accounting coverage and add the Unreleased changelog entry

Root cause

Successful fallback candidates were persisted into session override state but only rolled back on errors/classified failures. Usage persistence also wrote providerUsed/modelUsed into the session identity, so one fallback run could pin later turns to the smaller fallback model even after the primary model recovered.

Validation

  • node scripts/test-projects.mjs src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/session.test.ts src/auto-reply/reply/followup-runner.test.ts

Real behavior proof

Behavior or issue addressed: A temporary model fallback should not make the session stick to the fallback model. After a primary-model rate limit sends one turn to a configured fallback, the next turn in the same session should try the configured primary again while usage/status still records the actual fallback runtime used for the fallback turn.

Real environment tested: Local source checkout at PR head c4f5337a7fdcc9f11c17ff6f42d8e8295fb77eed, Node v24.15.0, pnpm 11.1.0, isolated OPENCLAW_HOME=/var/tmp/openclaw-pr75270-proof/home, isolated workspace /var/tmp/openclaw-pr75270-proof/workspace, and a local OpenAI-compatible HTTP endpoint on 127.0.0.1. No real user session, live channel, or production OpenClaw home was used.

Exact steps or command run after this patch: 1. Configured agents.defaults.model.primary as primary-local/primary-model with fallbacks: ["fallback-local/fallback-model"].
2. Started a local OpenAI-compatible /v1/chat/completions server that returns four HTTP 429 responses for primary-model, then returns streaming success for fallback-model; after that, primary-model returns streaming success.
3. Ran two local embedded agent turns against the same session id:

/usr/bin/node openclaw.mjs agent --local --agent main --session-id pr75270-proof --thinking off --json --timeout 120 --message <proof message>

Evidence after fix: Copied terminal output from /var/tmp/openclaw-pr75270-proof/proof-output.json:

{
  "first": {
    "exitCode": 0,
    "text": "PR75270 fallback proof OK",
    "provider": "fallback-local",
    "model": "fallback-model",
    "fallbackAttempts": [
      {
        "provider": "primary-local",
        "model": "primary-model",
        "error": "429 proof primary rate limit",
        "reason": "rate_limit",
        "status": 429
      }
    ],
    "requestModels": [
      "primary-model",
      "primary-model",
      "primary-model",
      "primary-model",
      "fallback-model",
      "fallback-model"
    ],
    "storeAfterTurn": {
      "modelProvider": "fallback-local",
      "model": "fallback-model",
      "providerOverride": null,
      "modelOverride": null,
      "modelOverrideSource": null,
      "fallbackNoticeSelectedModel": null,
      "fallbackNoticeActiveModel": null
    }
  },
  "second": {
    "exitCode": 0,
    "text": "PR75270 primary recovered OK",
    "provider": "primary-local",
    "model": "primary-model",
    "fallbackAttempts": [],
    "requestModels": [
      "primary-model",
      "primary-model"
    ],
    "storeAfterTurn": {
      "modelProvider": "primary-local",
      "model": "primary-model",
      "providerOverride": null,
      "modelOverride": null,
      "modelOverrideSource": null,
      "fallbackNoticeSelectedModel": null,
      "fallbackNoticeActiveModel": null
    }
  },
  "allRequestModels": [
    "primary-model",
    "primary-model",
    "primary-model",
    "primary-model",
    "fallback-model",
    "fallback-model",
    "primary-model",
    "primary-model"
  ]
}

The runtime log also showed the fallback decision on the first turn:

[model-fallback/decision] model fallback decision: decision=candidate_failed requested=primary-local/primary-model candidate=primary-local/primary-model reason=rate_limit next=fallback-local/fallback-model detail=429 proof primary rate limit
[model-fallback/decision] model fallback decision: decision=candidate_succeeded requested=primary-local/primary-model candidate=fallback-local/fallback-model reason=unknown next=none

Observed result after fix: The first turn used the configured fallback after the synthetic primary returned 429, and fallbackAttempts recorded the primary failure. The same session's persisted auto override fields were clear after the fallback turn. The second turn, with the primary endpoint recovered, requested and completed on primary-local/primary-model with no fallback attempts. This verifies the session did not stay pinned to the fallback model.

What was not tested: This proof used a local OpenAI-compatible endpoint rather than a paid hosted provider, did not exercise real Telegram/WhatsApp delivery, and did not test provider-specific OAuth rotation. Those paths are covered separately by the automated tests listed above.

@clawsweeper

clawsweeper Bot commented Apr 30, 2026

Copy link
Copy Markdown
Contributor

Codex review: found issues before merge. Reviewed July 3, 2026, 11:49 PM ET / 03:49 UTC.

Summary
The PR changes fallback cleanup, session usage accounting, status rendering, tests, and docs so successful fallback attempts do not leave the session pinned to the fallback model.

PR surface: Source +617, Tests +1089, Docs 0. Total +1706 across 15 files.

Reproducibility: yes. for the behavior this PR changes: current main and v2026.6.11 persist auto fallback state and write actual provider/model usage into the session, while the PR proof demonstrates non-sticky after-fix behavior with a local endpoint. The remaining question is whether that should be the default or an opt-in product mode.

Review metrics: 1 noteworthy metric.

  • Fallback persistence default: 1 global default changed, 0 opt-in config surfaces added. The PR changes upgrade-sensitive fallback/session behavior without a compatibility-preserving policy knob.

Stored data model
Persistent data-model change detected: serialized state: src/auto-reply/reply/agent-runner.runreplyagent.e2e.test.ts, serialized state: src/auto-reply/reply/session-run-accounting.ts, serialized state: src/auto-reply/reply/session-usage.ts, serialized state: src/auto-reply/reply/session.test.ts, unknown-data-model-change: src/auto-reply/reply/session-usage.ts, unknown-data-model-change: src/auto-reply/reply/session.test.ts. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: partial_overlap
Canonical: #80502
Summary: This PR overlaps the canonical per-turn fallback persistence product issue but implements a global default change; the stale-origin bug and its active PR are adjacent, narrower work.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🧂 unranked krab
Proof: 🦞 diamond lobster
Patch quality: 🧂 unranked krab
Result: blocked by patch quality or review findings.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Get a maintainer decision on whether fallback persistence should remain sticky by default or become per-turn globally.
  • If per-turn behavior is desired, rework the PR into a default-preserving opt-in policy with config/schema/docs and upgrade tests.
  • Refresh the branch against current main after the product direction is settled.

Risk before merge

  • [P2] Merging as-is would replace the shipped sticky fallback plus five-minute primary probing behavior with per-turn primary retries, which can add repeated latency and provider churn when a primary stays unhealthy.
  • [P2] The diff clears persisted session model/auth/fallback-notice state after successful accounting, so upgrade behavior for existing auto-fallback sessions needs explicit maintainer acceptance.
  • [P2] The live PR is currently dirty against main, so any accepted direction still needs a refreshed merge result and focused fallback/session validation.

Maintainer options:

  1. Add opt-in per-turn fallback (recommended)
    Preserve the sticky fallback default and, if maintainers approve the product direction, add a documented config/schema mode for per-turn fallback with fresh-install and upgrade coverage.
  2. Accept the global behavior change
    Maintainers can intentionally choose per-turn fallback as the new default, but that should be an explicit compatibility decision with release-note context and targeted upgrade proof.
  3. Pause in favor of canonical work
    Pause or close this branch if the desired path is to land the narrower stale-origin fix and decide optional per-turn fallback in the canonical product issue.

Next step before merge

  • [P2] Manual review is needed because the blocker is fallback persistence product/compatibility policy plus a dirty branch, not a narrow mechanical repair.

Security
Cleared: The diff changes TypeScript model/session/auth routing state, tests, and docs without new dependencies, workflows, lockfiles, permissions, scripts, artifact downloads, or secret-storage paths.

Review findings

  • [P1] Preserve sticky fallback as the default — src/auto-reply/reply/agent-runner.ts:1786-1789
Review details

Best possible solution:

Preserve sticky fallback as the default, decide optional per-turn fallback in #80502, and keep #92819 scoped to the stale-origin bug.

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

Yes for the behavior this PR changes: current main and v2026.6.11 persist auto fallback state and write actual provider/model usage into the session, while the PR proof demonstrates non-sticky after-fix behavior with a local endpoint. The remaining question is whether that should be the default or an opt-in product mode.

Is this the best way to solve the issue?

No, not as-is. The narrower maintainable path is to preserve sticky fallback by default, add any per-turn behavior only behind a maintainer-approved config contract, and leave the stale-origin bug to #92819.

Full review comments:

  • [P1] Preserve sticky fallback as the default — src/auto-reply/reply/agent-runner.ts:1786-1789
    Current main and v2026.6.11 document auto fallback as sticky with a five-minute primary probe, and Add optional per-turn model fallback without persisting session override #80502 tracks per-turn fallback as a default-preserving opt-in policy. This cleanup runs after every successful accounted fallback turn, so existing deployments with an unhealthy primary will retry it every turn and churn provider/auth routing; preserve the sticky default and add a maintainer-approved opt-in mode if per-turn fallback should exist.
    Confidence: 0.87

Overall correctness: patch is incorrect
Overall confidence: 0.88

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 9d68f877ac3e.

Label changes

Label justifications:

  • P1: The PR targets a real user-facing model routing/session pinning problem, but the current branch still needs urgent compatibility/product review before merge.
  • merge-risk: 🚨 compatibility: The diff changes the shipped fallback persistence default for existing sessions and deployments.
  • merge-risk: 🚨 auth-provider: Clearing auto fallback model state changes later provider/model routing and can affect auth-profile selection after transient failures.
  • merge-risk: 🚨 session-state: The PR rewrites persisted session model override, fallback origin, auth override, and fallback notice state after successful runs.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🦞 diamond lobster and patch quality is 🧂 unranked krab.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (terminal): The PR body includes after-fix terminal proof from an isolated local OpenClaw setup with a local OpenAI-compatible endpoint showing one fallback turn followed by primary recovery.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix terminal proof from an isolated local OpenClaw setup with a local OpenAI-compatible endpoint showing one fallback turn followed by primary recovery.
Evidence reviewed

PR surface:

Source +617, Tests +1089, Docs 0. Total +1706 across 15 files.

View PR surface stats
Area Files Added Removed Net
Source 7 681 64 +617
Tests 6 1134 45 +1089
Docs 2 8 8 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 15 1823 117 +1706

What I checked:

Likely related people:

  • steipete: Peter Steinberger authored the safe fallback persistence implementation, expanded the model fallback guide, and later added auto fallback transition/probe behavior that defines the current sticky fallback contract. (role: fallback behavior feature-history contributor; confidence: high; commits: fe72474153da, d01cb5ecc643, 4b0f16d496e5; files: src/auto-reply/reply/agent-runner-execution.ts, src/auto-reply/reply/agent-runner.ts, docs/concepts/model-failover.md)
  • vincentkoc: Vincent Koc authored the per-agent defaults and safe model fallback feature that established much of the fallback selection behavior this PR changes. (role: introduced fallback feature; confidence: high; commits: c96a12aeb9e8; files: src/agents/agent-scope.ts, src/auto-reply/reply/model-selection.ts)
  • Frank Yang: Frank Yang authored session reset cleanup for auto-fallback model override fields, adjacent to safe clearing of persisted fallback state. (role: adjacent session-state contributor; confidence: medium; commits: 5d46e4dc4f45; files: src/gateway/session-reset-service.ts, src/config/sessions/types.ts, src/auto-reply/reply/agent-runner-execution.ts)
  • hoyyeva: Eva H authored the merged compatibility fix preventing fallback persistence from clobbering explicit user model picks in the same runner path. (role: adjacent compatibility contributor; confidence: medium; commits: 3b139862142d; files: src/auto-reply/reply/agent-runner-execution.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@Komzpa
Komzpa force-pushed the codex/nonsticky-model-fallback branch from 08e966c to d3789d8 Compare April 30, 2026 21:38
@Komzpa
Komzpa marked this pull request as ready for review April 30, 2026 21:38
@Komzpa
Komzpa force-pushed the codex/nonsticky-model-fallback branch from d3789d8 to 715de76 Compare April 30, 2026 21:39
@Komzpa

Komzpa commented Apr 30, 2026

Copy link
Copy Markdown
Author

Addressed the ClawSweeper follow-up on the current head:

  • added the Unreleased changelog entry for Agents/fallback with contributor credit
  • added/updated runner-level coverage for success-path fallback selection rollback and selected-vs-actual model persistence
  • rebased on latest main
  • validation: node scripts/test-projects.mjs src/auto-reply/reply/agent-runner-execution.test.ts src/auto-reply/reply/session.test.ts src/auto-reply/reply/followup-runner.test.ts (169 passed)

@Komzpa
Komzpa force-pushed the codex/nonsticky-model-fallback branch 2 times, most recently from 51c6e44 to bee2196 Compare May 5, 2026 11:27
@openclaw-barnacle openclaw-barnacle Bot added the triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. label May 5, 2026
@Komzpa
Komzpa force-pushed the codex/nonsticky-model-fallback branch from bee2196 to 9e24869 Compare May 6, 2026 10:50
@openclaw-barnacle openclaw-barnacle Bot added the docs Improvements or additions to documentation label May 6, 2026
@Komzpa
Komzpa force-pushed the codex/nonsticky-model-fallback branch from 9e24869 to cf59a66 Compare May 6, 2026 10:59
@Komzpa
Komzpa force-pushed the codex/nonsticky-model-fallback branch from cf59a66 to 62d6741 Compare May 13, 2026 20:47

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 62d67410f9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/auto-reply/reply/agent-runner.ts Outdated
@Komzpa
Komzpa force-pushed the codex/nonsticky-model-fallback branch from 62d6741 to a60346b Compare May 13, 2026 21:04

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 50d070ca82

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/auto-reply/reply/agent-runner-execution.ts Outdated
@Komzpa
Komzpa force-pushed the codex/nonsticky-model-fallback branch 2 times, most recently from e977025 to 85e5029 Compare May 14, 2026 07:24
@Komzpa
Komzpa force-pushed the codex/nonsticky-model-fallback branch from 6325382 to 3df47b1 Compare May 14, 2026 08:41
@openclaw-barnacle openclaw-barnacle Bot added the cli CLI command changes label May 14, 2026
@Komzpa
Komzpa force-pushed the codex/nonsticky-model-fallback branch from 327d20f to 60474b9 Compare May 14, 2026 08:58

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 60474b9601

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/auto-reply/reply/agent-runner.ts
Comment thread src/status/status-text.ts
@Komzpa
Komzpa force-pushed the codex/nonsticky-model-fallback branch from 825ae6d to 6281bf2 Compare May 14, 2026 11:12
@Komzpa
Komzpa force-pushed the codex/nonsticky-model-fallback branch from 208a95d to f6ea2bc Compare May 24, 2026 06:03

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f6ea2bce43

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/auto-reply/reply/followup-runner.ts Outdated
@Komzpa
Komzpa force-pushed the codex/nonsticky-model-fallback branch 2 times, most recently from 99985d6 to 1d3df34 Compare May 28, 2026 00:28
@chatgpt-codex-connector

Copy link
Copy Markdown
Contributor

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@Komzpa
Komzpa force-pushed the codex/nonsticky-model-fallback branch from 1d3df34 to aae1deb Compare May 28, 2026 01:56

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: aae1deb4ac

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/auto-reply/reply/followup-runner.ts Outdated
runResult.meta?.agentMeta?.provider ?? fallbackProvider ?? queued.run.provider;
const fallbackStateEntry =
(replySessionKey ? sessionStore?.[replySessionKey] : undefined) ?? activeSessionEntry;
const autoFallbackSelectionToClear = snapshotAutoFallbackSelection(fallbackStateEntry);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Gate auto-fallback cleanup for preserved followups

When queued.run.inputProvenance is an inter-session/tool-mediated source, preserveUserFacingSessionState is true and this runner already preserves model persistence and fallback notices, but this snapshot is still taken unconditionally and later drives cleanup at if (autoFallbackSelectionToClear && didPersistRunSessionUsage). In that preserved-followup scenario, a successful background followup can clear the session's auto fallback override/status even though user-facing session state is supposed to remain unchanged; fresh evidence beyond the prior fallback-notice comment is that the new cleanup snapshot is not guarded by !preserveUserFacingSessionState.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector

Copy link
Copy Markdown
Contributor

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown
Contributor

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@openclaw-barnacle

Copy link
Copy Markdown

This pull request has been automatically marked as stale due to inactivity.
Please add updates or it will be closed.

@openclaw-barnacle openclaw-barnacle Bot added the stale Marked as stale due to inactivity label Jun 14, 2026
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. labels Jun 14, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the stale Marked as stale due to inactivity label Jun 15, 2026
@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. proof: sufficient ClawSweeper judged the real behavior proof convincing. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. 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 Jun 15, 2026
@openclaw-barnacle

Copy link
Copy Markdown

This pull request has been automatically marked as stale due to inactivity.
Please add updates or it will be closed.

@openclaw-barnacle openclaw-barnacle Bot added the stale Marked as stale due to inactivity label Jul 19, 2026
@clawsweeper

clawsweeper Bot commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper status: review started.

I am starting a fresh review of this pull request: fix(agent): prevent sticky model fallback This is item 1/1 in the current shard. Shard 4/22.

This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking.

Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted.

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 merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P1 High-priority user-facing bug, regression, or broken workflow. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: XL stale Marked as stale due to inactivity status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants