Fix/send poll intent detection clean#65301
Conversation
Greptile SummaryThis PR fixes a false-positive poll intent rejection on Confidence Score: 5/5Safe to merge — the fix is narrowly scoped, correct, and backed by comprehensive regression tests. No P0 or P1 findings. The narrowing of the send-side poll intent guard from No files require special attention. Reviews (1): Last reviewed commit: "test: align send validation with real po..." | Re-trigger Greptile |
|
Thanks for the context here. I did a careful shell check against current Close: current main now has the same-or-better poll metadata send behavior through a merged replacement PR that preserved source credit, so this conflicting source branch no longer has unique mergeable work. Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. So I’m closing this older PR as already covered on Review detailsBest possible solution: Keep #93441 as the canonical merged fix and close this conflicting source branch while preserving its credit trail. Do we have a high-confidence way to reproduce the issue? Yes, source-reproducible: the older release path rejects Is this the best way to solve the issue? Yes for cleanup: the merged replacement folds the behavior into the existing Security review: Security review cleared: Security review cleared: the source diff only changes TypeScript poll-intent classification and tests, with no dependency, secret, workflow, package, network, or execution-surface change. AGENTS.md: found and applied where relevant. What I checked:
Likely related people:
Codex review notes: model internal, reasoning high; reviewed against 7d4001c85547; fix evidence: commit 073343e2e294, main fix timestamp 2026-06-16T09:29:16+08:00. |
|
ClawSweeper PR egg 🎁 Pass real behavior proof to wake the egg and unlock a hatchable treat. Where did the egg go?
|
|
AI-generated review comment.
I also ran a focused source-level probe mirroring the failure mode we observed with GPT/default-filled tool params:
This matches the intended behavior: metadata/default-only poll fields no longer block Verdict: I think this is safe to merge. The change is small, targeted, and directly addresses the false-positive poll guard without changing actual Non-blocking suggestions:
|
|
Real behavior proof from a Discord production deployment that matches this PR's fix shape. Environment:
A normal text reply was generated, but {
"action": "send",
"channel": "discord",
"target": "channel:<redacted>",
"message": "<plain text>",
"pollQuestion": "",
"pollOption": [],
"pollDurationHours": 24,
"pollMulti": false,
"pollOptionIndex": 1,
"pollDurationSeconds": 60,
"pollAnonymous": false,
"pollPublic": false
}Observed error: I compared this exact payload against the current installed This PR's Impact: message loss in Discord channel sessions. The user sees the bot react/acknowledge, but no answer is posted. |
|
Clownfish 🐠 reef update Thanks for the contribution. Clownfish hit a branch-permission wall on this PR, so it opened a replacement branch to keep review moving while preserving credit. Replacement PR: #93441 fish notes: model gpt-5.5, reasoning medium; reviewed against 4d9329c. |
|
ClawSweeper applied the proposed close for this PR.
|
Summary
Describe the problem and fix in 2–5 bullets:
If this PR fixes a plugin beta-release blocker, title it
fix(<plugin-id>): beta blocker - <summary>and link the matchingBeta blocker: <plugin-name> - <summary>issue labeledbeta-blocker. Contributors cannot label PRs, so the title is the PR-side signal for maintainers and automation.message-action-runnertreated any poll-related params onaction="send"as poll intent, including metadata-only fields like duration and boolean flags.sendnow only treats non-emptypollQuestionorpollOptionas real poll intent, and regression tests were added for both the relaxed send path and the retained real-poll rejection path.action="poll"requests were not changed.Change Type (select all)
Scope (select all touched areas)
Linked Issue/PR
Root Cause (if applicable)
For bug fixes or regressions, explain why this happened, not just what changed. Otherwise write
N/A. If the cause is unclear, writeUnknown.action="send".Regression Test Plan (if applicable)
For bug fixes or regressions, name the smallest reliable test coverage that should catch this. Otherwise write
N/A.src/poll-params.test.ts,src/infra/outbound/message-action-runner.core-send.test.tsaction="send"must succeed when only poll metadata is present, and must still reject whenpollQuestionorpollOptionindicates a real poll payload.send.User-visible / Behavior Changes
message sendno longer rejects non-poll sends just because poll metadata fields are present. Real poll payloads onaction="send"are still rejected and must useaction="poll".Diagram (if applicable)
For UI changes or non-trivial logic flows, include a small ASCII diagram reviewers can scan quickly. Otherwise write
N/A.Security Impact (required)
Yes/No) NoYes/No) NoYes/No) NoYes/No) NoYes/No) NoYes, explain risk + mitigation: N/ARepro + Verification
Environment
Steps
runMessageActionwithaction: "send"and metadata-only poll fields such aspollDurationHours,pollMulti, orpollAnonymous.Poll fields require action "poll".runMessageActionwithaction: "send"pluspollQuestionorpollOption.action: "poll".Expected
action="send"into the poll-only rejection path.action="poll".Actual
Evidence
Attach at least one:
Human Verification (required)
What you personally verified (not just CI), and how:
hasRealPollIntentandrunMessageActionsend routing were run locally.Review Conversations
If a bot review conversation is addressed by this PR, resolve that conversation yourself. Do not leave bot review conversation cleanup for maintainers.
Compatibility / Migration
Yes/No) YesYes/No) NoYes/No) NoRisks and Mitigations
List only real risks for this PR. Add/remove entries as needed. If none, write
None.action="send".