Skip to content

feat(channels): add typed cross-surface approval actions#103679

Merged
steipete merged 8 commits into
mainfrom
codex/approval-typed-actions
Jul 12, 2026
Merged

feat(channels): add typed cross-surface approval actions#103679
steipete merged 8 commits into
mainfrom
codex/approval-typed-actions

Conversation

@steipete

@steipete steipete commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Related: #103505

Stacked on #103579. Review this branch from codex/durable-approval-registry.

What Problem This Solves

Approval controls in chat currently encode product semantics as slash-command strings or infer the approval owner from an ID prefix. Long IDs can exceed transport callback limits, and a click on one surface can report the attempted decision instead of the canonical result already chosen elsewhere.

Why This Change Was Made

This adds an explicit approval action to the portable presentation contract, a fixed-size durable resolution reference for constrained callbacks, and kind-aware canonical resolution across bundled approval channels. URL and Web App actions are typed at the same boundary; shipped command and legacy button inputs remain deprecated compatibility paths.

Channel plugins remain transport-only: core supplies the approval ID, owner kind, and decision; Telegram, Discord, Slack, Google Chat, Matrix, QQ, iMessage, Signal, and WhatsApp encode only private transport locators and render the canonical first-answer result. Durable cross-message terminal reconciliation is intentionally deferred to the later lifecycle stack described in docs/refactor/operator-approvals.md.

The canonical resolver responds with committed SQLite truth before detached channel, push, and legacy-event follow-up. Slow or failed secondary delivery therefore cannot delay the winning surface or hide the recorded result.

User Impact

Operators can answer the same pending approval from supported chat surfaces without approval-ID truncation or owner inference. Concurrent answers converge on the SQLite-backed first answer, and the clicked surface shows that canonical terminal outcome even when another surface won.

Evidence

  • Focused iMessage shared-forwarding matrix: 101/101 tests passed, including numeric ROWID to exact tapback GUID correlation and strict typed binding checks.
  • Focused channel suites: Telegram 144, Discord 39, Feishu 64, Slack 107, Google Chat 14, Matrix 25, WhatsApp 17, plus Signal and QQ approval regressions passed.
  • Protocol generation/check: 63 tests passed; generated Swift models are current.
  • Plugin SDK contracts: export sync, API baseline, surface ceilings, subpath imports, and runtime side-effect guards passed.
  • A slow-forwarder regression proves approval.resolve returns the committed CAS result before best-effort fanout completes.
  • Full Testbox changed gate passed after the Telegram regression fix: typecheck 126.39s, lint 53.01s, import cycles 4.11s, and every structural/storage/dependency guard green (run).
  • The response-ordering fix was also covered by the next exact-tree broad gate: every changed lane, typecheck, lint, import cycle, and structural guard passed (run).
  • Fresh exact-tree structured autoreview found no accepted or actionable findings.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation channel: discord Channel integration: discord channel: googlechat Channel integration: googlechat channel: imessage Channel integration: imessage channel: matrix Channel integration: matrix channel: mattermost Channel integration: mattermost channel: msteams Channel integration: msteams channel: signal Channel integration: signal channel: slack Channel integration: slack channel: telegram Channel integration: telegram channel: whatsapp-web Channel integration: whatsapp-web app: web-ui App: web-ui gateway Gateway runtime scripts Repository scripts agents Agent runtime and tooling channel: feishu Channel integration: feishu channel: qqbot size: XL maintainer Maintainer-authored PR labels Jul 10, 2026
@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: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. 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. labels Jul 10, 2026
@clawsweeper

clawsweeper Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed July 11, 2026, 8:56 PM ET / July 12, 2026, 00:56 UTC.

Summary
Adds typed approval, URL, and web-app presentation actions, durable approval resolution references, and canonical cross-channel approval handling.

Reproducibility: yes. from current-head source. A typed tga1: callback is not parseable as /approve, so getTelegramSequentialKey assigns it to the normal chat/topic lane rather than the dedicated approval lane.

Review metrics: 2 noteworthy metrics.

  • Public action variants: 3 added. Approval, URL, and web-app variants expand the plugin presentation contract across bundled and external channel adapters.
  • Persisted approval schema: 1 field and 1 unique index added. The durable resolution locator requires safe fresh-install and upgrade behavior before merge.

