Conversation
…solves to no member An explicit @mention that resolved to no group-member agent (bot-identity/ registry miss, a human-only @mention, or a mention of a non-member bot) was silently dropped: the platform acked the message but no dispatch row was created, making explicit mentions strictly less reliable than no-mention routing. decideResponders now returns early only when the mention path yields at least one member agent; otherwise it warns and falls through to the same no-mention semantic/group-mode path. Adds per-mention debug diagnostics in resolveMentionAgentsWithMembers for registry/channel/membership misses.
📊 Coverage ReportTotal coverage: 49.8% (generated files excluded) Lowest-covered entries (first 200) |
…nd-off explicit Address review of #620: - Downgrade the unresolved-mention fall-through from Warn to Debug: @-mentioning a human or a non-member bot is ordinary group traffic; a Warn per such message would bury the genuinely anomalous registry-hit-but-unresolved case already logged per-mention in resolveMentionAgentsWithMembers. - Drop the redundant mentions_raw / mention_platform_ids log fields (and their eager-alloc helpers); the raw text and platform id are already logged where resolution happens. - Clear envelope.Mentions before the shared no-mention path so the hand-off is unambiguously mention-free instead of relying on the arbiter to re-derive it. - Add an always-mode test that positively proves the fall-through path runs (pre-#619 code returned zero rows there).
Deletes the always/mention/disabled group_mode config across plugins, core dispatch, pkg config, Web UI, docs and skills. The semantic arbiter is always wired in production, so it intercepts before group_mode ever applied — always vs mention was dead, and only disabled had any effect (an ingest gate). To stop a bot participating in a group, remove it from the group; there is no per-channel disable switch anymore. The no-arbiter degraded path now only auto-replies for a single-member web group and stays silent otherwise. Refs #619
- decideResponders: fix header comment that still named the deleted
"platform group-mode policy"; it now describes the real degraded path.
- Drop the dead `allMembersFallback` param from fallbackGroupDecision — after
group_mode removal every caller passed false and no all-members path remains.
- Remove the now-dead `envelope.Mentions = nil` assignment: the fall-through
routes purely off groupMembers and never re-reads it (the second
mention-taking arbiter call it guarded against is gone).
- Docs: group-chat-multi-agent.{md,zh.md} still described pre-#619 mention
suppression and the deleted always/mention policy; corrected both.
Refs #619
The degraded no-arbiter path had no test for a multi-member platform (non-web) group — the branch that must stay silent where `group_mode: always` once broadcast to every member. Add a positive lock so any reintroduced all-members fallback for platform groups fails the suite. Refs #619
The prior fix overstated it: a platform single-member group with no semantic arbiter stays silent without a WARN (the WARN only fires for len(members) > 1). Refs #619
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Two changes on this branch:
@mentionthat resolves to no member agent no longer silently drops the turn; it falls back to semantic routing instead of producing zero dispatch rows.group_modeconcept (always/mention/disabled) entirely across plugins, core dispatch,pkg/channelconfig, Web UI, docs and skills.Why
#619: Feishu (and any platform) could ack an
@agentmention with the processing reaction yet never reply.decideResponderstook the deterministic mention branch and returned immediately, so when no mention resolved to a group member (bot-identity/registry miss, empty mentionopen_id, a human-only@mention, or a mention of a non-member bot) no dispatch row was created. Explicit mentions were strictly less reliable than no-mention semantic routing.group_mode removal: The semantic arbiter is always wired in production, so
group_modewas effectively never consulted — onlydisabledhad any real effect, and that as a plugin-level ingest gate. Rather than keep a three-valued config that mostly did nothing, we removed it.How
decideRespondersreturns early on the mention path only when it yields at least one member agent; otherwise it logs a Debug diagnostic (platform, mention/member counts) and falls through to semantic routing. The genuinely anomalous per-mention miss reasons are logged inresolveMentionAgentsWithMembers.resolveMentionAgentsWithMembersgains per-mention debug diagnostics for the three miss reasons: registry miss, channel/agent lookup miss, resolved-to-non-member.effectivePlatformGroupMode/groupModeConfigand every plugin'sshouldRespondInGroup/shouldIngestGroup/isBotMentioned/groupModehelper, plus config fields, schema, metadata, Web selects, i18n keys and channel docs.There is no per-channel disable switch anymore. To stop a bot participating in a group, remove it from the group. Any stored
group_mode(including nested per-groupgroups.*.group_mode) in channel config is now ignored — behavior no longer depends on it.Refs
Verified:
mise run format && build && testall green; Windows cross-build passes; golangci-lint 0 issues.