Skip to content

fix(gateway): resolve message actions against runtime config#84535

Merged
joshavant merged 5 commits into
openclaw:mainfrom
funmerlin:fix/discord-message-action-secretref-runtime
May 30, 2026
Merged

fix(gateway): resolve message actions against runtime config#84535
joshavant merged 5 commits into
openclaw:mainfrom
funmerlin:fix/discord-message-action-secretref-runtime

Conversation

@funmerlin

@funmerlin funmerlin commented May 20, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Problem: Discord message.action lookup/admin actions can still receive source config containing SecretRef-backed named account tokens and fail with configured_unavailable, even while the running gateway has a resolved runtime config.
  • Solution: add a config-only active secrets runtime accessor and use it only for gateway message.action dispatch when it matches the request context source config.
  • What changed: message.action now late-binds its dispatch config through selectApplicableRuntimeConfig(...); tests cover resolved-config use, stale-snapshot fallback, auto-enable config-shape matching, and that ordinary send requests do not read the active secrets runtime snapshot.
  • What did NOT change (scope boundary): no Discord startup behavior, no channel discovery tolerance, no shared send/poll hot-path snapshot lookup, no changelog entry.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor required for the fix
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

Motivation

  • A live OpenClaw install reproduced message action=channel-info failing for a SecretRef-backed named Discord account with Discord bot token configured for account "drclaw" is unavailable; resolve SecretRefs against the active runtime snapshot before using this account.
  • In the same runtime, inbound Discord delivery and explicit message action=send worked, so the issue is narrower than Discord startup and narrower than ordinary send.
  • fix(gateway): use resolved runtime config for message actions #81477 targets the same broad failure class, but review feedback correctly called out that cloning the full active secrets snapshot in the shared send/poll/action channel-resolution path is too broad. This PR uses a config-only accessor and limits the lookup to gateway message.action.

Real behavior proof (required for external PRs)

  • Behavior or issue addressed: SecretRef-backed Discord named account can fail in message.action lookup/admin dispatch when the request context config is still source-shaped, while a resolved runtime config exists.

  • Real environment tested: Local OpenClaw checkout on macOS 15.7.7, Node v25.6.0, OpenClaw 2026.5.19, live Discord account drclaw with token configured via env SecretRef.

  • Exact steps or command run after this patch:

    node --import tsx tmp-live-discord-message-action-proof.ts

    The temporary local proof harness prepared and activated a resolved secrets runtime snapshot, loaded the Discord channel plugin, then invoked the patched gateway sendHandlers["message.action"] with request-context source config and action: "channel-info" for account drclaw. The harness was removed after collecting the redacted output.

  • Evidence after fix:

    Terminal output from the live Discord run, with channel id and token redacted:

    node --import tsx tmp-live-discord-message-action-proof.ts
    {
      "ok": true,
      "channel": "discord",
      "action": "channel-info",
      "accountId": "drclaw",
      "sourceTokenShape": "SecretRef(env)",
      "resolvedTokenShape": "resolved-string-redacted",
      "payloadKeys": [
        "channel",
        "ok"
      ],
      "resultKeys": [],
      "returnedChannel": {
        "id": "<redacted>",
        "name": "🤖the-bridge"
      },
      "meta": {
        "channel": "discord"
      }
    }
    
  • Observed result after fix: the patched gateway message.action handler returned ok: true for live Discord channel-info using a SecretRef-backed named account. The output shows source config still had SecretRef(env), the active runtime config supplied a redacted resolved string token, and the returned Discord channel id was redacted.

  • What was not tested: replacing the currently running OpenClaw gateway with this branch. I did not restart or replace the running OpenClaw gateway from inside an OpenClaw-hosted session.

  • Before evidence: [Bug]: Discord channel-info fails for SecretRef-backed named account while send works #84530 includes the live failing action and sanitized surrounding evidence.

Root Cause (if applicable)

  • Root cause: at least one gateway message.action dispatch path can operate on source-shaped config while the active secrets runtime already has the resolved config needed by SecretRef-backed named accounts.
  • Missing detection / guardrail: gateway message-action coverage did not assert that action dispatch receives the resolved runtime config, and did not assert that stale runtime snapshots are ignored.
  • Contributing context (if known): prior SecretRef fixes covered startup, external channel contracts, discovery tolerance, and older message-tool paths, but did not lock this gateway message-action dispatch shape.

Regression Test Plan (if applicable)

  • Coverage level that should have caught this:
    • Unit test
    • Seam / integration test
    • End-to-end test
    • Existing coverage already sufficient
  • Target test or file: src/gateway/server-methods/send.test.ts
  • Scenario the test should lock in: gateway message.action receives resolved runtime config for a matching active runtime snapshot, keeps source config for stale snapshots, preserves runtime matching when plugin auto-enable changes the request config shape, and ordinary send does not use the runtime accessor.
  • Why this is the smallest reliable guardrail: the bug is in gateway dispatch config selection before the channel plugin action uses Discord credentials.
  • Existing test that already covers this (if any): none observed.
  • If no new test is added, why not: N/A

User-visible / Behavior Changes

SecretRef-backed Discord message lookup/admin actions such as channel-info can use the active resolved runtime config when available.

Diagram (if applicable)

Before:
message.action -> request cfg with SecretRef -> Discord action -> configured_unavailable

After:
message.action -> matching active config-only runtime snapshot -> Discord action -> resolved account token path

Security Impact (required)

  • New permissions/capabilities? (Yes/No): No
  • Secrets/tokens handling changed? (Yes/No): Yes
  • New/changed network calls? (Yes/No): No
  • Command/tool execution surface changed? (Yes/No): No
  • Data access scope changed? (Yes/No): No
  • If any Yes, explain risk + mitigation: gateway message.action may now use the already-active resolved runtime config instead of source-shaped SecretRefs. The new accessor returns only cloned config and sourceConfig, not auth stores or web-tool metadata, and selectApplicableRuntimeConfig(...) prevents using a stale runtime snapshot for mismatched source config.

Repro + Verification

Environment

  • OS: macOS 15.7.7
  • Runtime/container: local OpenClaw checkout, Node v25.6.0
  • Model/provider: NOT_ENOUGH_INFO
  • Integration/channel (if any): Discord
  • Relevant config (redacted): Discord named account token configured through an env SecretRef.

Steps

  1. Configure a Discord named account with a SecretRef-backed token.
  2. Run a gateway message.action lookup/admin action such as channel-info.
  3. Observe the request fail if dispatch receives source-shaped config.
  4. With this patch, dispatch resolves through the matching active config-only runtime snapshot before invoking the channel action.

Expected

  • Discord lookup/admin message actions use resolved runtime account config when the active snapshot matches the request source config.

Actual

  • Before patch: live repro in [Bug]: Discord channel-info fails for SecretRef-backed named account while send works #84530 failed with configured_unavailable.
  • After patch: focused gateway test shows the action dispatch config is the resolved runtime config for matching snapshots, and a redacted live Discord channel-info run through the patched gateway message.action handler returned ok: true. The latest branch also covers auto-enable config-shape matching before dispatch.

Evidence

  • Failing test/log before + passing after
  • Trace/log snippets
  • Screenshot/recording
  • Perf numbers (if relevant)

Human Verification (required)

What you personally verified (not just CI), and how:

  • Verified scenarios:
    • Merged current origin/main into the PR branch cleanly.
    • Re-read [Bug]: Discord channel-info fails for SecretRef-backed named account while send works #84530 and confirmed the fix still targets the named-account Discord channel-info SecretRef/runtime-config boundary, not ordinary send/startup behavior.
    • Reviewed the changelog and relevant main-branch changes since the PR was opened; no landed change appears to fix this exact message.action SecretRef dispatch boundary.
    • message.action dispatch receives active resolved runtime config for matching source config.
    • message.action dispatch falls back to the post-auto-enable request config when the active runtime snapshot source is stale.
    • ordinary send does not call the active secrets runtime config accessor.
  • Edge cases checked:
    • active runtime snapshot absent.
    • active runtime snapshot source mismatch.
    • no send hot-path runtime snapshot lookup.
    • auto-enabled message.action config shape still matches the pre-auto-enable source snapshot and dispatches with the auto-enabled resolved runtime config.
  • Commands run after the 2026-05-23 follow-up patch:
    • node scripts/run-vitest.mjs src/gateway/server-methods/send.test.ts — passed, 108 tests.
    • pnpm exec oxfmt --check --threads=1 src/gateway/server-methods/send.ts src/gateway/server-methods/send.test.ts — passed.
    • pnpm exec oxlint --tsconfig config/tsconfig/oxlint.core.json src/gateway/server-methods/send.ts src/gateway/server-methods/send.test.ts — passed.
    • pnpm tsgo:core — passed.
    • pnpm tsgo:core:test — passed.
    • git diff --check — passed.
  • What you did not verify:
    • replacing the currently running gateway with this branch. The live Discord proof used the patched handler in a local process, not a gateway restart.
    • node scripts/crabbox-wrapper.mjs run --shell -- "pnpm check:changed"; the crabbox wrapper failed before running repo checks because the crabbox binary failed its basic sanity check.
    • full local pnpm check:changed; the local wrapper stayed alive for several minutes after dependency convergence with no child checker process visible, so it was stopped and replaced with the focused commands listed above.

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.
  • I left unresolved only the conversations that still need reviewer or maintainer judgment.

If a bot review conversation is addressed by this PR, resolve that conversation yourself. Do not leave bot review conversation cleanup for maintainers.

Compatibility / Migration

  • Backward compatible? (Yes/No): Yes
  • Config/env changes? (Yes/No): No
  • Migration needed? (Yes/No): No
  • If yes, exact upgrade steps: N/A

Risks and Mitigations

  • Risk: using a stale active runtime snapshot could route actions through outdated credentials.
    • Mitigation: use selectApplicableRuntimeConfig(...) with both active config and sourceConfig; mismatched source config falls back to the request context config.
  • Risk: reintroducing fix(gateway): use resolved runtime config for message actions #81477's hot-path performance concern.
    • Mitigation: this PR does not call the accessor from shared channel resolution or ordinary send; it adds a config-only accessor and uses it only for gateway message.action.

AI-assisted: yes. I used an AI coding agent to implement and verify this change.

@funmerlin funmerlin requested a review from a team as a code owner May 20, 2026 10:34
@openclaw-barnacle openclaw-barnacle Bot added gateway Gateway runtime size: S triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. labels May 20, 2026
@clawsweeper

clawsweeper Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed May 29, 2026, 8:05 PM ET / 00:05 UTC.

Summary
The branch updates gateway message.action dispatch to select a matching active runtime config for SecretRef-backed Discord action handling and routes non-send Discord credential actions through the gateway, with focused regression tests.

PR surface: Source +43, Tests +275. Total +318 across 5 files.

Reproducibility: yes. Current main source shows message.action dispatch uses the request-context config after plugin auto-enable, and the linked bug report plus PR body provide a live Discord channel-info failure/fix path for a SecretRef-backed named account.

Review metrics: 2 noteworthy metrics.

  • Runtime Snapshot Access Scope: 1 gateway action path changed; ordinary send remains at 0 runtime snapshot reads. This matters because the prior broad approach was rejected for touching shared send/poll hot paths, while this branch keeps the lookup scoped to message.action.
  • Discord Execution Mode Policy: 7 actions remain local; all other Discord message actions route through gateway. This summarizes the compatibility-sensitive behavior shift that reviewers should consciously accept before merge.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
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:

  • none.

