Skip to content

Fix speech-core runtime packaging and poll send guard#88853

Closed
mjnkao wants to merge 1 commit into
openclaw:mainfrom
mjnkao:codex/fix-speech-core-runtime-poll-guard-20260601
Closed

Fix speech-core runtime packaging and poll send guard#88853
mjnkao wants to merge 1 commit into
openclaw:mainfrom
mjnkao:codex/fix-speech-core-runtime-poll-guard-20260601

Conversation

@mjnkao

@mjnkao mjnkao commented Jun 1, 2026

Copy link
Copy Markdown

Summary

  • add bundled speech-core runtime surface wrappers so dist/extensions/speech-core/runtime-api.js is built and packed
  • keep manifestless speech-core runtime support outputs during bundled metadata copy
  • narrow send-time poll detection so metadata-only poll fields do not force action: poll; only pollQuestion / pollOption anchors do

Why

Discord send payloads can include default poll metadata fields from shared tool schemas. Treating those metadata/default fields as poll creation blocks normal action: send replies with Poll fields require action "poll". Separately, the npm/runtime packaging path can drop the manifestless speech-core/runtime-api.js surface needed by runtime consumers.

Validation

  • node scripts/run-vitest.mjs run src/poll-params.test.ts src/infra/outbound/message-action-runner.send-validation.test.ts src/plugins/copy-bundled-plugin-metadata.test.ts test/scripts/bundled-plugin-build-entries.test.ts --maxWorkers=1

@openclaw-barnacle openclaw-barnacle Bot added scripts Repository scripts size: S triage: dirty-candidate Candidate: broad unrelated surfaces; may need splitting or cleanup. triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels Jun 1, 2026
@clawsweeper

clawsweeper Bot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Thanks for the context here. I swept through the related work, and this is now duplicate or superseded.

Close: this mixed PR is no longer the right landing path because the speech-core half is superseded by a cleaner proof-positive PR, while the remaining poll/schema behavior is tracked by canonical open issues.

Canonical path: Close this mixed branch, use #89899 for the speech-core package contract, and keep the remaining poll/schema decision on the two open message-send issues.

So I’m closing this here and keeping the remaining discussion on #89899.

Review details

Best possible solution:

Close this mixed branch, use #89899 for the speech-core package contract, and keep the remaining poll/schema decision on the two open message-send issues.

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

Yes. Current main source and focused tests show the remaining poll failure for channel-extra poll fields, and source/release evidence shows the speech-core facade/package mismatch; I did not run tests or a live gateway in this read-only review.

Is this the best way to solve the issue?

No. This is not the best fix because it mixes two separate problems, adds an unsupported speech-core extension sidecar, lacks real proof, and is superseded by a cleaner speech-core PR plus canonical poll/schema issues.

Security review:

Security review cleared: No concrete security or supply-chain issue was found in the diff; it adds local wrappers, build-script exceptions, and tests without new dependencies, permissions, downloaded code, or secret handling.

AGENTS.md: found and applied where relevant.

What I checked:

  • Root and scoped policy read: Read root AGENTS.md plus scoped guides for extensions, scripts, outbound, plugins, and tests; plugin-boundary, proof, duplicate/supersession, and message-delivery guidance affected this review. (AGENTS.md:1, 7a7165ad22c4)
  • Current main still has the remaining poll source reproduction: runMessageAction still throws before dispatch when action is send and hasPollCreationParams returns true; current tests still expect pollDurationSeconds and pollPublic on send to reject, while only shared schema-padded modifiers are accepted. (src/infra/outbound/message-action-runner.ts:1470, 7a7165ad22c4)
  • Current main only partially fixed poll false positives: Current main narrows shared poll modifier handling but deliberately keeps channel-specific poll-prefixed values such as pollDurationSeconds and pollPublic as send-blocking poll intent, so the broader behavior remains with the canonical issues. (src/poll-params.ts:110, 7a7165ad22c4)
  • Speech-core current contract is package-backed, not an extension sidecar: Current main exposes TTS through plugin-sdk/tts-runtime re-exporting packages/speech-core/runtime-api.js, while facade activation still lists speech-core as an always-allowed bundled runtime sidecar; that mismatch is exactly what the canonical speech-core PR addresses. (src/plugin-sdk/tts-runtime.ts:12, 7a7165ad22c4)
  • Canonical speech-core PR is viable and proof-positive: fix(plugin-sdk): align speech runtime packaging #89899 is open, mergeable, clean, has sufficient proof labels, includes installed tarball Gateway proof, removes speech-core from the unsupported sidecar allowlist, and adds package verification for always-allowed runtime facades. (2a2cd2042ea6)
  • Related alternatives do not supersede the canonical speech-core PR: Search found this PR, the proof-positive speech-core PR, and a newer package-dist fallback PR; the newer fallback PR is rated not merge-ready because it targets a workspace-only packages path that is absent from the installed root artifact.

Likely related people:

  • gumadeiras: Merged PR history shows this person authored the Telegram poll gating and send-guard consistency work that introduced hasPollCreationParams and the send rejection path. (role: introduced poll guard behavior; confidence: high; commits: 6dfd39c32f79; files: src/poll-params.ts, src/infra/outbound/message-action-runner.ts, src/agents/tools/message-tool.ts)
  • codezz: Merged PR history shows this person authored the current-main shared-modifier fix that accepts schema-padded pollDurationHours/pollMulti while preserving channel-extra poll strictness. (role: partial poll fix author; confidence: high; commits: 8b546facaf49; files: src/poll-params.ts, src/poll-params.test.ts, src/infra/outbound/message-action-runner.send-validation.test.ts)
  • vincentkoc: Related review and history tie this person to the facade activation/runtime-loading area that owns whether speech-core is an allowed bundled sidecar or a package-backed SDK runtime. (role: facade runtime adjacent contributor; confidence: medium; commits: b96c0d932f93; files: src/plugin-sdk/facade-activation-check.runtime.ts, src/plugin-sdk/facade-runtime.ts)
  • steipete: Related review evidence connects this person to the package-backed TTS facade route and postpublish verifier surface that the canonical speech-core PR changes. (role: release verifier and TTS facade adjacent owner; confidence: medium; commits: e93216080aa1, 5da21bc2f7c2; files: src/plugin-sdk/tts-runtime.ts, scripts/openclaw-npm-postpublish-verify.ts)

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

@clawsweeper clawsweeper Bot added 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. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 message-delivery 🚨 May drop, duplicate, misroute, suppress, or wrongly target messages. labels Jun 1, 2026
@clawsweeper clawsweeper Bot added the merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. label Jun 14, 2026
@clawsweeper

clawsweeper Bot commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper applied the proposed close for this PR.

@clawsweeper clawsweeper Bot closed this Jun 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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. P1 High-priority user-facing bug, regression, or broken workflow. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. scripts Repository scripts size: S status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. triage: dirty-candidate Candidate: broad unrelated surfaces; may need splitting or cleanup. 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.

1 participant