Stored data model
Persistent data-model change detected: migration/backfill/repair: src/state/openclaw-state-db.test.ts, serialized state: extensions/discord/src/approval-handler.runtime.test.ts, serialized state: extensions/googlechat/src/approval-terminal-card.ts, serialized state: src/state/openclaw-state-db.generated.d.ts, serialized state: src/state/openclaw-state-db.test.ts, serialized state: src/state/openclaw-state-db.ts, and 7 more. Migration or upgrade compatibility proof is recorded; maintainers should verify it before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #103505
Summary: This PR is the typed channel-action implementation increment of the canonical durable cross-surface approvals program.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🦪 silver shellfish
Proof: 🦪 silver shellfish
Patch quality: 🦐 gold shrimp
Result: blocked until real behavior proof is added.

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

Rank-up moves:

  • [P1] Fix typed Telegram callback sequential-lane routing and add focused regression coverage.
  • [P1] Add redacted exact-head Telegram proof of same-topic resolution and canonical loser rendering.

Proof guidance:

  • [P1] Needs real behavior proof before merge: The PR lists extensive automated suites and Testbox gates, but no directly inspectable exact-head live chat artifact shows a typed approval click and canonical first-answer result. Add redacted screenshots, a recording, transcript, live output, or logs and update the PR body to trigger a fresh review; if that does not run, ask a maintainer to comment @clawsweeper re-review.

Mantis proof suggestion
After the lane repair, Telegram Desktop proof can directly verify the visible callback path and canonical first-answer behavior. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis telegram desktop proof: verify a typed approval button resolves from the active chat/topic without lane blocking and shows the canonical first-answer result when another surface wins.

Risk before merge

  • [P1] Typed Telegram approval clicks can wait behind the active chat/topic turn until the approval times out, defeating the new one-click workflow.
  • [P1] The PR expands public plugin SDK action and resolver contracts, so compatibility behavior must remain explicit and tested for external plugins.
  • [P1] This PR is stacked on the still-open, currently conflicted registry-hardening PR feat(gateway): land remaining durable-approvals stack and repair main gates #104837 and should not land independently of that reconciled base.

Maintainer options:

  1. Fix the Telegram callback lane (recommended)
    Route valid typed approval callbacks through the existing approval lane, add focused regression coverage, and provide exact-head live proof before merge.
  2. Pause the stacked rollout
    Keep the PR open until the Telegram blocker, registry-base hardening, and real behavior proof are resolved.
Copy recommended automerge instruction
@clawsweeper automerge

Special instructions:
Route valid typed Telegram approval callback_data through the dedicated approval sequential lane, preserve legacy /approve callback behavior, add focused regression tests, and do not edit CHANGELOG.md.

Next step before merge

  • [P1] The functional blocker is a narrow Telegram lane repair with clear files and focused validation; live behavior proof must follow separately.

Security
Cleared: No separate security or supply-chain defect was found in the reviewed explicit-kind routing, compact-reference authorization, inert rendering, dependencies, or workflow changes.

Review findings

  • [P1] Route typed Telegram callbacks through the approval lane — extensions/telegram/src/approval-callback-data.ts:6
Review details

Best possible solution:

Route valid typed Telegram callbacks through the dedicated approval sequential lane, preserve the explicit-kind and legacy compatibility paths, land the reconciled registry base first, and then prove same-topic and cross-surface first-answer behavior on the exact head.

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

Yes, from current-head source. A typed tga1: callback is not parseable as /approve, so getTelegramSequentialKey assigns it to the normal chat/topic lane rather than the dedicated approval lane.

Is this the best way to solve the issue?

No, not yet. The typed transport-private action model is the right maintainable boundary, but Telegram ingress must recognize the new callback envelope before this is a safe cross-surface implementation.

Full review comments:

  • [P1] Route typed Telegram callbacks through the approval lane — extensions/telegram/src/approval-callback-data.ts:6
    This new callback envelope is handled as an approval later, but getTelegramSequentialKey recognizes only legacy /approve callback text. In the same chat/topic, the active turn holds the normal lane while waiting, so the click queues behind it and can time out. Update the sequential-key path to recognize valid typed callbacks. This previously raised blocker remains unfixed on the current head.
    Confidence: 0.99