Risk before merge

  • [P1] Merging intentionally changes gateway message.action credential selection so matching source-shaped requests can execute against the active resolved runtime config; maintainers should explicitly accept that auth-provider compatibility behavior.
  • [P1] The Discord execution-mode policy moves more non-send actions through the gateway; maintainers should be comfortable that actions needing client-local media, component, or payload semantics remain in the local allowlist.
  • [P1] The real behavior proof is useful handler-level live Discord terminal output, but it is not a restarted managed-gateway proof.

Maintainer options:

  1. Accept Scoped Runtime Config Selection (recommended)
    Maintainers can accept that matching message.action requests use the active resolved runtime config and merge once branch protection is satisfied.
  2. Ask For Managed Gateway Proof
    Maintainers can require a restarted managed-gateway or Crabbox proof if handler-level live Discord output is not enough for this credential path.
  3. Rework The Boundary
    If maintainers do not want gateway message.action to choose runtime config directly, pause this branch and move the behavior into a narrower plugin/runtime contract.

Next step before merge

  • No automated repair is needed; the remaining action is maintainer acceptance of the scoped credential-selection behavior and normal merge gating.

Security
Cleared: The diff changes credential selection for gateway message actions but adds no dependencies, workflows, permissions, secret logging, or new command execution surface.

Review details

Best possible solution:

Land the focused action-dispatch runtime-config selection after maintainer acceptance of the scoped auth-provider behavior and normal branch-protection checks, keeping shared send/poll hot paths unchanged.

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

Yes. Current main source shows message.action dispatch uses the request-context config after plugin auto-enable, and the linked bug report plus PR body provide a live Discord channel-info failure/fix path for a SecretRef-backed named account.

Is this the best way to solve the issue?

Yes, with maintainer acceptance. The branch is narrower than #81477 because it compares the pre-auto-enable source snapshot, late-binds only gateway message.action, preserves stale-snapshot fallback, and tests that ordinary send does not use the snapshot accessor.

AGENTS.md: found and applied where relevant.

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

Label changes

Label justifications:

  • P2: This is a normal-priority gateway/auth bug fix for SecretRef-backed Discord message actions with limited affected surface.
  • merge-risk: 🚨 compatibility: The PR changes which config source existing gateway message actions use at runtime, which can affect upgraded SecretRef-backed setups.
  • merge-risk: 🚨 auth-provider: The changed path directly controls credential resolution for SecretRef-backed Discord accounts.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster 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 redacted terminal output from a live Discord channel-info run through the patched handler showing SecretRef source config, a resolved runtime token shape, and ok: true; it does not prove a managed gateway restart.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes redacted terminal output from a live Discord channel-info run through the patched handler showing SecretRef source config, a resolved runtime token shape, and ok: true; it does not prove a managed gateway restart.
Evidence reviewed

PR surface:

Source +43, Tests +275. Total +318 across 5 files.

View PR surface stats
Area Files Added Removed Net
Source 2 49 6 +43
Tests 3 285 10 +275
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 5 334 16 +318

What I checked:

  • Root and scoped policy read: Read full root AGENTS.md plus extensions/AGENTS.md, src/gateway/AGENTS.md, and src/gateway/server-methods/AGENTS.md; the root policy treats auth/provider routing, config loading, fallback behavior, and gateway/plugin surfaces as compatibility-sensitive review areas. (AGENTS.md:1, ecc5601b2a4c)
  • Current main dispatch behavior: On current main, resolveRequestedChannel applies gateway plugin auto-enable to the request context config and message.action passes that cfg directly to dispatchChannelMessageAction, so Discord's own runtime-config selection may see a post-auto-enable shape instead of the canonical source snapshot. (src/gateway/server-methods/send.ts:172, ecc5601b2a4c)
  • Runtime snapshot contract: Current main's selectApplicableRuntimeConfig selects the active runtime config only when the input config matches the stored source snapshot, which explains why comparing the pre-auto-enable source config matters for this PR. (src/config/runtime-snapshot.ts:209, ecc5601b2a4c)
  • PR runtime-config selection: The PR adds resolveMessageActionRuntimeConfig, reads the canonical runtime and source snapshots, compares against sourceCfg, and re-applies gateway plugin config only when the active runtime config is applicable. (src/gateway/server-methods/send.ts:220, c253628ef18d)
  • PR regression coverage: The PR adds focused tests for matching runtime config selection, pre-auto-enable source matching, stale runtime fallback to the post-auto-enable request config, and no runtime snapshot reads for ordinary send requests. (src/gateway/server-methods/send.test.ts:318, c253628ef18d)
  • Linked issue proof: The linked bug report describes live Discord channel-info failing for a SecretRef-backed named account while inbound Discord and explicit sends worked in the same runtime, matching the branch's focused fix boundary.

Likely related people:

  • joshavant: Assigned to the PR, authored the latest two branch commits that switch the fix to canonical runtime snapshots and Discord gateway routing, and authored related merged SecretRef/runtime work in the same cluster. (role: likely follow-up owner; confidence: high; commits: 5671e6d49684, c253628ef18d, b1f8172867f3; files: src/gateway/server-methods/send.ts, src/gateway/server-methods/send.test.ts, extensions/discord/src/channel-actions.ts)
  • steipete: Recent current-main history for runtime snapshots, gateway message-action protocol, and Discord action/auth hardening repeatedly points to this handle as an adjacent code-path owner. (role: recent area contributor; confidence: high; commits: ad155fbbd7b3, 94a9d3f0bedb, 9ed1b0213421; files: src/gateway/server-methods/send.ts, src/config/runtime-snapshot.ts, extensions/discord/src/channel-actions.ts)
  • amknight: Introduced the existing Discord resolveExecutionMode pattern that routed read/search through gateway execution mode, which this PR expands to additional credential-backed actions. (role: adjacent owner; confidence: medium; commits: e4ff7c162044; files: extensions/discord/src/channel-actions.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: 🦪 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. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. labels May 20, 2026
@clawsweeper

clawsweeper Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

🔥 Warming up: real-behavior proof passed; findings, security review, or rank-up moves are still in progress.

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.
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.

@openclaw-barnacle openclaw-barnacle Bot added 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 May 20, 2026
@funmerlin

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 20, 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: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. 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. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels May 20, 2026
@openclaw-barnacle openclaw-barnacle Bot added size: M and removed size: S proof: sufficient ClawSweeper judged the real behavior proof convincing. labels May 20, 2026
@funmerlin

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 20, 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. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. labels May 20, 2026
@funmerlin

Copy link
Copy Markdown
Contributor Author

Addressed the P2 stale-snapshot fallback finding in 08e4e8855e7 after merging current origin/main into this branch.

What changed:

  • resolveMessageActionRuntimeConfig(...) now only uses the active resolved runtime config when the active runtime source matches the pre-auto-enable request source config.
  • When the active runtime snapshot is stale or mismatched, message.action falls back to the post-auto-enable request config (params.cfg) instead of the pre-auto-enable source config.
  • The stale-snapshot regression now makes pre/post auto-enable configs distinguishable and asserts dispatch receives the post-auto-enable request config.

Intent/source check:

  • Re-read [Bug]: Discord channel-info fails for SecretRef-backed named account while send works #84530: this remains about Discord lookup/admin message.action paths such as channel-info for SecretRef-backed named accounts, while ordinary send/startup may already work.
  • Reviewed the changelog and relevant main-branch changes since this PR was opened. I did not find a landed fix for this exact message.action SecretRef dispatch boundary, so this PR still appears relevant.

Verification after the follow-up patch:

  • node scripts/run-vitest.mjs src/gateway/server-methods/send.test.ts — passed, 108 tests.
  • pnpm exec oxfmt --check --threads=1 src/gateway/server-methods/send.ts src/gateway/server-methods/send.test.ts — passed.
  • pnpm exec oxlint --tsconfig config/tsconfig/oxlint.core.json src/gateway/server-methods/send.ts src/gateway/server-methods/send.test.ts — passed.
  • pnpm tsgo:core — passed.
  • pnpm tsgo:core:test — passed.
  • git diff --check — passed.

Acceptance caveat:

  • node scripts/crabbox-wrapper.mjs run --shell -- "pnpm check:changed" did not reach repo checks because the local crabbox binary failed its basic sanity check.
  • Direct local pnpm check:changed stayed alive for several minutes after dependency convergence with no child checker process visible, so I stopped it and used the focused verification above instead.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 23, 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:

@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 23, 2026
@KatTate

KatTate commented May 23, 2026

Copy link
Copy Markdown

@clawsweeper re-review

Requesting fresh review on current head 08e4e8855e75.

The prior ClawSweeper re-review did not produce a code verdict because the workflow failed on GitHub auth:

gh: Bad credentials (HTTP 401)

The previous P2 stale-snapshot fallback finding has been addressed in src/gateway/server-methods/send.ts.

Proof:

  • message.action now uses the active resolved runtime config only when the active runtime source matches the pre-auto-enable request source.
  • If the active runtime snapshot is stale or mismatched, it preserves the post-auto-enable request config.
  • Regression coverage exists in src/gateway/server-methods/send.test.ts.
  • Targeted local validation passed: node scripts/run-vitest.mjs src/gateway/server-methods/send.test.ts
  • Result: 108 tests passed.

The remaining red CI job checks-node-core-runtime-media-ui failed during checkout, not during test execution:

fatal: could not read Username for 'https://github.com': No such device or address

Please re-review the current head and sync the durable review/labels if the finding is resolved.

@funmerlin funmerlin force-pushed the fix/discord-message-action-secretref-runtime branch from 08e4e88 to 8a0cc54 Compare May 29, 2026 15:31
@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: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels May 29, 2026
@funmerlin

Copy link
Copy Markdown
Contributor Author

Rebased this PR onto current origin/main and force-pushed the adapted branch. Current head: 8a0cc541919.

Review request follow-up:

  • Re-checked the prior ClawSweeper P2 stale-snapshot fallback finding against the rebased code.
  • resolveMessageActionRuntimeConfig(...) now uses the active resolved runtime config only when the active runtime source matches the pre-auto-enable request source.
  • If the active runtime snapshot is stale/mismatched, message.action falls back to the post-auto-enable request config, preserving existing plugin auto-enable behavior.
  • Regression coverage remains in src/gateway/server-methods/send.test.ts for stale-runtime plus auto-enable fallback.

Local validation on the rebased head:

  • node scripts/run-vitest.mjs src/gateway/server-methods/send.test.ts --reporter=dot — passed, 112 tests.
  • node_modules/.bin/oxfmt --check --threads=1 src/gateway/server-methods/send.ts src/gateway/server-methods/send.test.ts src/secrets/runtime-state.ts — passed.
  • pnpm exec oxlint --tsconfig config/tsconfig/oxlint.core.json src/gateway/server-methods/send.ts src/gateway/server-methods/send.test.ts src/secrets/runtime-state.ts — passed.
  • git diff --check — passed.
  • pnpm build — passed.
  • pnpm check:changed — passed.

Caveat: node scripts/crabbox-wrapper.mjs run --shell -- "pnpm check:changed" still failed before repo checks because the local crabbox binary failed its basic --version/--help sanity checks. Direct pnpm check:changed completed successfully.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 29, 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:

@joshavant joshavant self-assigned this May 29, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 29, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 29, 2026
@openclaw-barnacle openclaw-barnacle Bot added the channel: discord Channel integration: discord label May 29, 2026
@joshavant joshavant merged commit c8a733e into openclaw:main May 30, 2026
109 of 113 checks passed
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 30, 2026
…w#84535)

* fix(gateway): resolve message action config from runtime snapshot

* fix(gateway): preserve runtime config matching through auto-enable

* fix(gateway): preserve auto-enabled message action fallback

* fix(gateway): use canonical runtime snapshot for message actions

* fix(discord): route credential actions through gateway

---------

Co-authored-by: Merlin <258679497+funmerlin@users.noreply.github.com>
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
steipete pushed a commit that referenced this pull request May 30, 2026
* fix(gateway): resolve message action config from runtime snapshot

* fix(gateway): preserve runtime config matching through auto-enable

* fix(gateway): preserve auto-enabled message action fallback

* fix(gateway): use canonical runtime snapshot for message actions

* fix(discord): route credential actions through gateway

---------

Co-authored-by: Merlin <258679497+funmerlin@users.noreply.github.com>
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
eleboucher pushed a commit to eleboucher/homelab that referenced this pull request May 31, 2026
…026.5.28) (#759)

This PR contains the following updates:

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

---

### Release Notes

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

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

[Compare Source](openclaw/openclaw@v2026.5.27...v2026.5.28)

##### Highlights

- Agent and Codex runtime recovery is steadier: subagents keep cwd/workspace separation, hook context stays prompt-local, session locks release on timeout abort while live OpenClaw locks survive cleanup, stale restart continuations are avoided, and Codex app-server/helper failures no longer tear down shared runtime state. ([#&#8203;87218](openclaw/openclaw#87218), [#&#8203;86875](openclaw/openclaw#86875), [#&#8203;87409](openclaw/openclaw#87409), [#&#8203;87399](openclaw/openclaw#87399), [#&#8203;87375](openclaw/openclaw#87375), [#&#8203;88129](openclaw/openclaw#88129))
- Channel delivery and session identity got safer across outbound plugin hooks, Matrix room ids, iMessage reactions/approvals, Slack final replies, Discord recovered tool warnings, runtime-config message actions, WhatsApp profile auth roots, Telegram polling, and Microsoft Teams service URL trust checks. ([#&#8203;73706](openclaw/openclaw#73706), [#&#8203;75670](openclaw/openclaw#75670), [#&#8203;87366](openclaw/openclaw#87366), [#&#8203;87451](openclaw/openclaw#87451), [#&#8203;87334](openclaw/openclaw#87334), [#&#8203;84535](openclaw/openclaw#84535), [#&#8203;82492](openclaw/openclaw#82492), [#&#8203;83304](openclaw/openclaw#83304), [#&#8203;87160](openclaw/openclaw#87160))
- Mobile and chat surfaces got a broader refresh: the iOS Pro UI, hosted push relay default, realtime Talk tab playback, Gateway chat transport, onboarding, Talk permissions, WebChat reconnect delivery, and session picker behavior now preserve more state across reconnects and empty searches. ([#&#8203;87367](openclaw/openclaw#87367), [#&#8203;87531](openclaw/openclaw#87531), [#&#8203;87682](openclaw/openclaw#87682), [#&#8203;88096](openclaw/openclaw#88096), [#&#8203;88105](openclaw/openclaw#88105)) Thanks [@&#8203;ngutman](https://github.com/ngutman) and [@&#8203;BunsDev](https://github.com/BunsDev).
- Browser, channel, and automation inputs are stricter: Browser tool timeouts, viewport/tab indices, Gateway ports, cron retry handling, Discord component ids, schema array refs, Telegram callback pages, and channel progress callbacks now reject malformed values earlier and preserve the intended delivery context. ([#&#8203;82887](openclaw/openclaw#82887))
- Provider, media, and document coverage expands with Claude Opus 4.8, Fal Krea image schemas, NVIDIA featured models, MiniMax streaming music responses, encrypted PDF extraction, voice model catalogs, GitHub Copilot agent runtime support, and a Codex Supervisor plugin path for delegated Codex workflows. ([#&#8203;87845](openclaw/openclaw#87845), [#&#8203;87890](openclaw/openclaw#87890), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764), [#&#8203;87751](openclaw/openclaw#87751), [#&#8203;87794](openclaw/openclaw#87794))
- CLI, auth, doctor, and provider paths fail faster and recover more clearly: malformed numeric/version options are rejected, workspace dotenv provider credentials are ignored, heartbeat defaults, OAuth/token lifetimes, and local service startup requests are bounded, agent auth health labels are clearer, legacy `api_key` auth profiles migrate to canonical form, and restart guidance is actionable. ([#&#8203;87398](openclaw/openclaw#87398), [#&#8203;86281](openclaw/openclaw#86281), [#&#8203;87361](openclaw/openclaw#87361), [#&#8203;88133](openclaw/openclaw#88133), [#&#8203;83655](openclaw/openclaw#83655), [#&#8203;87559](openclaw/openclaw#87559), [#&#8203;88088](openclaw/openclaw#88088), [#&#8203;85924](openclaw/openclaw#85924)) Thanks [@&#8203;vincentkoc](https://github.com/vincentkoc) and [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- Plugin and Gateway hot paths do less repeated work while preserving cache correctness for install records, config JSON parsing, tool search catalogs, session stores, manifest model rows, auto-enabled plugin config, browser tokens, viewer assets, and release-split external plugin packages. ([#&#8203;86699](openclaw/openclaw#86699))
- Release, QA, and E2E validation now bound more log, artifact, harness, and cross-OS waits so failing lanes produce proof instead of hanging or false-greening.

##### Changes

- Status: show active subagent details in status output.
- Diffs: split the default language pack and expand default Diffs language coverage while keeping the host floor aligned. ([#&#8203;87370](openclaw/openclaw#87370), [#&#8203;87372](openclaw/openclaw#87372)) Thanks [@&#8203;RomneyDa](https://github.com/RomneyDa).
- ClawHub: add plugin display names plus skill verification and trust surfaces. ([#&#8203;87354](openclaw/openclaw#87354), [#&#8203;86699](openclaw/openclaw#86699)) Thanks [@&#8203;thewilloftheshadow](https://github.com/thewilloftheshadow) and [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen).
- iOS: refresh the dev app with Pro Command, Chat, Agents, Settings, hosted push relay defaults, and realtime Talk playback wired to gateway sessions, diagnostics, chat, and realtime Talk. ([#&#8203;87367](openclaw/openclaw#87367), [#&#8203;88096](openclaw/openclaw#88096), [#&#8203;88105](openclaw/openclaw#88105)) Thanks [@&#8203;Solvely-Colin](https://github.com/Solvely-Colin) and [@&#8203;ngutman](https://github.com/ngutman).
- Docs: clarify Codex computer-use setup, paste-token stdin auth setup, macOS gateway sleep troubleshooting, native Codex hook relay recovery, container model auth, install deployment cards, device-token admin gating, CLI setup flow compatibility, Notte cloud browser CDP setup, and backport targets. ([#&#8203;87313](openclaw/openclaw#87313), [#&#8203;63050](openclaw/openclaw#63050), [#&#8203;87685](openclaw/openclaw#87685)) Thanks [@&#8203;bdjben](https://github.com/bdjben), [@&#8203;liaoandi](https://github.com/liaoandi), and [@&#8203;thewilloftheshadow](https://github.com/thewilloftheshadow).
- PDF/tools: use ClawPDF for PDF extraction, support encrypted PDF extraction, and surface MCP structured content in agent tool results. ([#&#8203;87670](openclaw/openclaw#87670), [#&#8203;87751](openclaw/openclaw#87751))
- Providers: add Claude Opus 4.8 support, Fal Krea image model schemas, NVIDIA featured model catalogs, MiniMax streaming music responses, and provider-backed voice model catalogs. ([#&#8203;87845](openclaw/openclaw#87845), [#&#8203;87890](openclaw/openclaw#87890), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764), [#&#8203;87794](openclaw/openclaw#87794)) Thanks [@&#8203;eleqtrizit](https://github.com/eleqtrizit) and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Codex/GitHub: add the GitHub Copilot agent runtime and the Codex Supervisor plugin package.
- Plugins: externalize GitHub Copilot and Tokenjuice as official install-on-demand plugins with npm and ClawHub publish metadata.
- Workboard: add agent coordination tools for tracking and handing off active agent work.
- Discord: show commentary in progress drafts so live Discord runs expose useful in-progress context. ([#&#8203;85200](openclaw/openclaw#85200))
- Plugin SDK: add a reply payload sending hook for plugins that need to deliver channel-owned replies and flatten package types for SDK declarations. ([#&#8203;82823](openclaw/openclaw#82823), [#&#8203;87165](openclaw/openclaw#87165)) Thanks [@&#8203;piersonr](https://github.com/piersonr) and [@&#8203;RomneyDa](https://github.com/RomneyDa).
- Policy: add policy comparison, ingress-channel conformance, and sandbox-posture conformance checks. ([#&#8203;85572](openclaw/openclaw#85572), [#&#8203;85744](openclaw/openclaw#85744), [#&#8203;86768](openclaw/openclaw#86768))

##### Fixes

- Agents: fall back to local config pruning when the optional `agents delete` Gateway probe cannot authenticate, so offline installs can still delete agents without removing shared workspaces.
- Tighten phone-control mutation authorization \[AI]. ([#&#8203;87150](openclaw/openclaw#87150)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Clarify directive persistence authorization policy \[AI]. ([#&#8203;86369](openclaw/openclaw#86369)) Thanks [@&#8203;pgondhi987](https://github.com/pgondhi987).
- Agents/Codex: keep spawned agent cwd/workspace state separated, forward ACP spawn attachments, keep hook context prompt-local, release session locks on timeout abort and runtime teardown without deleting live OpenClaw-owned locks during cleanup, avoid session event queue self-wait, clean up exec abort listeners, stream assistant deltas incrementally, recover raw missing-thread compaction failures, preserve rotated compaction session identity, keep compaction-timeout snapshots continuable, preserve shared app-server state across startup or helper failures, keep native hook relay alive across restarts and prune stale bridge files, close native hook relay replacement races, keep Claude live tool progress visible for watchdog recovery, suppress abandoned requester completion handoff, route workspace memory through tools, resolve Codex runtime models first, report quarantined dynamic tools, format `skills` command output, bind node auto-review to prepared plans, retry Claude CLI transcript probes, and bound compaction/steering retries. ([#&#8203;87218](openclaw/openclaw#87218), [#&#8203;86875](openclaw/openclaw#86875), [#&#8203;86123](openclaw/openclaw#86123), [#&#8203;88129](openclaw/openclaw#88129), [#&#8203;87399](openclaw/openclaw#87399), [#&#8203;87375](openclaw/openclaw#87375), [#&#8203;72574](openclaw/openclaw#72574), [#&#8203;87383](openclaw/openclaw#87383), [#&#8203;87400](openclaw/openclaw#87400), [#&#8203;83022](openclaw/openclaw#83022), [#&#8203;87671](openclaw/openclaw#87671), [#&#8203;87738](openclaw/openclaw#87738), [#&#8203;87747](openclaw/openclaw#87747), [#&#8203;87706](openclaw/openclaw#87706), [#&#8203;87546](openclaw/openclaw#87546), [#&#8203;87541](openclaw/openclaw#87541), [#&#8203;81048](openclaw/openclaw#81048)) Thanks [@&#8203;mbelinky](https://github.com/mbelinky), [@&#8203;Alix-007](https://github.com/Alix-007), [@&#8203;luoyanglang](https://github.com/luoyanglang), [@&#8203;yetval](https://github.com/yetval), [@&#8203;sjf](https://github.com/sjf), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;benjamin1492](https://github.com/benjamin1492), [@&#8203;c19354837](https://github.com/c19354837), [@&#8203;fuller-stack-dev](https://github.com/fuller-stack-dev), [@&#8203;pfrederiksen](https://github.com/pfrederiksen), and [@&#8203;dodge1218](https://github.com/dodge1218).
- Codex Supervisor: keep real-home app-server MCP session listing on the loaded state path, bound stored history scans, and close WebSocket probes cleanly.
- Channels: thread canonical session keys into outbound hooks, preserve Matrix room-id case, keep fallback tool warnings mention-inert, retain delivered Slack final replies during late cleanup, continue iMessage polling after denied reactions, suppress duplicate native exec approvals, resolve Gateway message actions against the active runtime config, preserve Telegram SecretRef prompt config and polling keepalives, preserve WhatsApp profile auth roots, QR display, document filenames, and plugin hook config, suppress Discord recovered tool warnings, preserve the Discord voice outbound helper, cap Discord/Signal/Zalo channel request and container timeouts, and block untrusted Teams service URLs while keeping TeamsSDK patterns aligned. ([#&#8203;73706](openclaw/openclaw#73706), [#&#8203;75670](openclaw/openclaw#75670), [#&#8203;87366](openclaw/openclaw#87366), [#&#8203;87451](openclaw/openclaw#87451), [#&#8203;87465](openclaw/openclaw#87465), [#&#8203;87334](openclaw/openclaw#87334), [#&#8203;84535](openclaw/openclaw#84535), [#&#8203;76262](openclaw/openclaw#76262), [#&#8203;83304](openclaw/openclaw#83304), [#&#8203;82492](openclaw/openclaw#82492), [#&#8203;87581](openclaw/openclaw#87581), [#&#8203;77114](openclaw/openclaw#77114), [#&#8203;86426](openclaw/openclaw#86426), [#&#8203;85529](openclaw/openclaw#85529), [#&#8203;87160](openclaw/openclaw#87160)) Thanks [@&#8203;zeroaltitude](https://github.com/zeroaltitude), [@&#8203;lukeboyett](https://github.com/lukeboyett), [@&#8203;jarvis-mns1](https://github.com/jarvis-mns1), [@&#8203;xiaotian](https://github.com/xiaotian), [@&#8203;funmerlin](https://github.com/funmerlin), [@&#8203;joshavant](https://github.com/joshavant), [@&#8203;eleqtrizit](https://github.com/eleqtrizit), [@&#8203;heyitsaamir](https://github.com/heyitsaamir), [@&#8203;amittell](https://github.com/amittell), [@&#8203;lidge-jun](https://github.com/lidge-jun), [@&#8203;liorb-mountapps](https://github.com/liorb-mountapps), [@&#8203;masatohoshino](https://github.com/masatohoshino), [@&#8203;bladin](https://github.com/bladin), and [@&#8203;giodl73-repo](https://github.com/giodl73-repo).
- CLI/auth/doctor/providers: reject malformed numeric/timeout/subcommand-version inputs, ignore workspace dotenv provider credentials, wait for respawn child shutdown, bound heartbeat defaults plus Codex, GitHub Copilot, OpenAI, Anthropic, Google, Feishu, LM Studio, MiniMax, Xiaomi TTS, and local-provider OAuth/token/model requests, harden Codex auth probes, label auth health by agent, preserve explicit agentRuntime pins during Codex model migration, warm provider auth off the main thread, honor Codex response timeouts, stop migrating current Claude Haiku 4.5 profiles to Sonnet, bound local service startup, resolve GPT-5.5 without cached catalog, migrate legacy memory auto-provider config, rewrite non-canonical `api_key` auth profiles, and make doctor restart follow-ups actionable. ([#&#8203;87398](openclaw/openclaw#87398), [#&#8203;86281](openclaw/openclaw#86281), [#&#8203;87361](openclaw/openclaw#87361), [#&#8203;88133](openclaw/openclaw#88133), [#&#8203;83655](openclaw/openclaw#83655), [#&#8203;87559](openclaw/openclaw#87559), [#&#8203;87719](openclaw/openclaw#87719), [#&#8203;88088](openclaw/openclaw#88088), [#&#8203;85924](openclaw/openclaw#85924), [#&#8203;84362](openclaw/openclaw#84362)) Thanks [@&#8203;Patrick-Erichsen](https://github.com/Patrick-Erichsen), [@&#8203;samzong](https://github.com/samzong), [@&#8203;giodl73-repo](https://github.com/giodl73-repo), [@&#8203;alkor2000](https://github.com/alkor2000), [@&#8203;mmaps](https://github.com/mmaps), [@&#8203;nxmxbbd](https://github.com/nxmxbbd), and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Gateway/security/session state: expire browser tokens after auth rotation, scope assistant idempotency dedupe, drain probe client closes, avoid stale restart continuation reuse, preserve retry-after fallbacks and stale rate-limit cooldown probes, bound webchat image and artifact transcript scans, include seconds in inbound metadata timestamps, clear completed session active runs, clear stale chat stream buffers, and evict current plugin-state namespaces at row caps. ([#&#8203;87810](openclaw/openclaw#87810), [#&#8203;87833](openclaw/openclaw#87833), [#&#8203;75089](openclaw/openclaw#75089)) Thanks [@&#8203;joshavant](https://github.com/joshavant) and [@&#8203;litang9](https://github.com/litang9).
- Config/parsing/network: reject partial numeric parsing, parse provider/Discord retry headers and dates strictly, honor IPv6 and bare IPv6 `no_proxy` entries, preserve empty plugin allowlists, canonicalize secret target array indexes, and reject malformed media content lengths, inspected TCP ports, marketplace content lengths, cron epochs, sandbox stat fields, unsafe duration values, empty config path segments, noncanonical schema array refs, unsafe Telegram callback pages, and invalid Teams attachment-fetch DNS targets. ([#&#8203;87883](openclaw/openclaw#87883)) Thanks [@&#8203;zhangguiping-xydt](https://github.com/zhangguiping-xydt).
- Browser/input hardening: reject invalid tab indexes, excessive viewport resizes, explicit zero CDP ports, malformed geolocation options, unsafe screenshot or permission-grant timeouts, loose response-body limits, invalid cookie expiries, and non-finite Browser tool delays/timeouts.
- Cron/automation: retry recurring jobs after transient model rate limits before waiting for the next scheduled slot, and preflight model fallbacks before skipping scheduled work. ([#&#8203;82887](openclaw/openclaw#82887)) Thanks [@&#8203;chen-zhang-cs-code](https://github.com/chen-zhang-cs-code).
- Auto-reply/directives: respect provider and relayed channel metadata during directive persistence so channel-originated decisions keep their intended context. ([#&#8203;87683](openclaw/openclaw#87683))
- WhatsApp: resolve the auth directory from the active profile so profile-scoped WhatsApp installs do not drift to the wrong credential root. ([#&#8203;82492](openclaw/openclaw#82492)) Thanks [@&#8203;lidge-jun](https://github.com/lidge-jun).
- Gateway/session state: clear completed session active runs, avoid cold-loading providers for MCP inventory, cache single-session child indexes, cap handshake timers, and bound preauth, auth-guard, media, transcript, readiness, and port options.
- Channels/replies: preserve channel-owned progress callbacks when verbose output is off, keep group-room progress suppression intact, prefer external session delivery context, escape Discord component id delimiters, force final TUI chat repaints, show Slack reasoning previews, and normalize Discord/Matrix/Mattermost channel numeric options. ([#&#8203;87476](openclaw/openclaw#87476), [#&#8203;87423](openclaw/openclaw#87423))
- Agents/tool args: harden smart-quoted argument repair for edit arrays and exact escaped arguments so model-produced tool calls recover without corrupting valid input. ([#&#8203;86611](openclaw/openclaw#86611)) Thanks [@&#8203;ferminquant](https://github.com/ferminquant).
- Providers/agents: preserve seeded Anthropic signatures, preserve signed thinking payloads, concatenate signature-delta chunks, preserve DeepSeek `reasoning_content` replay across tier suffixes, apply OpenRouter strict9 ids to Mistral routes, promote Ollama plain-text tool calls, load NVIDIA featured model catalogs, stream MiniMax music generation responses, and recover empty preflight compaction. ([#&#8203;87593](openclaw/openclaw#87593), [#&#8203;87493](openclaw/openclaw#87493), [#&#8203;80775](openclaw/openclaw#80775), [#&#8203;84764](openclaw/openclaw#84764)) Thanks [@&#8203;Pluviobyte](https://github.com/Pluviobyte) and [@&#8203;eleqtrizit](https://github.com/eleqtrizit).
- Media/images: skip CLI image cache refs when resolving generated images, allow trusted generated HTML attachments, and bound generated video downloads so stale refs and slow providers fail cleanly. ([#&#8203;87523](openclaw/openclaw#87523), [#&#8203;87982](openclaw/openclaw#87982))
- File transfer: handle late tar stdin pipe errors after archive validation or unpacking has already settled.
- Performance: trust install-record caches between reloads, prefer native JSON parsing, reuse unchanged tool-search catalogs, reuse gateway session and plugin metadata paths, skip unchanged store serialization, patch single-entry session writes, add precomputed session patch writers, reduce store clone allocations, cache manifest model catalog rows and auto-enabled plugin config, avoid full session snapshots for entry reads, defer configured Slack full startup, prefer bundled plugin dist entries, and slim current metadata identity caches. ([#&#8203;87760](openclaw/openclaw#87760))
- Docker/release/QA: package runtime workspace templates, stream cross-OS served artifacts, preserve sparse Crabbox run artifacts, isolate npm plugin installs per package, reject incompatible package plugin API installs, drop the leftover root Sharp dependency from package manifests after the Rastermill migration, bound OpenClaw instance logs, plugin gauntlet relay logs, MCP channel buffers, kitchen-sink scans, agent-turn assertions, QA-Lab credential broker calls, QA Matrix substrate requests, and release scenario logs, and keep release/google live guards current. ([#&#8203;87647](openclaw/openclaw#87647), [#&#8203;87477](openclaw/openclaw#87477)) Thanks [@&#8203;rohitjavvadi](https://github.com/rohitjavvadi) and [@&#8203;vincentkoc](https://github.com/vincentkoc).
- Release/CI: bound manual git fetches, ClawHub verifier responses, ClawHub owner metadata, dependency-guard error bodies, Parallels limits, startup/test/memory budget parsing, and diffs viewer build warnings so release lanes fail with useful proof instead of hanging. ([#&#8203;87839](openclaw/openclaw#87839))

</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/759
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
…w#84535)

* fix(gateway): resolve message action config from runtime snapshot

* fix(gateway): preserve runtime config matching through auto-enable

* fix(gateway): preserve auto-enabled message action fallback

* fix(gateway): use canonical runtime snapshot for message actions

* fix(discord): route credential actions through gateway

---------

Co-authored-by: Merlin <258679497+funmerlin@users.noreply.github.com>
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
…w#84535)

* fix(gateway): resolve message action config from runtime snapshot

* fix(gateway): preserve runtime config matching through auto-enable

* fix(gateway): preserve auto-enabled message action fallback

* fix(gateway): use canonical runtime snapshot for message actions

* fix(discord): route credential actions through gateway

---------

Co-authored-by: Merlin <258679497+funmerlin@users.noreply.github.com>
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

channel: discord Channel integration: discord gateway Gateway runtime 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. 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.

[Bug]: Discord channel-info fails for SecretRef-backed named account while send works

3 participants