Skip to content

[codex] Fix Telegram DM topic session routing#88421

Merged
steipete merged 1 commit into
openclaw:mainfrom
brokemac79:codex/issue-80212-telegram-session-routing
May 31, 2026
Merged

[codex] Fix Telegram DM topic session routing#88421
steipete merged 1 commit into
openclaw:mainfrom
brokemac79:codex/issue-80212-telegram-session-routing

Conversation

@brokemac79

@brokemac79 brokemac79 commented May 30, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR fixes Telegram proactive DM-topic session continuity for #80212.

  • Aligns outbound Telegram direct-topic session keys with inbound DM-topic reply routing by using the chatId:threadId thread suffix.
  • Preserves Telegram delivery metadata as the numeric topic id, so outbound delivery still uses 174872 rather than the scoped session token.
  • Keeps the change scoped to Telegram outbound session routing and focused regression coverage.
  • Intentionally does not add cron session-key overrides, aliases, or broad shared outbound routing changes.

Linked context

Closes #80212

Related #82164, #82200, #18974, #18993

Requested by maintainer coordination for issue-80212.

Real behavior proof

  • Behavior or issue addressed: Proactive Telegram DM-topic sends under isolated DM scope now create/use the same scoped session key shape that inbound topic replies use, while Telegram delivery still receives the numeric topic id.
  • Real environment tested: Live OpenClaw 2026.5.27 (27ae826) on the user's VPS polymarket-mc, using Ant_clawd_bot and a real private Telegram DM topic. Chat/user ids are redacted as <chatId>. A temporary PR-equivalent bundle patch was applied for the proof and restored afterward.
  • Exact steps or command run after this patch:
    1. User created a private Telegram DM topic and sent oc-88421 proof start.
    2. Applied the PR-equivalent outbound route patch to the installed VPS bundle and restarted the OpenClaw gateway.
    3. Verified the patched route shape before sending.
    4. Sent a proactive Telegram message with openclaw message send --channel telegram --target <chatId> --thread-id 40931 --message "oc-88421 proof proactive send from patched OpenClaw route..." --json.
    5. User replied in the same topic with oc-88421 proof reply.
    6. Restored the installed bundle from backup and verified the gateway was ready.
  • Evidence after fix: Redacted live route output, CLI send output, and runtime log excerpts from the VPS:
{
  "sessionKeyShape": "agent:main:telegram:direct:<chatId>:thread:<chatId>:40931",
  "baseSessionKeyShape": "agent:main:telegram:direct:<chatId>",
  "threadId": 40931,
  "fromShape": "telegram:<chatId>:topic:40931",
  "toShape": "telegram:<chatId>",
  "chatType": "direct"
}
{
  "action": "send",
  "channel": "telegram",
  "dryRun": false,
  "handledBy": "plugin",
  "messageId": "9465",
  "payload": { "ok": true, "messageId": "9465" }
}
[telegram] outbound send ok accountId=default chatId=<chatId> messageId=9465 operation=sendMessage deliveryKind=text threadId=40931 chunkCount=1
[telegram] Inbound message telegram:<chatId> -> @Ant_clawd_bot (direct, 22 chars)
[plugins] active-memory: agent=main session=agent:main:telegram:direct:<chatId>:thread:<chatId>:40931 activeProvider=codex activeModel=gpt-5.5 start timeoutMs=5000 queryChars=22 searchQueryChars=22
Request timed out before a response was generated. Please try again, or increase `agents.defaults.timeoutSeconds` in your config.
[telegram] outbound send ok accountId=default chatId=<chatId> messageId=9467 operation=sendMessage deliveryKind=text threadId=40931 chunkCount=1

Full proof comment: #88421 (comment)

  • Observed result after fix: The proactive send created the scoped session key agent:main:telegram:direct:<chatId>:thread:<chatId>:40931; the user reply was processed in that same scoped session; both the proactive message and the visible timeout response delivered with numeric threadId=40931, not the scoped chatId:threadId token.
  • What was not tested: Group-topic routing, cron delivery, and Crabbox/Mantis credentialed Telegram proof were not rerun. The live bot response timed out because of the user's prod agent timeout, but the routing and numeric-topic delivery proof completed.

Source-runtime proof

Local OpenClaw source runtime at C:\oc-work\oc-80212 also invoked the production Telegram plugin resolver directly with Node/tsx.

node --import tsx -e "const { telegramPlugin } = await import('./extensions/telegram/src/channel.ts'); const route = await telegramPlugin.messaging?.resolveOutboundSessionRoute?.({ cfg: { session: { dmScope: 'per-account-channel-peer' } }, agentId: 'finance', accountId: 'finance', target: '104506878:topic:174872' }); console.log(JSON.stringify({ sessionKey: route?.sessionKey, baseSessionKey: route?.baseSessionKey, threadId: route?.threadId, from: route?.from, to: route?.to }, null, 2));"

Output:

{
  "sessionKey": "agent:finance:telegram:finance:direct:104506878:thread:104506878:174872",
  "baseSessionKey": "agent:finance:telegram:finance:direct:104506878",
  "threadId": 174872,
  "from": "telegram:104506878:topic:174872",
  "to": "telegram:104506878"
}

Tests and validation

Which commands did you run?

  • pnpm install --frozen-lockfile
  • node scripts/run-vitest.mjs extensions/telegram/src/session-route.test.ts
  • node scripts/run-vitest.mjs extensions/telegram/src/session-route.test.ts extensions/telegram/src/bot-message-context.dm-threads.test.ts src/infra/outbound/outbound-session.test.ts
  • git diff --check
  • $env:PYTHONIOENCODING='utf-8'; python .agents\skills\autoreview\scripts\autoreview --mode local

What regression coverage was added or updated?

  • Added an isolated per-account Telegram DM-topic outbound regression for the reported finance account/session shape.
  • Updated the existing direct-topic regression so outbound direct-topic session suffixes include the chat id, matching inbound DM topic replies.
  • Updated recovered current-session coverage so delivery metadata remains numeric even when the session suffix is scoped.

What failed before this fix, if known?

  • The new isolated DM-topic assertion would have produced agent:finance:telegram:finance:direct:104506878:thread:174872 before this change.

Risk checklist

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

Yes. Telegram proactive DM-topic sessions now align with inbound replies.

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

No.

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

No.

What is the highest-risk area?

Telegram direct-topic route metadata, especially separating session suffixes from numeric delivery topic ids.

How is that risk mitigated?

The source-runtime proof, live Telegram proof, and regression tests assert both the aligned session key and the preserved numeric delivery thread id.

Current review state

What is the next action?

Maintainer review and CI.

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

Live Telegram proof has now been supplied in the PR body and proof comment. Awaiting maintainer/automation review and CI.

Which bot or reviewer comments were addressed?

Focused autoreview initially caught recovered current-session delivery metadata using scoped tokens; this patch was updated and the final autoreview was clean.

@openclaw-barnacle openclaw-barnacle Bot added channel: telegram Channel integration: telegram size: XS triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. labels May 30, 2026
@brokemac79
brokemac79 force-pushed the codex/issue-80212-telegram-session-routing branch from 2270a0b to c60dd29 Compare May 30, 2026 19:03
@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 30, 2026
@clawsweeper

clawsweeper Bot commented May 30, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed May 30, 2026, 6:40 PM ET / 22:40 UTC.

Summary
This PR changes Telegram outbound direct-topic routing to build chat-scoped session suffixes, re-normalizes delivery thread IDs to numeric topic IDs, and updates session-route regression tests.

PR surface: Source +5, Tests +17. Total +22 across 2 files.

Reproducibility: yes. The current main resolver and inbound session code show the mismatched outbound bare-topic suffix versus inbound chat-scoped suffix; I did not execute tests because this review is read-only.

Review metrics: 1 noteworthy metric.

  • Telegram session-key shape: 1 direct-topic session suffix changed. The PR intentionally changes the persisted key shape for Telegram direct-topic proactive sessions, which is the main compatibility point to 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:

  • [P2] Maintainer should explicitly accept the scoped DM-topic session-key cutover or request a narrow compatibility bridge before merge.

Risk before merge

  • [P1] Merging this changes the persisted Telegram direct-topic session key used by proactive sends from a bare topic suffix to a chat-scoped suffix; existing outbound-only DM-topic session rows under the old key may not be reused unless maintainers accept that one-time cutover or add a narrow compatibility bridge.
  • [P1] The highest-risk behavior is keeping scoped session suffixes out of Telegram delivery metadata; the patch and live logs support the separation, but a regression here would misroute or fail visible Telegram sends.
  • [P1] The live proof exercised the shared proactive send resolver, not a full scheduled cron run; the code path is shared, but maintainers may still want to decide whether that is enough for the linked cron-origin issue.