Overall correctness: patch is incorrect
Overall confidence: 0.99

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add P1: The new Telegram approval button path can deadlock behind the active turn it is intended to unblock.
  • add merge-risk: 🚨 compatibility: The PR changes public plugin SDK actions, approval resolver inputs, and persisted approval records used during upgrades.
  • add merge-risk: 🚨 message-delivery: Typed Telegram callbacks can be scheduled on the wrong sequential lane and fail to deliver a timely approval decision.
  • add merge-risk: 🚨 security-boundary: Explicit approval ownership and compact resolution references participate in authorization-sensitive canonical resolution.
  • add rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🦐 gold shrimp.
  • add status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR lists extensive automated suites and Testbox gates, but no directly inspectable exact-head live chat artifact shows a typed approval click and canonical first-answer result. Add redacted screenshots, a recording, transcript, live output, or logs and update the PR body to trigger a fresh review; if that does not run, ask a maintainer to comment @clawsweeper re-review.
  • add mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The PR changes visible Telegram approval buttons and canonical terminal result text that can be demonstrated in a short Telegram Desktop recording.
  • remove P2: Current review triage priority is P1, so this older priority label is no longer current.

Label justifications:

  • P1: The new Telegram approval button path can deadlock behind the active turn it is intended to unblock.
  • merge-risk: 🚨 compatibility: The PR changes public plugin SDK actions, approval resolver inputs, and persisted approval records used during upgrades.
  • merge-risk: 🚨 message-delivery: Typed Telegram callbacks can be scheduled on the wrong sequential lane and fail to deliver a timely approval decision.
  • merge-risk: 🚨 security-boundary: Explicit approval ownership and compact resolution references participate in authorization-sensitive canonical resolution.
  • rating: 🦪 silver shellfish: Overall readiness is 🦪 silver shellfish; proof is 🦪 silver shellfish and patch quality is 🦐 gold shrimp.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR lists extensive automated suites and Testbox gates, but no directly inspectable exact-head live chat artifact shows a typed approval click and canonical first-answer result. Add redacted screenshots, a recording, transcript, live output, or logs and update the PR body to trigger a fresh review; if that does not run, ask a maintainer to comment @clawsweeper re-review.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The PR changes visible Telegram approval buttons and canonical terminal result text that can be demonstrated in a short Telegram Desktop recording.
Evidence reviewed

Acceptance criteria:

  • [P1] pnpm test extensions/telegram/src/sequential-key.test.ts.
  • [P1] pnpm test extensions/telegram/src/approval-callback-data.test.ts.
  • [P1] pnpm test extensions/telegram/src/bot.test.ts.

What I checked:

