Skip to content

fix(google): preserve Vertex ADC catalog auth#90609

Merged
sallyom merged 3 commits into
openclaw:mainfrom
849261680:fix/90506-google-vertex-adc
Jun 5, 2026
Merged

fix(google): preserve Vertex ADC catalog auth#90609
sallyom merged 3 commits into
openclaw:mainfrom
849261680:fix/90506-google-vertex-adc

Conversation

@849261680

@849261680 849261680 commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Summary

What problem does this PR solve?

  • Fixes generated models.json and plugin catalog generation dropping static google-vertex catalog providers when auth is available through ADC evidence instead of an API-key env var or auth profile.
  • Reuses the existing non-secret gcp-vertex-credentials marker instead of writing credential material or adding new config.
  • Registers the Google provider-owned config marker hook so the built/plugin discovery path sees the same ADC marker as the core planner path.

Why does this matter now?

What is the intended outcome?

  • ADC-backed Google Vertex catalog rows remain writable and embedded runtime model resolution can find google-vertex/* models while the Google transport continues resolving bearer auth from ADC at request time.

What is intentionally out of scope?

  • No new provider config, env var, doctor migration, or Google transport request behavior change.
  • No live Google Cloud credential changes.

What does success look like?

  • With GOOGLE_APPLICATION_CREDENTIALS, either GOOGLE_CLOUD_PROJECT or GCLOUD_PROJECT, and GOOGLE_CLOUD_LOCATION present, generated catalog data keeps the google-vertex provider with apiKey: "gcp-vertex-credentials" and its static model rows.

What should reviewers focus on?

  • Whether the core config writer accepts only known non-secret auth-evidence markers.
  • Whether the Google plugin, not core, owns the Google Vertex ADC marker policy for provider discovery.

Linked context

Which issue does this close?

Closes #90506

Which issues, PRs, or discussions are related?

Related #65715, #56253

Was this requested by a maintainer or owner?

  • Requested through maintainer-side issue repair workflow.

Real behavior proof (required for external PRs)

Behavior addressed: Google Vertex ADC-backed static catalog providers were filtered from generated model config, making google-vertex/* fail as model_not_found at runtime despite valid ADC evidence.

Real environment tested: Local OpenClaw source checkout on macOS with a temporary ADC application_default_credentials.json file, process env GOOGLE_APPLICATION_CREDENTIALS, GOOGLE_CLOUD_PROJECT, and GOOGLE_CLOUD_LOCATION, using the real ensureOpenClawModelsJson startup catalog-generation entry point.

Exact steps or command run after this patch: node --import tsx source-checkout probe that created a temporary ADC credentials file, set Google Vertex ADC process env, called ensureOpenClawModelsJson({ models: { providers: {} } }, agentDir, { workspaceDir, providerDiscoveryProviderIds: ["google-vertex"], providerDiscoveryEntriesOnly: true, providerDiscoveryTimeoutMs: 60000 }), and read the generated plugins/google/catalog.json sidecar.

Evidence after fix: Console output from the generated catalog probe:

{
  "wrote": true,
  "pluginFiles": [
    "catalog.json"
  ],
  "rootProviderIds": [],
  "generatedBy": "openclaw-plugin-model-catalog-v1",
  "googleCatalogProviderIds": [
    "google-vertex"
  ],
  "googleVertexApiKey": "gcp-vertex-credentials",
  "googleVertexModelCount": 6,
  "sampleGoogleVertexModels": [
    "gemini-2.5-pro",
    "gemini-2.5-flash",
    "gemini-2.5-flash-lite"
  ]
}

Observed result after fix: The same startup entries-only generation path now writes the Google plugin catalog sidecar, keeps the google-vertex provider row, preserves the existing non-secret gcp-vertex-credentials marker, and keeps static model rows without persisting credential material.

What was not tested: A live Vertex AI network request with real Google Cloud ADC credentials. No real Google Cloud credentials were available, and the proof intentionally uses only local ADC evidence and generated config output.

Before evidence: The new models-config regression failed before the implementation because the google-vertex provider was filtered out of generated models config. A local CLI attempt with temp ADC env reproduced the reported model_not_found behavior before the plugin-owned config marker hook and implicit static-catalog auth fill were added.

Tests and validation

Which commands did you run?

  • node scripts/run-vitest.mjs src/agents/models-config.applies-config-env-vars.test.ts before implementation, expected failure observed in the new regression.
  • node scripts/run-vitest.mjs src/agents/models-config.applies-config-env-vars.test.ts src/agents/embedded-agent-runner/model.test.ts extensions/google/transport-stream.test.ts
  • node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.test.src.json --incremental --tsBuildInfoFile /tmp/openclaw-google-vertex-adc-test-src.tsbuildinfo
  • node scripts/run-vitest.mjs extensions/google/index.test.ts
  • node scripts/run-vitest.mjs src/agents/models-config.applies-config-env-vars.test.ts src/agents/embedded-agent-runner/model.test.ts extensions/google/transport-stream.test.ts extensions/google/index.test.ts
  • node --import tsx source-checkout Google provider ADC marker probe
  • node --import tsx source-checkout ensureOpenClawModelsJson generated catalog probe
  • node scripts/run-vitest.mjs src/agents/models-config.providers.implicit.discovery-scope.test.ts
  • node scripts/run-vitest.mjs extensions/google/index.test.ts
  • git diff --check
  • .agents/skills/autoreview/scripts/autoreview --mode local

What regression coverage was added or updated?

  • Added a models.json planning regression that creates a temp ADC credentials file, provides Google Cloud project/location env, omits auth profiles, and asserts the generated google-vertex provider retains static model rows with gcp-vertex-credentials.
  • Added a Google provider plugin hook regression that asserts ADC evidence resolves to the same non-secret config marker for both GOOGLE_CLOUD_PROJECT and GCLOUD_PROJECT project env paths.
  • Added an entries-only static catalog regression that asserts generated implicit google-vertex rows are filled from ADC auth evidence before writable filtering.

What failed before this fix, if known?

  • The new models-config regression failed before the core implementation because the google-vertex provider was filtered out of generated models config.
  • A local CLI attempt with temp ADC env reproduced model_not_found before the plugin-owned config marker hook was added.

If no test was added, why not?

  • N/A; focused regression coverage was added.

Risk checklist

Did user-visible behavior change? (Yes/No)

Yes. ADC-backed Google Vertex users should stop seeing runtime model_not_found caused by generated catalog omission.

Did config, environment, or migration behavior change? (Yes/No)

Yes, narrowly. Existing ADC env/file evidence can now populate the existing non-secret auth marker in generated provider config; no new config or env surface was added.

Did security, auth, secrets, network, or tool execution behavior change? (Yes/No)

Yes, narrowly in auth config generation. The code only persists known non-secret markers and still avoids writing plaintext env values.

What is the highest-risk area?

  • Accidentally treating plaintext env credentials as writable markers.

How is that risk mitigated?

  • The implementation accepts resolveEnvApiKey results only when isNonSecretApiKeyMarker(..., { includeEnvVarName: false }) recognizes the value, while env API keys continue to be represented by env var names via the existing resolveEnvApiKeyVarName path.
  • The Google plugin hook only returns the existing gcp-vertex-credentials marker when ADC file, project, and location evidence are all present.

Current review state

What is the next action?

  • Maintainer review and CI.

What is still waiting on author, maintainer, CI, or external proof?

  • CI and optional maintainer live Vertex ADC verification if credentials are available.

Which bot or reviewer comments were addressed?

@openclaw-barnacle openclaw-barnacle Bot added agents Agent runtime and tooling size: S triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. labels Jun 5, 2026
@clawsweeper

clawsweeper Bot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed June 5, 2026, 7:47 AM ET / 11:47 UTC.

Summary
The branch fills missing Google Vertex provider apiKeys from recognized ADC auth-evidence markers in generated models config, registers Google provider discovery hooks, and adds regression tests.

PR surface: Source +61, Tests +146. Total +207 across 8 files.

Reproducibility: yes. Source inspection shows current main drops non-env ADC auth evidence before the writable-provider gate, and the linked issue reports the resulting google-vertex model_not_found runtime failure on released builds.

Review metrics: 1 noteworthy metric.

  • Auth/config surfaces: 1 core fill path changed, 2 Google hook surfaces added, 0 new env/config keys. The PR changes generated provider auth behavior while avoiding a new operator-facing config or environment surface.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🐚 platinum hermit
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

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

Rank-up moves:

  • [P2] Wait for required CI to finish on the current head.
  • [P2] Optionally add a maintainer live Vertex ADC smoke if credentials are available.

Risk before merge

  • [P1] Auth/config generation is upgrade-sensitive: incorrect marker handling could either keep dropping google-vertex catalog rows or write an inappropriate marker for ADC users.
  • [P1] The supplied proof exercises generated catalog output with local ADC evidence, but not a live Vertex network request with real Google Cloud credentials.

Maintainer options:

  1. Accept generated-catalog proof after CI (recommended)
    Maintainers can accept the remaining no-live-Vertex risk if required CI stays green because the failed generated-catalog path is covered by terminal proof and regression tests.
  2. Add live Vertex ADC smoke
    A maintainer with Google Cloud credentials can run one redacted live Vertex turn before merge to prove the request-time path too.

Next step before merge

  • No repair-lane work is indicated; the remaining action is normal maintainer review, required CI, and optional live Vertex ADC validation.

Security
Cleared: No concrete security or supply-chain concern was found; the patch has no dependency/workflow changes and persists only recognized non-secret auth markers.

Review details

Best possible solution:

Land the guarded marker-based fix after required CI and maintainer auth-provider review; run a live Vertex ADC smoke only if credentials are readily available.

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

Yes. Source inspection shows current main drops non-env ADC auth evidence before the writable-provider gate, and the linked issue reports the resulting google-vertex model_not_found runtime failure on released builds.

Is this the best way to solve the issue?

Yes. The PR repairs the existing auth-evidence-to-generated-config path and reuses the provider-owned non-secret marker, which is narrower than adding config, relaxing the writable gate, or requiring manual auth-profile setup.

AGENTS.md: found and applied where relevant.

Codex review notes: model gpt-5.5, reasoning high; reviewed against 12a569109b60.

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix terminal output from the real catalog-generation entry point showing google-vertex retained with gcp-vertex-credentials and model rows.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): The PR body includes after-fix terminal output from the real catalog-generation entry point showing google-vertex retained with gcp-vertex-credentials and model rows.
  • remove rating: 🦪 silver shellfish: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.
  • remove status: 📣 needs proof: Current PR status label is status: 👀 ready for maintainer look.

Label justifications:

  • P1: The PR targets a recent provider-auth regression that can block Google Vertex ADC-backed agent turns for affected users.
  • merge-risk: 🚨 auth-provider: The diff changes how Google Vertex auth evidence is converted into generated model config, which can affect model routing and credential handling.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): The PR body includes after-fix terminal output from the real catalog-generation entry point showing google-vertex retained with gcp-vertex-credentials and model rows.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix terminal output from the real catalog-generation entry point showing google-vertex retained with gcp-vertex-credentials and model rows.
Evidence reviewed

PR surface:

Source +61, Tests +146. Total +207 across 8 files.

View PR surface stats
Area Files Added Removed Net
Source 5 64 3 +61
Tests 3 146 0 +146
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 8 210 3 +207

What I checked:

Likely related people:

  • steipete: Recent history and blame tie this account to the plugin model catalog refactor and current models-config writable-provider behavior implicated by the regression. (role: recent area contributor; confidence: high; commits: 51b5f75b92f7, 697bafa9c97d; files: src/agents/models-config.plan.ts, src/agents/models-config.providers.secret-helpers.ts, extensions/google/vertex-adc.ts)
  • shakkernerd: GitHub commit history shows this account added Google Vertex manifest setup/auth-evidence metadata and manifest-backed model-list auth work that this PR depends on. (role: introduced manifest auth evidence; confidence: medium; commits: dec5de8a2cda, 69181342e1e6; files: extensions/google/openclaw.plugin.json, src/agents/model-auth-env.ts)
  • damianFelixPago: GitHub commit history shows this account on the production Google Vertex ADC support in the transport and vertex-adc helper paths adjacent to this fix. (role: ADC feature contributor; confidence: medium; commits: f09b4ebe314e; files: extensions/google/vertex-adc.ts, extensions/google/transport-stream.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.

@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. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. labels Jun 5, 2026
@openclaw-barnacle openclaw-barnacle Bot added extensions: google proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. labels Jun 5, 2026
@849261680

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 5, 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 rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. labels Jun 5, 2026
@849261680

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 5, 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 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: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jun 5, 2026
@sallyom sallyom self-assigned this Jun 5, 2026
@sallyom

sallyom commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Merging, accepting risk of [P1] Auth/config generation is upgrade-sensitive: incorrect marker handling could either keep dropping google-vertex catalog rows or write an inappropriate marker for ADC users:

  • The patch does not introduce a new marker or config surface; it reuses the existing gcp-vertex-credentials contract.
  • It only accepts values that pass isNonSecretApiKeyMarker(..., { includeEnvVarName: false }), so plaintext env values and arbitrary all-caps strings are not persisted through this new path.
  • The Google hook only returns the marker when ADC file evidence plus project and location env are present.
  • Focused tests cover both the generated models.json path and the static plugin catalog path.

@sallyom sallyom merged commit a4f7e4c into openclaw:main Jun 5, 2026
203 of 212 checks passed
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 6, 2026
* fix: preserve Google Vertex ADC catalog auth

* fix: register Google Vertex ADC config marker

* fix: fill Vertex ADC static catalog auth
849261680 added a commit to 849261680/openclaw that referenced this pull request Jun 7, 2026
* fix: preserve Google Vertex ADC catalog auth

* fix: register Google Vertex ADC config marker

* fix: fill Vertex ADC static catalog auth
wangmiao0668000666 pushed a commit to wangmiao0668000666/openclaw that referenced this pull request Jun 9, 2026
* fix: preserve Google Vertex ADC catalog auth

* fix: register Google Vertex ADC config marker

* fix: fill Vertex ADC static catalog auth
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request Jun 9, 2026
…26.6.5) (#963)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/openclaw/openclaw](https://openclaw.ai) ([source](https://github.com/openclaw/openclaw)) | patch | `2026.6.1` → `2026.6.5` |

---

### Release Notes

<details>
<summary>openclaw/openclaw (ghcr.io/openclaw/openclaw)</summary>

### [`v2026.6.5`](https://github.com/openclaw/openclaw/blob/HEAD/CHANGELOG.md#202665)

[Compare Source](openclaw/openclaw@v2026.6.1...v2026.6.5)

##### Highlights

- QQBot now strips model reasoning/thinking scaffolding before native delivery, preventing raw `<thinking>` content from leaking into channel replies. ([#&#8203;89913](openclaw/openclaw#89913), [#&#8203;90132](openclaw/openclaw#90132)) Thanks [@&#8203;openperf](https://github.com/openperf).
- MCP tool results now coerce `resource_link`, `resource`, `audio`, malformed image, and future non-text/image blocks at the materialize boundary, preventing Anthropic 400s and poisoned session history after a tool returns richer MCP content. ([#&#8203;90710](openclaw/openclaw#90710), [#&#8203;90728](openclaw/openclaw#90728)) Thanks [@&#8203;RanSHammer](https://github.com/RanSHammer) and [@&#8203;849261680](https://github.com/849261680).
- Anthropic extended-thinking sessions recover after prompt-cache expiry or Gateway restart because stream start events wait for `message_start`, letting pre-generation signature errors trigger the existing recovery retry. ([#&#8203;90667](openclaw/openclaw#90667), [#&#8203;90697](openclaw/openclaw#90697)) Thanks [@&#8203;openperf](https://github.com/openperf).
- Parallel is now a bundled `web_search` provider with `PARALLEL_API_KEY` discovery, guarded endpoint handling, cache-safe session ids, onboarding picker support, and docs. ([#&#8203;85158](openclaw/openclaw#85158)) Thanks [@&#8203;NormallyGaussian](https://github.com/NormallyGaussian).
- Google Vertex ADC users get static catalog rows and runtime model resolution again, while single-provider cooldown recovery and memory adapter status checks are more reliable. ([#&#8203;90506](openclaw/openclaw#90506), [#&#8203;90609](openclaw/openclaw#90609), [#&#8203;90717](openclaw/openclaw#90717), [#&#8203;90816](openclaw/openclaw#90816)) Thanks [@&#8203;849261680](https://github.com/849261680).
- Matrix can preflight voice notes before mention gating, preserve thread reads/replies through Matrix relations pagination, and carry QA coverage for voice and thread flows. ([#&#8203;78016](openclaw/openclaw#78016), [#&#8203;90415](openclaw/openclaw#90415))
- Auth and plugin install state is more durable: auth profiles now live in SQLite, official npm plugin install records keep their trusted pins, and prerelease fallback integrity checks avoid carrying stale integrity forward. ([#&#8203;89102](openclaw/openclaw#89102), [#&#8203;88585](openclaw/openclaw#88585))
- macOS node mode no longer silently self-reconnects away from a healthy direct Gateway session, reducing unexpected companion app session churn. ([#&#8203;90668](openclaw/openclaw#90668), [#&#8203;90815](openclaw/openclaw#90815)) Thanks [@&#8203;vrurg](https://github.com/vrurg).
- Upgrade and service paths are safer: cron legacy JSON stores migrate during doctor preflight, service env placeholders no longer mask state-dir secrets, WhatsApp startup waits are bounded, and disabled WhatsApp accounts tear down on config reload. ([#&#8203;90072](openclaw/openclaw#90072), [#&#8203;90208](openclaw/openclaw#90208), [#&#8203;90277](openclaw/openclaw#90277), [#&#8203;90488](openclaw/openclaw#90488), [#&#8203;90486](openclaw/openclaw#90486), [#&#8203;87951](openclaw/openclaw#87951), [#&#8203;87965](openclaw/openclaw#87965)) Thanks [@&#8203;MonkeyLeeT](https://github.com/MonkeyLeeT), [@&#8203;sallyom](https://github.com/sallyom), [@&#8203;mcaxtr](https://github.com/mcaxtr), and [@&#8203;MukundaKatta](https://github.com/MukundaKatta).

##### Changes

- Search/providers: add the Parallel bundled web-search plugin, live provider tests, registration contracts, onboarding/docs wiring, and guarded `api.parallel.ai/v1/search` support. ([#&#8203;85158](openclaw/openclaw#85158)) Thanks [@&#8203;NormallyGaussian](https://github.com/NormallyGaussian).
- Matrix/channels: add voice-message preflight and thread-aware read/reply behavior, including Matrix QA scenario wiring and docs for voice-message behavior. ([#&#8203;78016](openclaw/openclaw#78016), [#&#8203;90415](openclaw/openclaw#90415))
- Skills/ClawHub: install ClawHub skills backed by GitHub repositories through the resolved install API, download the pinned GitHub commit, keep install-policy checks, and report install telemetry after success. ([#&#8203;90478](openclaw/openclaw#90478)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- Google Chat/channels: add native approval card actions and click handling so Google Chat approvals use platform-native cards instead of generic message flow.
- Mobile: Android provider/model screens now surface expiring, unavailable, unresolved, and attention states more clearly, while iOS settings and Talk tabs keep diagnostics, gateway rows, attachment labels, and unavailable Talk controls reachable.
- Memory: QMD search can use the new rerank toggle, and memory adapter status uses the resolved default model identity when checking plain status. ([#&#8203;61834](openclaw/openclaw#61834))
- Docs/tooling: add Parallel search docs, refresh weather-skill guidance toward `web_fetch`, clarify legacy `openai-codex` auth, document release/test helper scripts, and tighten changed-test routing docs for CI/debugging work. ([#&#8203;90028](openclaw/openclaw#90028), [#&#8203;90250](openclaw/openclaw#90250)) Thanks [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev).
- Release/process: switch release trains to `YYYY.M.PATCH` monthly patch numbering, keep pre-transition tags compatible, and pin the June 2026 floor at `2026.6.5` after the published beta.
- Platform maintenance: refresh Android, Swift/macOS, Docker, CodeQL, Buildx, Docker build/push, and Codex Action dependencies for this release train. ([#&#8203;74980](openclaw/openclaw#74980), [#&#8203;81757](openclaw/openclaw#81757), [#&#8203;86481](openclaw/openclaw#86481), [#&#8203;86483](openclaw/openclaw#86483), [#&#8203;90601](openclaw/openclaw#90601))
- QQBot: add `/bot-group-allways on|off` slash command (with named-account and default-account support) to toggle whether group messages require an `@mention` before the bot replies, and clear the runtime config snapshot after the write so the new account-level `defaultRequireMention` takes effect immediately without restart. ([#&#8203;91423](openclaw/openclaw#91423)) Thanks [@&#8203;cxyhhhhh](https://github.com/cxyhhhhh).

##### Fixes

- Channel content boundaries: QQBot now strips reasoning/thinking tags before sending, preserving final answers while hiding internal model narration from users. ([#&#8203;89913](openclaw/openclaw#89913), [#&#8203;90132](openclaw/openclaw#90132)) Thanks [@&#8203;openperf](https://github.com/openperf).
- Agents/MCP/providers: coerce non-text/image MCP tool-result blocks before they reach provider converters, preserving valid images and turning richer MCP content into text instead of malformed image blocks. ([#&#8203;90710](openclaw/openclaw#90710), [#&#8203;90728](openclaw/openclaw#90728)) Thanks [@&#8203;RanSHammer](https://github.com/RanSHammer) and [@&#8203;849261680](https://github.com/849261680).
- Anthropic/Codex/ACP/agent recovery: defer Anthropic stream start events until `message_start`, strip stale compaction thinking signatures before Anthropic replay, detect unsigned thinking-only stalls, refresh prompt fences after compaction writes, reject empty completion handoffs, preserve parent streaming-off overrides/shared progress commentary, forward heartbeat metadata to context-engine hooks, and cover Codex session/thread migration edge cases. ([#&#8203;90667](openclaw/openclaw#90667), [#&#8203;90697](openclaw/openclaw#90697), [#&#8203;90163](openclaw/openclaw#90163), [#&#8203;90108](openclaw/openclaw#90108), [#&#8203;89874](openclaw/openclaw#89874), [#&#8203;89505](openclaw/openclaw#89505), [#&#8203;90632](openclaw/openclaw#90632), [#&#8203;89302](openclaw/openclaw#89302), [#&#8203;90729](openclaw/openclaw#90729), [#&#8203;90317](openclaw/openclaw#90317), [#&#8203;90319](openclaw/openclaw#90319)) Thanks [@&#8203;openperf](https://github.com/openperf), [@&#8203;100yenadmin](https://github.com/100yenadmin), and [@&#8203;ooiuuii](https://github.com/ooiuuii).
- Provider/model resolution: preserve Google Vertex ADC auth markers in generated catalogs, re-probe a single-provider primary after cooldown, share Codex model visibility, fail closed for unknown model auth, preserve Codex alias availability, keep unresolved profile refs unknown, and avoid resolving auth while listing models. ([#&#8203;90506](openclaw/openclaw#90506), [#&#8203;90609](openclaw/openclaw#90609), [#&#8203;90717](openclaw/openclaw#90717), [#&#8203;90702](openclaw/openclaw#90702)) Thanks [@&#8203;849261680](https://github.com/849261680).
- Gateway/macOS/mobile: avoid duplicate Gateway probe warnings by identity, rate-limit node pairing requests while preserving paired-node reconnects, keep macOS node mode on a healthy direct Gateway session, keep iOS diagnostics and gateway rows reachable, and avoid Linux ARM Gradle resource tasks during Android builds. ([#&#8203;85791](openclaw/openclaw#85791), [#&#8203;90147](openclaw/openclaw#90147), [#&#8203;90668](openclaw/openclaw#90668), [#&#8203;90815](openclaw/openclaw#90815)) Thanks [@&#8203;giodl73-repo](https://github.com/giodl73-repo) and [@&#8203;vrurg](https://github.com/vrurg).
- TUI/chat/Workboard/auto-reply: optimistic user messages stay stable across stale history reloads, runId reassignment, and abort windows instead of disappearing, jumping, or lingering as ghost rows; Workboard stale lifecycle bulk updates no longer overwrite newer status/provenance; message-tool sends now count as delivery. ([#&#8203;86205](openclaw/openclaw#86205), [#&#8203;89600](openclaw/openclaw#89600), [#&#8203;88592](openclaw/openclaw#88592), [#&#8203;90123](openclaw/openclaw#90123)) Thanks [@&#8203;RomneyDa](https://github.com/RomneyDa).
- Cron/update/service env: doctor config preflight now migrates legacy cron JSON stores into SQLite before runtime reads, service env planning skips unresolved placeholders that would mask state-dir `.env` values, and session transcript rewrites keep registry markers/discriminants consistent. ([#&#8203;90072](openclaw/openclaw#90072), [#&#8203;90208](openclaw/openclaw#90208), [#&#8203;90277](openclaw/openclaw#90277), [#&#8203;90488](openclaw/openclaw#90488)) Thanks [@&#8203;MonkeyLeeT](https://github.com/MonkeyLeeT) and [@&#8203;sallyom](https://github.com/sallyom).
- Security/config/tooling: guard MCP HTTP redirects, protect global agent config defaults, and keep release/test/tooling proof failures bounded and explicit. ([#&#8203;89732](openclaw/openclaw#89732), [#&#8203;90145](openclaw/openclaw#90145))
- Channels: WhatsApp restarts when per-account config changes, bounds background startup waits, closes failed sockets, and preserves reconnect behavior; Mattermost slash commands keep their state on `globalThis`; Feishu streaming cards preserve full merged content; voice-call tracks Twilio streams after connect; ClickClack reply tools respect `toolsAllow`. ([#&#8203;87951](openclaw/openclaw#87951), [#&#8203;87965](openclaw/openclaw#87965), [#&#8203;90486](openclaw/openclaw#90486), [#&#8203;68113](openclaw/openclaw#68113), [#&#8203;90534](openclaw/openclaw#90534), [#&#8203;90181](openclaw/openclaw#90181), [#&#8203;90607](openclaw/openclaw#90607), [#&#8203;89500](openclaw/openclaw#89500)) Thanks [@&#8203;MukundaKatta](https://github.com/MukundaKatta), [@&#8203;mcaxtr](https://github.com/mcaxtr), [@&#8203;infoanton](https://github.com/infoanton), [@&#8203;mushuiyu886](https://github.com/mushuiyu886), and [@&#8203;sahibzada-allahyar](https://github.com/sahibzada-allahyar).
- Feishu: retry transient send rate-limit errors (HTTP 429, per-chat code 230020, tenant-level code 11232) with linear backoff, including SDK responses that fulfill with rate-limit bodies instead of throwing, and route streaming-card sends through the retry wrapper. ([#&#8203;89659](openclaw/openclaw#89659)) Thanks [@&#8203;ladygege](https://github.com/ladygege).
- Release/CI/E2E: main CI guard drift, PR merge diff scoping, live Docker credential staging, base-image qualification, installer Docker classification, Playwright dependency install recovery, API-key auth for Codex live Docker lanes, Parallels option terminators, and JSON-mode progress handling are tighter so release proof fails cleaner. ([#&#8203;90532](openclaw/openclaw#90532), [#&#8203;90287](openclaw/openclaw#90287), [#&#8203;90058](openclaw/openclaw#90058)) Thanks [@&#8203;RomneyDa](https://github.com/RomneyDa), [@&#8203;hxy91819](https://github.com/hxy91819), and [@&#8203;mrunalp](https://github.com/mrunalp).
- Release/CI/E2E: Docker E2E and live Docker harness runs now apply default memory, CPU, and process ceilings while preserving explicit per-lane overrides.
- Release/CI/E2E: plugin lifecycle matrix resource sampling now fails phases that exceed RSS, wall-clock, or CPU ceilings instead of only logging the measurements.
- Release/CI/E2E: Codex npm plugin live assertions now cap transcript discovery and diagnostic log reads so failure proof stays bounded.
- Tests/state isolation: QA Lab valid-tool-call metrics now require runtime tool-call evidence when runtime parity data is available instead of counting tool-backed scenario pass status alone.
- Tests/state isolation: QA Lab runtime parity now fails planned-only tool-call rows without matching tool results instead of treating matching mock plans as real tool evidence.
- Tests/state isolation: provider, media, auth, cron, task, session, sandbox, Gateway, and Codex timeout fixtures now scope more home/state/env data per test, reducing cross-test leakage and making release validation failures less noisy. ([#&#8203;90027](openclaw/openclaw#90027), [#&#8203;89974](openclaw/openclaw#89974))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19-->

Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/963
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling extensions: google merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. 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: 🐚 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

2 participants