Maintainer options:

  1. Accept the scoped-key cutover (recommended)
    Maintainers can accept the one-time session-key cutover because the old outbound key did not match inbound replies and the PR proves the new key plus numeric delivery metadata in a live Telegram topic.
  2. Add a narrow compatibility bridge
    If old outbound-only DM-topic rows must remain readable, require a focused alias or lookup path for the previous bare-topic suffix before merge.
  3. Hold for live cron proof
    If the linked cron workflow must be proven end to end, pause merge until the same resolver path is exercised from an actual scheduled run into a real Telegram DM topic.

Next step before merge

  • Manual review is appropriate because the remaining action is maintainer acceptance of a compatibility-sensitive Telegram session-key cutover, not a narrow repairable defect.

Security
Cleared: The diff only changes Telegram route computation and a focused test file; it does not add dependencies, workflows, secrets handling, package scripts, or new code-execution surfaces.

Review details

Best possible solution:

Land the narrow route fix after maintainer acceptance of the one-time DM-topic session-key cutover; add a compatibility bridge only if old outbound-only session rows are considered a shipped data contract.

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

Yes. The current main resolver and inbound session code show the mismatched outbound bare-topic suffix versus inbound chat-scoped suffix; I did not execute tests because this review is read-only.

Is this the best way to solve the issue?

Yes, with maintainer acceptance. The narrowest maintainable fix is to align Telegram's plugin-owned outbound route with inbound DM-topic session keys while re-normalizing delivery metadata to the numeric Telegram topic id.

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR includes redacted live Telegram VPS logs and CLI output showing after-fix scoped session continuity plus numeric topic delivery.

Label justifications:

  • P2: This is a focused Telegram session-continuity fix with limited channel-specific blast radius and strong proof, but it is not an emergency runtime outage.
  • merge-risk: 🚨 session-state: The diff changes which persisted Telegram DM-topic session key proactive sends create and reuse.
  • merge-risk: 🚨 message-delivery: The same route object also carries Telegram delivery metadata, so a mistake could send to the wrong topic or pass a scoped token where Telegram expects a numeric topic id.
  • 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 (logs): The PR includes redacted live Telegram VPS logs and CLI output showing after-fix scoped session continuity plus numeric topic delivery.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR includes redacted live Telegram VPS logs and CLI output showing after-fix scoped session continuity plus numeric topic delivery.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The PR changes visible Telegram DM-topic routing behavior that can be demonstrated in a short Telegram proof flow.
Evidence reviewed

PR surface:

Source +5, Tests +17. Total +22 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 1 8 3 +5
Tests 1 20 3 +17
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 2 28 6 +22

What I checked:

  • Current main source shows the mismatch target: Current main passes the numeric Telegram topic id directly into buildThreadAwareOutboundSessionRoute, so proactive direct-topic sends produce a bare topic suffix rather than the inbound chat-scoped suffix. (extensions/telegram/src/channel.ts:556, 57c88dd46e2d)
  • PR diff aligns session keys while preserving delivery metadata: The PR head changes the direct-topic session suffix to <chatId>:<topicId> and then derives deliveryThreadId back to the numeric Telegram topic id before returning the route. (extensions/telegram/src/channel.ts:556, d904115e4cd0)
  • Inbound routing uses chat-scoped DM topic keys: The inbound Telegram session path already builds DM-topic thread session keys with ${chatId}:${dmThreadId}, which matches the PR's new outbound suffix shape. (extensions/telegram/src/bot-handlers.runtime.ts:626, 57c88dd46e2d)
  • Telegram delivery contract stays numeric: Telegram send helpers build Bot API message_thread_id from numeric DM topic ids, and the Telegram maintainer note says DM topics and forum topics are distinct transport concepts; this supports keeping scoped session keys out of delivery metadata. (extensions/telegram/src/bot/helpers.ts:417, 57c88dd46e2d)
  • PR proof is real and relevant: The PR body and proof comment include redacted live OpenClaw VPS logs showing a proactive Telegram DM-topic send creating agent:main:telegram:direct:<chatId>:thread:<chatId>:40931, the user reply landing in that same session, and both visible sends using numeric threadId=40931. (d904115e4cd0)
  • Regression tests cover the route shape: The PR head adds an isolated per-account-channel-peer direct-topic test for the reported finance-account key shape and updates recovered current-session coverage to assert numeric delivery thread ids. (extensions/telegram/src/session-route.test.ts:17, d904115e4cd0)

Likely related people:

  • steipete: Current main blame and commit history tie the Telegram outbound session route and tests to 3fc0df953cf17b8bc47e45250c84965765cfed76, merged from the recent core thread-binding work; the live PR is also assigned to this handle. (role: recent area contributor and assigned reviewer; confidence: high; commits: 3fc0df953cf1; files: extensions/telegram/src/channel.ts, extensions/telegram/src/session-route.test.ts, src/plugin-sdk/core.ts)
  • obviyus: The related merged DM-topic routing PR at fix: preserve Telegram DM topic thread routing #18993 was authored and merged by this handle, making them relevant historical context for Telegram topic delivery behavior. (role: prior DM-topic routing contributor; confidence: medium; commits: 900b97e3c734; files: extensions/telegram/src/bot/helpers.ts, extensions/telegram/src/send.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. mantis: telegram-visible-proof Mantis should capture Telegram visible proof. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. labels May 30, 2026
@brokemac79

brokemac79 commented May 30, 2026

Copy link
Copy Markdown
Contributor Author

@openclaw-mantis telegram-visible-proof requested for PR 88421 / issue 80212.

Please use the Crabbox native Telegram Desktop proof path for the exact ClawSweeper proof shape:

  • proactive Telegram DM-topic send under isolated DM scope
  • user reply in that same DM topic lands back in the same OpenClaw session
  • outbound delivery uses numeric Telegram message_thread_id/topic id, not the scoped chatId:topicId session token

Redact bot tokens and user identifiers as needed. Do not trigger ClawSweeper re-review.

@clawsweeper

clawsweeper Bot commented May 30, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

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

@steipete steipete self-assigned this May 30, 2026
@steipete

Copy link
Copy Markdown
Contributor

Real behavior proof attempt for the Telegram DM-topic path is currently blocked by the live QA credential, not by a local test failure.

Behavior addressed: attempted proactive Telegram DM-topic send plus same-topic user reply routing for PR 88421 under isolated DM scope.

Real environment tested: AWS Crabbox cbx_d788acfdae23 / blue-lobster; OpenClaw PR head c60dd2907c1663fc0f9b207de3b31af73608f13f; SUT bot @foremanclawbot; tester/user IDs redacted in this comment.

Exact steps or command run after this patch: started scripts/e2e/telegram-user-crabbox-proof.ts start with the Telegram user Crabbox harness, set root session.dmScope=per-account-channel-peer, restarted the local SUT gateway with the harness private payload token, then probed Telegram DM-topic behavior through Bot API and TDLib.

Evidence after fix: the gateway came up with the PR head and isolated DM scope, but Telegram capability probing returned getMe.has_topics_enabled=false for the leased SUT bot. A Bot API DM send to the tester with numeric message_thread_id=42 returned 400 Bad Request: message thread not found. A TDLib user send to @foremanclawbot with --thread-id 42 returned Invalid message thread ID specified. @BotFather /mybots from the leased tester account returned You have currently no bots, so this Crabbox user cannot enable Threaded Mode for the SUT bot.

Observed result after fix: no valid Telegram private DM topic could be created or opened with the current QA credential, so the requested real DM-topic roundtrip proof cannot be produced from this lease. The Crabbox credential and AWS box were released after the attempt.

What was not tested: the requested successful proof shape, namely proactive DM-topic send, same-topic user reply into the same OpenClaw session, and successful outbound delivery into a Telegram private topic. That needs a topics-enabled SUT bot credential, or the owner of @foremanclawbot to enable Threaded Mode in BotFather Mini App, then rerun this same proof path.

@brokemac79

Copy link
Copy Markdown
Contributor Author

Proof status reminder for issue #80212 / PR #88421:

The source regression and local route proof are in place, but the remaining requested proof is still the live/real-behavior Telegram DM-topic path:

  • proactive Telegram DM-topic send under isolated DM scope
  • reply in that same DM topic lands back in the same OpenClaw session
  • outbound delivery keeps using the numeric Telegram message_thread_id / topic id, not the scoped chatId:topicId session token

Current blocker: the available Crabbox/Mantis Telegram proof path is not producing that artifact yet. A prior maintainer-triggered Mantis run reached Crabbox but failed because the harness could not open a comparable direct Telegram DM-topic view; local runner access is also blocked without the Convex Telegram QA credential env. We also intentionally did not use the reporter's VPS group/forum topics because group-topic proof would not cover the direct DM-topic issue shape.

No re-review request intended from this comment. This is just a reminder/status note until the Telegram Crabbox credential/harness path is healthy or a maintainer provides equivalent redacted proof.

Copy link
Copy Markdown
Contributor Author

Live Telegram DM-topic proof addendum

Ran a live proof on the user's OpenClaw VPS with a temporary PR-equivalent bundle patch, then restored the installed bundle from backup.

Environment:

  • OpenClaw 2026.5.27 (27ae826) on VPS polymarket-mc
  • Bot: Ant_clawd_bot
  • Private Telegram DM topic created by the user
  • Chat/user ids redacted below as <chatId>

Proof flow:

  1. User sent oc-88421 proof start inside a private Telegram DM topic.
  2. Before the patch, installed OpenClaw recorded the inbound topic under the base direct session key while preserving numeric threadId=40931.
  3. Applied the PR-equivalent outbound route patch to the installed bundle and restarted the gateway.
  4. Verified the patched route before sending:
{
  "sessionKeyShape": "agent:main:telegram:direct:<chatId>:thread:<chatId>:40931",
  "baseSessionKeyShape": "agent:main:telegram:direct:<chatId>",
  "threadId": 40931,
  "fromShape": "telegram:<chatId>:topic:40931",
  "toShape": "telegram:<chatId>",
  "chatType": "direct"
}
  1. Sent proactive Telegram message via OpenClaw:
openclaw message send --channel telegram --target <chatId> --thread-id 40931 --message "oc-88421 proof proactive send from patched OpenClaw route..." --json

Result:

{
  "action": "send",
  "channel": "telegram",
  "dryRun": false,
  "handledBy": "plugin",
  "messageId": "9465",
  "payload": { "ok": true, "messageId": "9465" }
}

Server log confirms delivery used the numeric topic id, not the scoped session token:

[telegram] outbound send ok accountId=default chatId=<chatId> messageId=9465 operation=sendMessage deliveryKind=text threadId=40931 chunkCount=1
  1. User replied in the same Telegram topic with oc-88421 proof reply.

Server log confirms the reply landed back in the same scoped session:

[telegram] Inbound message telegram:<chatId> -> @Ant_clawd_bot (direct, 22 chars)
[plugins] active-memory: agent=main session=agent:main:telegram:direct:<chatId>:thread:<chatId>:40931 activeProvider=codex activeModel=gpt-5.5 start timeoutMs=5000 queryChars=22 searchQueryChars=22

The bot's timeout/status response also delivered back into the same numeric topic id:

Request timed out before a response was generated. Please try again, or increase `agents.defaults.timeoutSeconds` in your config.
[telegram] outbound send ok accountId=default chatId=<chatId> messageId=9467 operation=sendMessage deliveryKind=text threadId=40931 chunkCount=1

Cleanup/restoration:

  • Restored /usr/lib/node_modules/openclaw/dist/channel-GZO0Y5Xk.js from timestamped backup.
  • Verified restored file hash matches backup.
  • Verified gateway returned ready after restore.
  • Local worktree remains clean and git diff --check passes.

Residual note: the visible bot reply was a normal agent timeout, not a routing failure; it still proves the reply was processed in the scoped DM-topic session and delivered back to numeric threadId=40931.

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

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 30, 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. 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 30, 2026
@clawsweeper clawsweeper Bot added the status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. label May 30, 2026
@brokemac79
brokemac79 force-pushed the codex/issue-80212-telegram-session-routing branch from c60dd29 to 2492c08 Compare May 30, 2026 22:19
@brokemac79
brokemac79 marked this pull request as ready for review May 30, 2026 22:19
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 30, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 30, 2026
@brokemac79
brokemac79 force-pushed the codex/issue-80212-telegram-session-routing branch from 2492c08 to d904115 Compare May 30, 2026 22:33
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 30, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 30, 2026

@steipete steipete left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Maintainer review: approved for landing.

Verification reviewed before merge:

  • PR head: d904115
  • Live PR checks: CI/check lanes green; Real behavior proof green; OpenGrep green; CodeQL neutral/pass.
  • Local maintainer review: source mismatch confirmed between outbound direct-topic session suffix and inbound DM-topic reply session suffix.
  • Merge sanity: merge-tree against current origin/main has no conflicts; git diff --check on touched files passed.

Accepted risk: this intentionally cuts proactive Telegram DM-topic outbound sessions over from the old bare topic suffix to the inbound-compatible chat-scoped suffix. No compatibility bridge is needed because the old key shape was the reported bug, not a public contract.

@steipete
steipete merged commit 72c61bc into openclaw:main May 31, 2026
148 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

channel: telegram Channel integration: telegram mantis: telegram-visible-proof Mantis should capture Telegram visible proof. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. 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: XS 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.

[Feature Request] Allow cron jobs to set session key matching inbound DM reply routing

2 participants