Likely related people:

  • steipete: Introduced the merged durable approval registry, recently maintained the Telegram sequential-key path, and authored the stacked typed-action implementation. (role: recent approval feature owner; confidence: high; commits: 02dc25a1b51f, 847460600fbe; files: src/gateway/operator-approval-store.ts, src/infra/approval-gateway-resolver.ts, src/interactive/payload.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.
Review history (5 earlier review cycles)
  • reviewed 2026-07-10T12:57:35.834Z sha edb647f :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-10T13:44:47.012Z sha 9966705 :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-10T19:47:57.314Z sha 6f6f1fc :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-11T14:46:27.719Z sha d5ed331 :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-12T00:05:37.184Z sha d5ed331 :: needs real behavior proof before merge. :: none

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. and removed rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels Jul 10, 2026
steipete added a commit that referenced this pull request Jul 12, 2026
Squash-rebased #103679 segment onto the durable-approval-registry tip on
current main. Typed approval/command/select presentation actions replace
raw-string inference across slack/telegram/discord/matrix/imessage/whatsapp,
approval.resolve carries an explicit kind, and channel adapters map native
callback envelopes through the typed action registry.

Drift reconciliation: deprecated buildExecApprovalInteractiveReply assertions
dropped (#104650 removed the shims); worker_environments bootstrap-column
migration kept alongside the approval resolution_ref backfill; plugin-sdk API
baseline regenerated.

(cherry picked from commit 68765a5d39d2118c88a7a54d00387337912d4494)
(cherry picked from commit 8642ac12af142e4b751f4f30d4b114615e7e5f66)
(cherry picked from commit 036c4bc39499925fc03de16ec9302e346769350a)
(cherry picked from commit 19dc350d6bc34e29a5169c6bc80971b0ad12adde)
(cherry picked from commit fc978b0bad86aef421c79f6a211b25cc1b743c01)
(cherry picked from commit 10de4d1ed5071f9be6ad1ee5d1e32c0fa8c9d11c)
(cherry picked from commit 9a664ced1b1fa740172b258f355f1a82925ae41c)
(cherry picked from commit c5ff69abbf444139e9e007bfa45beb0f00ffea54)
@steipete
steipete force-pushed the codex/approval-typed-actions branch from d5ed331 to d466a80 Compare July 12, 2026 00:33
@steipete
steipete changed the base branch from main to codex/durable-approval-registry July 12, 2026 00:34

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d466a80795

ℹ️ About Codex in GitHub

Your team has set up Codex to 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 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +42 to +43
const encode = (approvalId: string) =>
`${TELEGRAM_APPROVAL_CALLBACK_PREFIX}${kind}:${decision}:${approvalId}`;

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 Badge Route typed Telegram approval callbacks off the chat lane

When these new tga1: callback_data values are clicked from the same Telegram chat/topic whose agent turn is waiting for the approval, they do not match the existing approval-lane check in extensions/telegram/src/sequential-key.ts (it only treats parseExecApprovalCommandText(callbackData) as :approval). The pending turn holds the normal chat lane while awaiting the decision, so the typed button handler is queued behind the waiter and the approval can deadlock until timeout; add this reserved prefix to the approval sequential key path.

Useful? React with 👍 / 👎.

@steipete
steipete changed the base branch from codex/durable-approval-registry to main July 12, 2026 00:47
@steipete
steipete force-pushed the codex/approval-typed-actions branch from d466a80 to e7f87ad Compare July 12, 2026 00:48
steipete added a commit that referenced this pull request Jul 12, 2026
Squash-rebased #103679 segment onto the durable-approval-registry tip on
current main. Typed approval/command/select presentation actions replace
raw-string inference across slack/telegram/discord/matrix/imessage/whatsapp,
approval.resolve carries an explicit kind, and channel adapters map native
callback envelopes through the typed action registry.

Drift reconciliation: deprecated buildExecApprovalInteractiveReply assertions
dropped (#104650 removed the shims); worker_environments bootstrap-column
migration kept alongside the approval resolution_ref backfill; plugin-sdk API
baseline regenerated.

(cherry picked from commit 68765a5d39d2118c88a7a54d00387337912d4494)
(cherry picked from commit 8642ac12af142e4b751f4f30d4b114615e7e5f66)
(cherry picked from commit 036c4bc39499925fc03de16ec9302e346769350a)
(cherry picked from commit 19dc350d6bc34e29a5169c6bc80971b0ad12adde)
(cherry picked from commit fc978b0bad86aef421c79f6a211b25cc1b743c01)
(cherry picked from commit 10de4d1ed5071f9be6ad1ee5d1e32c0fa8c9d11c)
(cherry picked from commit 9a664ced1b1fa740172b258f355f1a82925ae41c)
(cherry picked from commit c5ff69abbf444139e9e007bfa45beb0f00ffea54)
(cherry picked from commit d466a80)
(cherry picked from commit f5b4fe40dd5c961322f8553cc80b2fdfb3f6503e)
(cherry picked from commit 7340b4749a4cc4c72f7a41cce1bc9cb550cae038)
(cherry picked from commit a151f41808f23ae60b10305ccd2bc959b9169a86)
@steipete
steipete force-pushed the codex/approval-typed-actions branch from e7f87ad to 60397dd Compare July 12, 2026 00:49
@steipete
steipete changed the base branch from main to codex/durable-approval-registry July 12, 2026 00:49
@clawsweeper clawsweeper Bot removed mantis: telegram-visible-proof Mantis should capture Telegram visible proof. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. labels Jul 12, 2026
steipete added 6 commits July 11, 2026 18:25
…-ups

Follow-up delta to the merged #103579 head, rebased onto current main:
- gateway-protocol wire types derive from owner-module schema consts
  (types.ts tombstone) and ProtocolSchemas leaves the package index so the
  public plugin-sdk d.ts graph tree-shakes the registry declaration
- approval access authority follows the operator.approvals scope tier with
  reviewerDeviceIds as the opt-in restriction (cross-surface
  first-answer-wins; requester identity gates only legacy adapters)
- plugin node.invoke approvals register directly so unrenderable
  presentations fail closed before request routing
- exec-approval manager reconciliation with #103515 revocation hardening
  (resolution source attribution, one-shot ask-fallback consumption)
- surface-report pins and plugin-sdk API baseline refreshed; Swift models
  regenerated
Squash-rebased #103679 segment onto the durable-approval-registry tip on
current main. Typed approval/command/select presentation actions replace
raw-string inference across slack/telegram/discord/matrix/imessage/whatsapp,
approval.resolve carries an explicit kind, and channel adapters map native
callback envelopes through the typed action registry.

Drift reconciliation: deprecated buildExecApprovalInteractiveReply assertions
dropped (#104650 removed the shims); worker_environments bootstrap-column
migration kept alongside the approval resolution_ref backfill; plugin-sdk API
baseline regenerated.

(cherry picked from commit 68765a5d39d2118c88a7a54d00387337912d4494)
(cherry picked from commit 8642ac12af142e4b751f4f30d4b114615e7e5f66)
(cherry picked from commit 036c4bc39499925fc03de16ec9302e346769350a)
(cherry picked from commit 19dc350d6bc34e29a5169c6bc80971b0ad12adde)
(cherry picked from commit fc978b0bad86aef421c79f6a211b25cc1b743c01)
(cherry picked from commit 10de4d1ed5071f9be6ad1ee5d1e32c0fa8c9d11c)
(cherry picked from commit 9a664ced1b1fa740172b258f355f1a82925ae41c)
(cherry picked from commit c5ff69abbf444139e9e007bfa45beb0f00ffea54)
(cherry picked from commit d466a80)
(cherry picked from commit f5b4fe40dd5c961322f8553cc80b2fdfb3f6503e)
(cherry picked from commit 7340b4749a4cc4c72f7a41cce1bc9cb550cae038)
(cherry picked from commit a151f41808f23ae60b10305ccd2bc959b9169a86)
@github-actions

github-actions Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Dependency graph guard cleared

This PR no longer has blocked dependency graph changes. A future dependency graph change requires a fresh /allow-dependencies-change comment after the guard blocks that new head SHA.

  • Current SHA: 3dd08ac6043cc1e399decf25d651c77eefcd4557

@steipete

Copy link
Copy Markdown
Contributor Author

Land-ready verification for 3dd08ac6043cc1e399decf25d651c77eefcd4557.

Improvements made during review:

  • preserve exact typed approval IDs and transport ownership;
  • keep malformed Telegram reserved-prefix callbacks opaque;
  • leave ambiguous legacy exec/plugin callbacks pending;
  • correlate every delivered iMessage prompt chunk for tapback approval;
  • preserve current-main state-schema and session-file protocol additions through rebases;
  • remove the retired gateway-protocol aggregate type tombstone and its stale barrel export;
  • align plugin-SDK surface budgets to the measured final source surface.

Proof:

  • scripts/pr review-validate-artifacts 103679 — READY, zero findings;
  • AWS Crabbox run_b60445642c06 — full check:changed passed (guards, format, typecheck, lint, import cycles);
  • AWS Crabbox run_8194b7da8bcd — 186 focused Telegram, iMessage, and reaction-resolution tests passed;
  • AWS Crabbox run_8af9d93c7129 — final iMessage regression rerun passed 34/34;
  • Testbox Actions 29174154171 — production CI artifact build passed;
  • node scripts/plugin-sdk-surface-report.mjs --check — passed at 10,595 public exports / 5,298 callable exports;
  • OPENCLAW_TESTBOX=1 scripts/pr prepare-run 103679 — hosted exact-or-patch-identical recent-rebase gate passed for the published head.

Known proof gap: Blacksmith Testbox leases were unavailable during the final local rerun, so trusted AWS Crabbox supplied the final full changed gate. The repo-native prepare gate separately accepted hosted evidence for this exact published tree.

@steipete

Copy link
Copy Markdown
Contributor Author

Merged via squash.

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

Labels

agents Agent runtime and tooling app: web-ui App: web-ui channel: discord Channel integration: discord channel: feishu Channel integration: feishu channel: googlechat Channel integration: googlechat channel: imessage Channel integration: imessage channel: matrix Channel integration: matrix channel: mattermost Channel integration: mattermost channel: msteams Channel integration: msteams channel: qqbot channel: signal Channel integration: signal channel: slack Channel integration: slack channel: telegram Channel integration: telegram channel: whatsapp-web Channel integration: whatsapp-web docs Improvements or additions to documentation gateway Gateway runtime maintainer Maintainer-authored PR mantis: telegram-visible-proof Mantis should capture Telegram visible proof. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. 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. P1 High-priority user-facing bug, regression, or broken workflow. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. scripts Repository scripts size: XL status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant