Skip to content

fix(cron): announce delivery for Telegram forum topics#49704

Closed
etticat wants to merge 1 commit into
openclaw:mainfrom
etticat:fix/cron-announce-telegram-forum-topics
Closed

fix(cron): announce delivery for Telegram forum topics#49704
etticat wants to merge 1 commit into
openclaw:mainfrom
etticat:fix/cron-announce-telegram-forum-topics

Conversation

@etticat

@etticat etticat commented Mar 18, 2026

Copy link
Copy Markdown

Problem

Cron jobs with delivery.mode = "announce" silently fail to deliver to Telegram forum topics. The deliveryStatus shows "not-delivered" with no surfaced error, even with valid targets like telegram:-GROUP/TOPIC or telegram:group:-GROUP:topic:TOPIC.

Root cause: resolveDeliveryTarget in delivery-target.ts relies on parseExplicitTargetWithPlugin to extract the threadId from forum topic target strings. But this function calls resolveOutboundChannelPlugin, which requires the Telegram plugin to be bootstrapped — and bootstrap only happens when the gateway config includes a Telegram account. In isolated cron sessions (no full gateway config), the plugin is never loaded, so parseExplicitTarget is never called, and the threadId is silently dropped.

Additionally, parseTelegramTarget did not handle the legacy slash format (chatId/topicId), causing it to pass the full string as chatId.

Fix

  1. Pre-parse forum topic formats in delivery-target.ts using a lightweight regex parser (extractForumTopicFromTarget) that doesn't depend on plugin loading. This runs before resolveSessionDeliveryTarget and injects the extracted threadId as explicitThreadId.
  2. Add slash format to parseTelegramTarget so -GROUP/TOPIC is parsed correctly everywhere.
  3. Pass cfg through resolveSessionDeliveryTargetparseExplicitTargetWithPlugin as a fallback for environments where plugin bootstrap is possible.
  4. Propagate deliveryError from dispatch through to the run result so failures surface in lastDeliveryError instead of silent not-delivered.

Files changed

  • src/cron/isolated-agent/delivery-target.ts — core fix
  • extensions/telegram/src/targets.ts — slash format support
  • src/infra/outbound/targets.ts — cfg passthrough
  • src/cron/isolated-agent/delivery-dispatch.ts + run.ts — deliveryError propagation
  • docs/automation/cron-jobs.md — document all supported formats
  • Tests added for all new behaviour

Testing

All new tests pass. No regressions in existing test suite.

- Pre-parse forum topic targets in delivery-target.ts before plugin bootstrap
- Add slash format support to parseTelegramTarget (chatId/topicId)
- Pass cfg through resolveSessionDeliveryTarget for plugin bootstrapping
- Propagate deliveryError from dispatch to run result for better diagnostics
- Update cron-jobs.md to document all supported forum topic formats

Fixes: cron announce delivery silently returning not-delivered for
Telegram forum topics regardless of target format used.
@etticat etticat requested a review from a team as a code owner March 18, 2026 09:34
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation channel: telegram Channel integration: telegram size: S labels Mar 18, 2026
@greptile-apps

greptile-apps Bot commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR fixes silent not-delivered failures for cron announce delivery to Telegram forum topics by pre-parsing well-known topic formats before plugin bootstrapping, adding slash-format support to parseTelegramTarget, threading cfg through for plugin-capable environments, and surfacing delivery errors in lastDeliveryError. The approach is sound and well-tested for the formats explicitly targeted.

Key changes:

  • extractForumTopicFromTarget in delivery-target.ts pre-parses :topic: and / (slash) forum formats without requiring plugin load — resolves the root cause for those two formats.
  • parseTelegramTarget in extensions/telegram/src/targets.ts gains slash-format support, ensuring consistency across direct parsing and cron delivery paths.
  • cfg is threaded through resolveSessionDeliveryTargetparseExplicitTargetWithPlugin as a fallback for plugin-capable environments.
  • deliveryError is propagated end-to-end from dispatchCronDelivery through run.tstimer.ts, so failures are now visible in lastDeliveryError instead of silent not-delivered.

Issue found:

  • The pre-parser does not handle the documented shorthand chatId:topicId format (e.g. -1001234567890:123). In a fully isolated session with no gateway config (the exact scenario described as the root cause), this format would still silently drop the thread ID — contradicting the docs note added in this PR that states "All formats above now work correctly for cron announce delivery." A third regex branch in extractForumTopicFromTarget would close this gap.
  • extractForumTopicFromTarget is inserted between two import blocks, which is unconventional and may trigger linting rules.

Confidence Score: 3/5

  • Safe to merge with the caveat that the chatId:topicId shorthand format remains broken in fully isolated cron sessions despite the docs claiming all formats are fixed.
  • The core fixes are correct and well-tested. The deliveryError propagation is clean and complete. The slash format is handled properly in both parseTelegramTarget and the new pre-parser. However, the shorthand colon format (-1001234567890:123) is listed as supported in the updated docs but is not covered by extractForumTopicFromTarget, meaning users relying on that format in isolated-agent cron contexts would still hit the original silent-drop bug. This is a meaningful gap that the PR documentation directly contradicts.
  • src/cron/isolated-agent/delivery-target.ts — missing chatId:topicId shorthand case in extractForumTopicFromTarget and non-standard import ordering.

Comments Outside Diff (1)

  1. src/cron/isolated-agent/delivery-target.ts, line 31-47 (link)

    P2 Function definition placed between two import groups

    extractForumTopicFromTarget is sandwiched between the two import blocks (lines 1–2 and lines 31–47). Most linters (e.g. ESLint import/first) require all imports to appear before any other statements. Consider moving the function below all imports to keep the conventional module layout and avoid potential lint failures.

    Prompt To Fix With AI
    This is a comment left during a code review.
    Path: src/cron/isolated-agent/delivery-target.ts
    Line: 31-47
    
    Comment:
    **Function definition placed between two import groups**
    
    `extractForumTopicFromTarget` is sandwiched between the two `import` blocks (lines 1–2 and lines 31–47). Most linters (e.g. ESLint `import/first`) require all imports to appear before any other statements. Consider moving the function below all imports to keep the conventional module layout and avoid potential lint failures.
    
    How can I resolve this? If you propose a fix, please make it concise.
Prompt To Fix All With AI
This is a comment left during a code review.
Path: src/cron/isolated-agent/delivery-target.ts
Line: 14-30

Comment:
**`chatId:topicId` shorthand not covered by pre-parser**

`extractForumTopicFromTarget` handles `:topic:` (explicit keyword) and `/` (slash), but misses the shorthand colon format (e.g. `-1001234567890:123`) which is both documented as supported and matched by `parseTelegramTarget`'s `colonMatch` regex.

In a fully isolated session with no gateway config (the exact environment described in the PR as the root cause), the shorthand format would still reach `parseExplicitTargetWithPlugin` with the Telegram plugin unloaded, silently dropping the `threadId` — the same bug this PR sets out to fix.

The docs change in this PR explicitly states "All formats above now work correctly for cron `announce` delivery," which includes `-1001234567890:123`. Adding a third branch to the pre-parser would close the gap:

```
// chatId:topicId shorthand (e.g. -1001234567890:123)
const shorthandMatch = /^(-?\d+):(\d+)$/.exec(stripped);
if (shorthandMatch) {
  return { to: shorthandMatch[1], threadId: parseInt(shorthandMatch[2], 10) };
}
```

Note: this must be placed **after** the `topicMatch` check to avoid misinterpreting `chatId:topic:topicId` as a shorthand.

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: src/cron/isolated-agent/delivery-target.ts
Line: 31-47

Comment:
**Function definition placed between two import groups**

`extractForumTopicFromTarget` is sandwiched between the two `import` blocks (lines 1–2 and lines 31–47). Most linters (e.g. ESLint `import/first`) require all imports to appear before any other statements. Consider moving the function below all imports to keep the conventional module layout and avoid potential lint failures.

How can I resolve this? If you propose a fix, please make it concise.

Last reviewed commit: "fix(cron): announce ..."

Comment on lines +14 to +30
function extractForumTopicFromTarget(to: string): { to: string; threadId: number } | null {
const stripped = to.replace(/^telegram:group:/, "").replace(/^telegram:/, "");

// chatId:topic:topicId
const topicMatch = /^(-?\d+):topic:(\d+)$/.exec(stripped);
if (topicMatch) {
return { to: topicMatch[1], threadId: parseInt(topicMatch[2], 10) };
}

// chatId/topicId (legacy slash)
const slashMatch = /^(-?\d+)\/(\d+)$/.exec(stripped);
if (slashMatch) {
return { to: slashMatch[1], threadId: parseInt(slashMatch[2], 10) };
}

return null;
}

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.

P1 chatId:topicId shorthand not covered by pre-parser

extractForumTopicFromTarget handles :topic: (explicit keyword) and / (slash), but misses the shorthand colon format (e.g. -1001234567890:123) which is both documented as supported and matched by parseTelegramTarget's colonMatch regex.

In a fully isolated session with no gateway config (the exact environment described in the PR as the root cause), the shorthand format would still reach parseExplicitTargetWithPlugin with the Telegram plugin unloaded, silently dropping the threadId — the same bug this PR sets out to fix.

The docs change in this PR explicitly states "All formats above now work correctly for cron announce delivery," which includes -1001234567890:123. Adding a third branch to the pre-parser would close the gap:

// chatId:topicId shorthand (e.g. -1001234567890:123)
const shorthandMatch = /^(-?\d+):(\d+)$/.exec(stripped);
if (shorthandMatch) {
  return { to: shorthandMatch[1], threadId: parseInt(shorthandMatch[2], 10) };
}

Note: this must be placed after the topicMatch check to avoid misinterpreting chatId:topic:topicId as a shorthand.

Prompt To Fix With AI
This is a comment left during a code review.
Path: src/cron/isolated-agent/delivery-target.ts
Line: 14-30

Comment:
**`chatId:topicId` shorthand not covered by pre-parser**

`extractForumTopicFromTarget` handles `:topic:` (explicit keyword) and `/` (slash), but misses the shorthand colon format (e.g. `-1001234567890:123`) which is both documented as supported and matched by `parseTelegramTarget`'s `colonMatch` regex.

In a fully isolated session with no gateway config (the exact environment described in the PR as the root cause), the shorthand format would still reach `parseExplicitTargetWithPlugin` with the Telegram plugin unloaded, silently dropping the `threadId` — the same bug this PR sets out to fix.

The docs change in this PR explicitly states "All formats above now work correctly for cron `announce` delivery," which includes `-1001234567890:123`. Adding a third branch to the pre-parser would close the gap:

```
// chatId:topicId shorthand (e.g. -1001234567890:123)
const shorthandMatch = /^(-?\d+):(\d+)$/.exec(stripped);
if (shorthandMatch) {
  return { to: shorthandMatch[1], threadId: parseInt(shorthandMatch[2], 10) };
}
```

Note: this must be placed **after** the `topicMatch` check to avoid misinterpreting `chatId:topic:topicId` as a shorthand.

How can I resolve this? If you propose a fix, please make it concise.

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

const useDirectDelivery =
params.deliveryPayloadHasStructuredContent || params.resolvedDelivery.threadId != null;

P1 Badge Keep threaded text deliveries on the finalize path

When resolvedDelivery.threadId is present, this now forces deliverViaDirect() immediately and skips finalizeTextDelivery(). That helper is the only place we wait for descendant/subagent completion and replace interim parent text, so any text-only cron run that fans out to a subagent and delivers into a Telegram forum topic will now post the parent's placeholder reply instead of the final descendant summary.

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

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

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

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +17 to +20
// chatId:topic:topicId
const topicMatch = /^(-?\d+):topic:(\d+)$/.exec(stripped);
if (topicMatch) {
return { to: topicMatch[1], threadId: parseInt(topicMatch[2], 10) };

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Parse bare chatId:topicId targets before plugin bootstrap

This pre-parser still only recognizes chatId:topic:topicId and chatId/topicId. In the same isolated-cron case where the Telegram plugin cannot be bootstrapped, targets like -1001234567890:123 or telegram:group:-1001234567890:123 still fall through without a threadId, so delivery is attempted against the literal chat id -100…:123 and forum-topic announce remains broken for the documented shorthand format.

Useful? React with 👍 / 👎.

@clawsweeper

clawsweeper Bot commented Apr 28, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge.

Latest ClawSweeper review: 2026-05-22 10:02 UTC / May 22, 2026, 6:02 AM ET.

Workflow note: Future ClawSweeper reviews update this same comment in place.

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.

Summary
This PR adds Telegram forum-topic target parsing for isolated cron announce delivery, slash target support, delivery-error propagation, docs, and regression tests.

Reproducibility: yes. at source level: the PR head omits the documented chatId:topicId syntax from its no-plugin pre-parser, and the PR body lacks successful live Telegram topic proof. I did not run a live Telegram Bot API repro in this read-only review.

PR rating
Overall: 🧂 unranked krab
Proof: 🧂 unranked krab
Patch quality: 🦪 silver shellfish
Summary: The PR has useful signal, but missing real proof, conflicts, and a concrete parser/docs defect make it not quality-ready.

Rank-up moves:

  • Rebase onto current main and resolve conflicts.
  • Fix or remove the documented shorthand topic-target claim.
  • Add redacted live Telegram forum-topic cron announce proof to the PR body.
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.

Real behavior proof
Needs real behavior proof before merge: The PR body reports tests only, and the latest Mantis Telegram proof job failed; add redacted live Telegram forum-topic cron announce proof and update the PR body for re-review.

Mantis proof suggestion
A live Telegram lane would materially prove that cron announce delivery reaches the configured forum topic after parser/routing changes. 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 proof: verify a cron announce job delivers exactly once to the configured Telegram forum topic with private chat and account details redacted.

Risk before merge

  • The branch conflicts with current main, so a rebase may materially change the effective delivery-target and dispatch diff.
  • The PR documents chatId:topicId as fixed but does not pre-parse that syntax in the isolated no-plugin path it is trying to repair.
  • The slash form is a public target-grammar expansion that current docs do not advertise, so maintainers need to decide whether to support it or keep the contract narrowed to :topic: and delivery.threadId.
  • No successful after-fix live Telegram topic delivery proof is available; the latest Mantis Telegram proof job failed.

Maintainer options:

  1. Rebase and narrow the remaining fix (recommended)
    Carry only the still-needed slash or diagnostic behavior onto current main, cover every documented syntax or narrow the docs, and add successful redacted Telegram topic proof before merge.
  2. Fold into the broader Telegram topic branch
    If fix(telegram): preserve forum topic routing #76920 owns topic-routing semantics, move any accepted slash/error-reporting pieces there and close this stale branch after that path lands.
  3. Close if slash support is out of scope
    If maintainers do not want to expand Telegram cron target syntax beyond :topic: and explicit threadId, close this PR as obsolete after preserving the diagnostics idea separately if desired.

Next step before merge
Human/contributor follow-up is needed for the conflict, public target-syntax decision, parser defect, and contributor-side live proof gate.

Security
Cleared: No dependency, workflow, secret, permission, package-resolution, or code-execution surface change was found; the remaining concern is delivery correctness.

Review findings

  • [P2] Parse every documented topic target before fallback — src/cron/isolated-agent/delivery-target.ts:23-27
Review details

Best possible solution:

Rebase onto current main, keep only the remaining accepted target-grammar and diagnostic fixes, align docs with supported syntax, and require redacted live Telegram cron topic proof before merge.

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

Yes, at source level: the PR head omits the documented chatId:topicId syntax from its no-plugin pre-parser, and the PR body lacks successful live Telegram topic proof. I did not run a live Telegram Bot API repro in this read-only review.

Is this the best way to solve the issue?

No, not as written. The useful pieces need a current-main rebase, complete or narrowed target grammar, and real Telegram proof before this is the maintainable fix.

Label justifications:

  • P2: This is a focused Telegram cron delivery bug-fix PR with limited blast radius but visible topic-delivery impact.
  • merge-risk: 🚨 message-delivery: The PR changes Telegram cron target parsing and can still fail or misplace documented topic deliveries if merged as-is.
  • rating: 🧂 unranked krab: Current PR rating is 🧂 unranked krab because proof is 🧂 unranked krab, patch quality is 🦪 silver shellfish, and The PR has useful signal, but missing real proof, conflicts, and a concrete parser/docs defect make it not quality-ready.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR body reports tests only, and the latest Mantis Telegram proof job failed; add redacted live Telegram forum-topic cron announce proof and update the PR body for re-review.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The PR changes visible Telegram cron announce delivery to forum topics, which can be shown in a short real Telegram proof run.

Full review comments:

  • [P2] Parse every documented topic target before fallback — src/cron/isolated-agent/delivery-target.ts:23-27
    The new no-plugin pre-parser handles chatId:topic:topicId and slash targets, but the PR docs also claim chatId:topicId works. In the isolated cron path this PR is fixing, that shorthand can still fall through without an explicit thread id.
    Confidence: 0.92

Overall correctness: patch is incorrect
Overall confidence: 0.86

Acceptance criteria:

  • node scripts/run-vitest.mjs src/cron/isolated-agent/delivery-target.test.ts
  • node scripts/run-vitest.mjs src/cron/isolated-agent/delivery-dispatch.double-announce.test.ts
  • node scripts/run-vitest.mjs extensions/telegram/src/targets.test.ts src/cron/service.persists-delivered-status.test.ts
  • Redacted live Telegram forum-topic cron announce proof

What I checked:

  • PR state: Live PR metadata shows head f9ea4e4 is open, external-authored, mergeable=CONFLICTING, and still labeled as needing real behavior proof with message-delivery risk. (f9ea4e49b47b)
  • Blocking parser gap on PR head: The PR pre-parser handles chatId:topic:topicId and chatId/topicId, but not the documented chatId:topicId shorthand, so isolated no-plugin cron delivery can still lose the thread id for a format the PR says works. (src/cron/isolated-agent/delivery-target.ts:14, f9ea4e49b47b)
  • PR docs overclaim supported formats: The PR docs list -1001234567890:123 and then state all listed formats work for cron announce delivery, which conflicts with the PR pre-parser gap. Public docs: docs/automation/cron-jobs.md. (docs/automation/cron-jobs.md:284, f9ea4e49b47b)
  • Current main implements the central :topic path: Current main parses explicit targets through loaded channel plugins and has regression coverage proving Telegram :topic: targets resolve to base chat id plus thread id. (src/infra/outbound/targets-session.ts:133, 6bd430ee3517)
  • Current main does not implement slash target parsing: Current main Telegram target parsing supports chatId:topicId and chatId:topic:topicId, but there is no slash-format branch, so the PR still contains a distinct target-grammar proposal. (extensions/telegram/src/targets.ts:91, 6bd430ee3517)
  • Maintainer Telegram review standard: The Telegram maintainer note says topic behavior needs real Telegram proof and failed topic sends must not succeed on the wrong surface. (.agents/maintainer-notes/telegram.md:18, 6bd430ee3517)

Likely related people:

  • roytong9: Authored the merged Telegram topic target-normalization PR that added the current :topic: delivery-target behavior and regression tests. (role: introduced related behavior; confidence: high; commits: a3fd97570f8e; files: src/cron/isolated-agent/delivery-target.ts, src/cron/isolated-agent/delivery-target.test.ts)
  • giodl73-repo: Authored the recent merged fix for bootstrapping external channel delivery targets in the same cron resolver area. (role: recent adjacent contributor; confidence: medium; commits: d7d85d1eb661; files: src/cron/isolated-agent/delivery-target.ts)
  • steipete: Recently refactored cron delivery context resolution and touched the current delivery-target surface now overlapping this PR. (role: recent area contributor; confidence: medium; commits: fc9798a788ff; files: src/cron/isolated-agent/delivery-target.ts, src/cron/isolated-agent/delivery-target.test.ts)
  • vincentkoc: Split loaded channel target parsing used by current resolveSessionDeliveryTarget, which is the seam that now handles Telegram explicit target parsing. (role: adjacent route parsing contributor; confidence: medium; commits: eed595bba9ac; files: src/channels/plugins/target-parsing-loaded.ts, src/infra/outbound/targets-session.ts)

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

@clawsweeper clawsweeper Bot added the mantis: telegram-visible-proof Mantis should capture Telegram visible proof. label May 11, 2026
@openclaw-barnacle openclaw-barnacle Bot added the triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. label May 11, 2026
@clawsweeper clawsweeper Bot added mantis: telegram-visible-proof Mantis should capture Telegram visible proof. and removed mantis: telegram-visible-proof Mantis should capture Telegram visible proof. labels May 11, 2026
@clawsweeper clawsweeper Bot added P2 Normal backlog priority with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. labels May 17, 2026
@clawsweeper

clawsweeper Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper PR egg

🎁 Pass real behavior proof to wake the egg and unlock a hatchable treat.

Where did the egg go?
  • The egg game starts only after the PR passes the real-behavior proof check.
  • Before that, no creature or rarity is rolled. The treat waits for real proof.
  • This is still just collectible flavor: proof affects review readiness, not creature quality.

@clawsweeper clawsweeper Bot added rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. mantis: telegram-visible-proof Mantis should capture Telegram visible proof. rating: 🌊 off-meta tidepool PR readiness rating does not apply to this item. labels May 21, 2026
@clawsweeper clawsweeper Bot added the mantis: telegram-visible-proof Mantis should capture Telegram visible proof. label May 21, 2026
@steipete steipete self-assigned this May 23, 2026
@steipete

Copy link
Copy Markdown
Contributor

Thanks @etticat. I replaced this with #85701 so the fix lands on current main with the bigger ownership refactor: cron now asks the channel plugin parser for topic/thread target syntax instead of carrying Telegram forum parsing in cron core.

The replacement keeps the useful behavior from this PR, including Telegram legacy slash topic targets, adds focused regression coverage, updates docs/changelog, and has local focused tests plus Testbox changed-gate proof.

Closing this stale/conflicted PR in favor of #85701.

@steipete

Copy link
Copy Markdown
Contributor

Replaced by #85814, which moves this work onto the modern channel target resolver/session-route APIs and keeps legacy parser compatibility out of core runtime paths.

Thanks @etticat for the original report/fix direction here. The replacement keeps the Telegram forum-topic behavior covered while avoiding the old parser surface.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

channel: telegram Channel integration: telegram docs Improvements or additions to documentation mantis: telegram-visible-proof Mantis should capture Telegram visible proof. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. P2 Normal backlog priority with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: S status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants