Skip to content

fix(telegram): preserve sticker media paths#93130

Merged
vincentkoc merged 4 commits into
openclaw:mainfrom
goutamadwant:fix/83748-telegram-sticker-media-path
Jun 15, 2026
Merged

fix(telegram): preserve sticker media paths#93130
vincentkoc merged 4 commits into
openclaw:mainfrom
goutamadwant:fix/83748-telegram-sticker-media-path

Conversation

@goutamadwant

@goutamadwant goutamadwant commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Keeps cached static Telegram sticker media attached to inbound context instead of dropping the saved media path when a sticker cache hit supplies text.
  • Preserves hydrated reply-chain media as attachable runtime paths while rendering prompt-visible media locators as stable media://inbound/... references.
  • Avoids exposing raw local media-store paths in chat-window prompt text and avoids leaking Telegram provider file refs when a safe hydrated path is available.
  • Removes the stale sticker-media prune helper that made cached sticker media disappear before dispatch.

What problem does this PR solve?

Telegram static stickers could reach the agent as cached sticker text with no usable MediaPath, so image/media tools could not inspect the underlying sticker media.

Why does this matter now?

Issue #83748 is a P2 queued fix for Telegram message-loss behavior where inbound sticker media is not available to the agent.

What is the intended outcome?

Static Telegram sticker media remains available as inbound media for the current turn, and prompt-visible reply/conversation media uses safe media://inbound/... references instead of raw local paths or provider file ids.

What is intentionally out of scope?

Animated TGS/video WEBM sticker support, live Telegram transport changes, and broader Telegram photo behavior outside the sticker/reply-chain path.

What does success look like?

Cached static stickers still provide MediaPath/MediaPaths, reply-chain media remains attachable through the runtime payload, and prompt chat windows do not expose raw local media-store paths.

What should reviewers focus on?

Telegram media context boundaries: cached current-message stickers, direct vs group reply-chain prompt context, and canonicalization of media_path values in inbound-meta.

Summary guidance

This PR description is the contributor's durable explanation of the change. Write it for human maintainers first; ClawSweeper and Barnacle use the same text to understand intent, proof, risk, and current review state.

Describe the intent and outcome in 2-5 bullets. Avoid restating the diff; reviewers and bots can read the changed files.

If this PR fixes a plugin beta-release blocker, title it fix(<plugin-id>): beta blocker - <summary> and link the matching Beta blocker: <plugin-name> - <summary> issue labeled beta-blocker. Contributors cannot label PRs, so the title is the PR-side signal for maintainers and automation.

Linked context

Which issue does this close?

Closes #83748

Which issues, PRs, or discussions are related?

Related #84599

Was this requested by a maintainer or owner?

No direct maintainer assignment. This was selected from the #84599 contributor queue context and the #83748 ClawSweeper labels (queueable-fix, fix-shape-clear, source-repro).

Linked context guidance

Link the issue, PR, discussion, maintainer request, or owner request that explains why this PR should exist. Maintainer context helps reviewers and automation distinguish intended work from drive-by churn.

Real behavior proof (required for external PRs)

  • Behavior or issue addressed: Telegram cached static sticker media and hydrated reply-chain media now keep agent-readable media paths while prompt text gets canonical media://inbound/... locators.
  • Real environment tested: Local OpenClaw source checkout on macOS with Node 22.22.3 from a local node toolchain path, redacted here as <local-node-bin>.
  • Exact steps or command run after this patch:
    • PATH="<local-pnpm-shim>:<local-node-bin>:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" corepack pnpm exec tsx --eval '<production buildTelegramMessageContext sticker payload script>'
    • PATH="<local-pnpm-shim>:<local-node-bin>:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" corepack pnpm exec tsx --eval '<production buildInboundUserContextPrefix media_path rendering script>'
    • PATH="<local-node-bin>:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" node scripts/run-vitest.mjs src/auto-reply/reply/inbound-meta.test.ts extensions/telegram/src/bot-message-context.sticker-media.test.ts extensions/telegram/src/bot.test.ts extensions/telegram/src/message-cache.test.ts extensions/telegram/src/bot.media.stickers-and-fragments.e2e.test.ts src/agents/tools/image-tool.test.ts src/auto-reply/media-note.test.ts
    • PATH="<local-node-bin>:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" corepack pnpm tsgo:extensions
    • PATH="<local-node-bin>:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" corepack pnpm tsgo:core
    • PATH="<local-node-bin>:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" corepack pnpm exec oxfmt --check --threads=1 src/auto-reply/reply/inbound-meta.ts src/auto-reply/reply/inbound-meta.test.ts extensions/telegram/src/bot-handlers.runtime.ts extensions/telegram/src/bot-message-context.session.ts extensions/telegram/src/bot-message-context.ts extensions/telegram/src/bot-message-dispatch.ts extensions/telegram/src/bot-message-context.sticker-media.test.ts extensions/telegram/src/bot.test.ts
    • /usr/bin/git diff --check
    • PATH="<local-node-bin>:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" .agents/skills/autoreview/scripts/autoreview --mode local
  • Evidence after fix (screenshot, recording, terminal capture, console output, redacted runtime log, linked artifact, or copied live output):
    • Terminal capture from production buildTelegramMessageContext in the local OpenClaw checkout:
      REAL_OPENCLAW_STICKER_PROOF_BEGIN
      {
        "Body": "[Telegram Ada id:777 Wed 2025-01-08 16:00:00 PST] Ada: <media:image>",
        "MediaPath": "<redacted-media-store>/media/inbound/sticker.webp",
        "MediaType": "image/webp",
        "MediaPaths": [
          "<redacted-media-store>/media/inbound/sticker.webp"
        ],
        "MediaTypes": [
          "image/webp"
        ],
        "StickerMediaIncluded": true,
        "StickerFileUniqueId": "sticker_unique_789"
      }
      REAL_OPENCLAW_STICKER_PROOF_END
      
    • Terminal capture from production buildInboundUserContextPrefix in the local OpenClaw checkout:
      REAL_OPENCLAW_PROOF_BEGIN
      Current local chat window (untrusted, chronological, before current message):
      #9000 Ada: previous sticker [image/webp media://inbound/previous-sticker.webp]
      REAL_OPENCLAW_PROOF_END
      
    • Supplemental validation: [test] passed 5 Vitest shards in 144.81s; tsgo:extensions and tsgo:core exited 0; direct oxlint on the changed files exited 0; oxfmt --check and /usr/bin/git diff --check exited 0.
  • Observed result after fix: Cached static sticker context keeps MediaPath, MediaType, MediaPaths, MediaTypes, and StickerMediaIncluded. Prompt-visible chat-window context renders media://inbound/... instead of the raw local media-store path or provider file ref. Runtime ReplyChain[].mediaPath stays local/attachable, and group chat-window context does not receive pre-visibility local media paths.
  • What was not tested: Live Telegram bot traffic with real Telegram credentials, docker/all, Crabbox, animated TGS stickers, and video WEBM stickers.
  • Proof limitations or environment constraints: This proof uses a local OpenClaw source checkout with production module calls, minimal runtime stubs, and redacted local paths rather than a live Telegram account. No private Telegram bot token was available or used.
  • Before evidence (optional but encouraged): Before this patch, cached sticker descriptions triggered sticker-media pruning before dispatch, so the context could keep sticker text while losing the saved media path that agent media tools need.
Real behavior proof guidance

External contributors must show after-fix evidence from a real OpenClaw setup. Unit tests, mocks, lint, typechecks, snapshots, and CI are supplemental only.

Screenshots are encouraged even for CLI, console, text, or log changes. Terminal screenshots, copied live output, redacted runtime logs, recordings, and linked artifacts count.

If your environment cannot produce the ideal proof, explain that under Proof limitations or environment constraints so reviewers and ClawSweeper can direct the next step properly.

Be mindful of private information like IP addresses, API keys, phone numbers, non-public endpoints, or other private details when providing evidence.

Tests and validation

Which commands did you run?

  • Production tsx --eval command for buildTelegramMessageContext sticker payload proof.
  • Production tsx --eval command for buildInboundUserContextPrefix prompt rendering proof.
  • Focused Vitest command listed above.
  • corepack pnpm tsgo:extensions
  • corepack pnpm tsgo:core
  • corepack pnpm exec oxfmt --check --threads=1 ...
  • /usr/bin/git diff --check
  • .agents/skills/autoreview/scripts/autoreview --mode local
  • corepack pnpm exec oxlint src/auto-reply/reply/inbound-meta.ts extensions/telegram/src/bot-handlers.runtime.ts extensions/telegram/src/bot-message-context.session.ts extensions/telegram/src/bot-message-context.sticker-media.test.ts

What regression coverage was added or updated?

  • Added a cached static sticker media context regression covering MediaPath, MediaPaths, media type/url fields, and StickerMediaIncluded.
  • Updated Telegram reply-chain tests to verify runtime media paths stay attachable while structured prompt context uses canonical media://inbound/... locators.
  • Updated group chat context coverage so hydrated reply media does not bypass group visibility filtering.
  • Added auto-reply formatter coverage for absolute media-store paths, malicious-looking canonical media ids, and already-encoded canonical ids that must not be double-encoded.

What failed before this fix, if known?

Cached sticker descriptions caused sticker media to be pruned from the dispatch context, leaving no agent-readable saved media path for static sticker inspection.

If no test was added, why not?

Not applicable. Focused regression tests were added and updated.

Testing guidance

List focused commands, not every incidental check. CI is useful support, but external PRs still need real behavior proof above when behavior changes.

Risk checklist

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

Yes.

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

No.

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

Yes. Prompt-visible media locator handling was tightened so local filesystem paths are not rendered and untrusted media_path values are canonicalized before transcript rendering. No auth, secrets, network, or tool execution behavior changed.

What is the highest-risk area?

Media context boundary handling: keeping runtime attachment paths usable while only exposing safe canonical locators in prompt-visible chat windows.

How is that risk mitigated?

Focused direct/group Telegram tests, cached-sticker media tests, auto-reply path canonicalization tests, TypeScript checks, formatting checks, git diff --check, and a clean local autoreview pass.

Risk guidance

Use this for author judgment that is not obvious from the diff. ClawSweeper can see touched files, but it cannot know which behavior you think is risky, why the risk is acceptable, or what mitigation reviewers should verify.

Current review state

What is the next action?

Maintainer review of the open PR.

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

Waiting on maintainer review, CI, and any maintainer-requested live Telegram proof. Author-side local production-command proof and supplemental source/test proof are complete.

Which bot or reviewer comments were addressed?

Local autoreview findings were addressed before the original commit: chat-window media_path rendering support, unused sticker cache plumbing, group visibility for reply-chain media, raw local path prompt exposure, runtime attachment path preservation, untrusted media_path sanitization, and canonical URI double-encoding. PR #93130 CI feedback was addressed after opening: no-control-regex lint failures, the TS2556 test mock spread type error, and the Real behavior proof gate's request for non-test copied live output.

Review state guidance

Keep this as the durable state for review progress. If useful information appears in comments, fold the current next action or blocker back here so maintainers and ClawSweeper do not need to reconstruct state from comment history.

@openclaw-barnacle openclaw-barnacle Bot added channel: telegram Channel integration: telegram size: M triage: mock-only-proof Candidate: PR proof only shows tests, mocks, snapshots, lint, typecheck, or CI. labels Jun 15, 2026
@clawsweeper

clawsweeper Bot commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs changes before merge. Reviewed June 15, 2026, 2:28 AM ET / 06:28 UTC.

Summary
This PR preserves cached Telegram sticker media paths, keeps reply-chain media attachable, canonicalizes prompt-visible inbound media locators, and updates related Telegram/core media tests.

PR surface: Source +167, Tests +352. Total +519 across 21 files.

Reproducibility: yes. at source level: current main removes cached sticker media from inbound context when stickerCacheHit is true, and the PR tests target that path. I did not run a live Telegram reproduction in this read-only review.

Review metrics: 1 noteworthy metric.

  • Validation blockers: 3 failed checks; 2 changed-line blockers. check-test-types and check-lint fail on changed test lines, while check-prod-types reports a separate unchanged Telegram file on the merge ref.

Stored data model
Persistent data-model change detected: serialized state: src/auto-reply/reply/dispatch-acp.test.ts. Confirm migration or upgrade compatibility proof before merge.

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🐚 platinum hermit
Patch quality: 🦪 silver shellfish
Result: blocked by patch quality or review findings.

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

Rank-up moves:

  • [P2] Fix the two changed-line CI blockers in the added/updated tests.
  • [P2] Rerun focused test-type and lint checks after the repair.
  • Optionally capture live Telegram sticker proof if maintainers want transport-level confidence before landing.

Mantis proof suggestion
A live Telegram lane would materially prove sticker media hydration and prompt sanitization across the real update/download/agent handoff path. A maintainer can ask Mantis to capture proof by posting a new PR comment that starts with the OpenClaw Mantis account mention, followed by:

telegram live: send a static WEBP sticker to the bot and verify the agent receives an inspectable inbound media path without raw local paths or telegram:file refs in prompt-visible context.

Risk before merge

  • [P1] Required checks are currently red: check-test-types and check-lint fail on changed test lines, and check-prod-types also reports an unchanged Telegram rich-message parameter on the merge ref.
  • [P1] The diff changes Telegram inbound media delivery and prompt path sanitization; live Telegram proof is still the strongest confirmation even though a repository member applied proof override.

Maintainer options:

  1. Repair Changed-Line Validation Blockers (recommended)
    Fix the two PR-introduced test type/lint failures, then rerun the focused test-type and lint checks before merge.
  2. Capture Live Telegram Proof
    A maintainer can still request a live static WEBP sticker run to prove the agent gets an inspectable inbound path and prompt text stays sanitized.
  3. Accept Proof Override Deliberately
    Maintainers may land after checks are green with the current proof override if they explicitly accept the missing live Telegram transport proof.
Copy recommended automerge instruction
@clawsweeper automerge

Special instructions:
Fix only the branch-introduced test validation blockers: type the describeStickerImage mock in extensions/telegram/src/bot-message-dispatch.test.ts so string descriptions are accepted, and rewrite the malformed Unicode media_path fixture in src/auto-reply/reply/inbound-meta.test.ts without the unnecessary template expression. Do not change runtime behavior.

Next step before merge

  • [P2] A repair worker can fix the two branch-introduced validation blockers without changing the runtime behavior; maintainer proof acceptance can happen after checks are green.

Security
Cleared: No concrete security or supply-chain regression was found; the diff changes prompt-path sanitization in a protective direction and does not touch dependencies, workflows, secrets, auth, or downloaded code.

Review findings

  • [P2] Fix the sticker image mock result type — extensions/telegram/src/bot-message-dispatch.test.ts:559
  • [P2] Simplify the malformed Unicode media path fixture — src/auto-reply/reply/inbound-meta.test.ts:953
Review details

Best possible solution:

Land the Telegram-scoped media preservation fix after the narrow validation blockers are repaired and maintainers accept or capture live Telegram proof for the reply-context media boundary.

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

Yes at source level: current main removes cached sticker media from inbound context when stickerCacheHit is true, and the PR tests target that path. I did not run a live Telegram reproduction in this read-only review.

Is this the best way to solve the issue?

Mostly yes: preserving Telegram-owned media facts and skipping only duplicate sticker understanding is the right layer. As submitted, the best path is to fix the changed-line validation blockers before merge.

Full review comments:

  • [P2] Fix the sticker image mock result type — extensions/telegram/src/bot-message-dispatch.test.ts:559
    This new test currently makes check-test-types fail: describeStickerImage.mockResolvedValueOnce("A curious sticker") is rejected because the mock is typed as resolving null. Type the mock to allow a string result, or set it up from the production function return type, so test type checking can pass.
    Confidence: 0.96
  • [P2] Simplify the malformed Unicode media path fixture — src/auto-reply/reply/inbound-meta.test.ts:953
    This new fixture makes check-lint fail with typescript(no-unnecessary-template-expression). Build the malformed string without the unnecessary template expression while keeping the invalid-surrogate coverage.
    Confidence: 0.96

Overall correctness: patch is incorrect
Overall confidence: 0.86

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Override: A maintainer applied proof: override for this PR.
  • remove status: 📣 needs proof: Current PR status label is status: ⏳ waiting on author.

Label justifications:

  • P2: This is a focused Telegram media regression fix with limited blast radius, but the PR remains blocked by narrow validation failures.
  • merge-risk: 🚨 message-delivery: The PR changes how Telegram sticker and reply-chain media paths reach the agent, so a bad merge could still leave inbound media unavailable or mis-associated.
  • merge-risk: 🚨 security-boundary: The PR changes prompt-visible handling of local media paths and Telegram provider refs, so the sanitization boundary needs green validation and maintainer proof acceptance.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🐚 platinum hermit and patch quality is 🦪 silver shellfish.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Override: A maintainer applied proof: override for this PR.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. This PR changes visible Telegram sticker/reply-context behavior that can be demonstrated in a short live Telegram proof.
Evidence reviewed

PR surface:

Source +167, Tests +352. Total +519 across 21 files.

View PR surface stats
Area Files Added Removed Net
Source 12 230 63 +167
Tests 9 429 77 +352
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 21 659 140 +519

Acceptance criteria:

  • [P1] pnpm check:test-types.
  • [P1] pnpm lint --threads=8.
  • [P1] node scripts/run-vitest.mjs extensions/telegram/src/bot-message-dispatch.test.ts src/auto-reply/reply/inbound-meta.test.ts.

What I checked:

Likely related people:

  • vincentkoc: git blame ties the current-main sticker media pruning behavior to 10b0dea, and the latest PR head/comment show the maintainer repair commit defde22 authored by Vincent Koc. (role: introduced behavior and recent repair owner; confidence: high; commits: 10b0dea77af0, defde227ee2e; files: extensions/telegram/src/bot-message-context.session.ts, extensions/telegram/src/bot-message-dispatch.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 the rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. label Jun 15, 2026
@goutamadwant
goutamadwant force-pushed the fix/83748-telegram-sticker-media-path branch from 1f45fed to 46d2ff4 Compare June 15, 2026 05:06
@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 Jun 15, 2026
@goutamadwant

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 15, 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. 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: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. and removed rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. labels Jun 15, 2026
@vincentkoc vincentkoc self-assigned this Jun 15, 2026
@vincentkoc
vincentkoc force-pushed the fix/83748-telegram-sticker-media-path branch from 46d2ff4 to defde22 Compare June 15, 2026 06:20
@vincentkoc

Copy link
Copy Markdown
Member

Maintainer repair is pushed at defde227ee and is land-ready from local proof.

Repairs made:

  • preserve hydrated sticker media paths and reject malformed Unicode paths safely
  • skip duplicate automatic understanding only for the already-described non-vision sticker
  • keep supplemental/reply media eligible for understanding
  • preserve cached sticker descriptions plus user text through context construction and dispatch

Verification:

  • node scripts/run-vitest.mjs extensions/telegram/src/bot-message-context.body.test.ts extensions/telegram/src/bot-message-dispatch.test.ts src/auto-reply/reply/inbound-meta.test.ts src/auto-reply/reply/get-reply.message-hooks.test.ts src/auto-reply/reply/dispatch-acp.test.ts src/media-understanding/runner.attachments.test.ts extensions/telegram/src/bot-message-context.sticker-media.test.ts extensions/telegram/src/bot.test.ts extensions/telegram/src/message-cache.test.ts extensions/telegram/src/bot.media.stickers-and-fragments.e2e.test.ts src/agents/tools/image-tool.test.ts src/media/media-reference.test.ts src/auto-reply/media-note.test.ts — 475 tests passed across 6 shards, both before and after rebase onto current main
  • git diff --check origin/main...HEAD — clean
  • fresh branch autoreview against origin/main — clean

Known proof gap: live Telegram Desktop/Crabbox proof is blocked in this environment because Testbox has no blacksmith executable and the repo-default Azure Crabbox path has expired Azure CLI auth. CI is running on the repaired head.

@vincentkoc vincentkoc added the proof: override Maintainer override for the external PR real behavior proof gate. label Jun 15, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: supplied External PR includes structured after-fix real behavior proof. label Jun 15, 2026
@clawsweeper clawsweeper Bot removed the status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. label Jun 15, 2026
@clawsweeper clawsweeper Bot added the status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. label Jun 15, 2026
@vincentkoc

Copy link
Copy Markdown
Member

Maintainer follow-up on head 86980e4e1c:

  • fixed the PR-local check-test-types failure by widening the sticker-description mock to Promise<string | null>
  • fixed the PR-local check-lint failure by simplifying the malformed-Unicode fixture without changing its runtime value
  • focused proof: node scripts/run-vitest.mjs extensions/telegram/src/bot-message-dispatch.test.ts src/auto-reply/reply/inbound-meta.test.ts — 173 tests passed across 2 shards
  • targeted oxlint, oxfmt --check, and git diff --check are clean
  • fresh branch autoreview against current origin/main: clean, no actionable findings

Fresh CI: https://github.com/openclaw/openclaw/actions/runs/27528424344

@vincentkoc
vincentkoc merged commit 1c30bb8 into openclaw:main Jun 15, 2026
160 of 161 checks passed
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 16, 2026
* fix(telegram): preserve sticker media paths

* fix(telegram): address PR validation failures

* fix(telegram): preserve sticker media context

* test(telegram): fix sticker proof checks

---------

Co-authored-by: Vincent Koc <[email protected]>
wangmiao0668000666 pushed a commit to wangmiao0668000666/openclaw that referenced this pull request Jun 17, 2026
* fix(telegram): preserve sticker media paths

* fix(telegram): address PR validation failures

* fix(telegram): preserve sticker media context

* test(telegram): fix sticker proof checks

---------

Co-authored-by: Vincent Koc <[email protected]>
crh-code pushed a commit to crh-code/openclaw that referenced this pull request Jun 18, 2026
* fix(telegram): preserve sticker media paths

* fix(telegram): address PR validation failures

* fix(telegram): preserve sticker media context

* test(telegram): fix sticker proof checks

---------

Co-authored-by: Vincent Koc <[email protected]>
badgerbees pushed a commit to badgerbees/openclaw that referenced this pull request Jul 8, 2026
* fix(telegram): preserve sticker media paths

* fix(telegram): address PR validation failures

* fix(telegram): preserve sticker media context

* test(telegram): fix sticker proof checks

---------

Co-authored-by: Vincent Koc <[email protected]>
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: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. P2 Normal backlog priority with limited blast radius. proof: override Maintainer override for the external PR real behavior proof gate. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. size: L status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Telegram inbound stickers are not hydrated as agent-readable media

2 participants