fix(loop-detection): escalate generic_repeat to critical at criticalThreshold#1912
Open
BingqingLyu wants to merge 3 commits intomainfrom
Open
fix(loop-detection): escalate generic_repeat to critical at criticalThreshold#1912BingqingLyu wants to merge 3 commits intomainfrom
BingqingLyu wants to merge 3 commits intomainfrom
Conversation
…ostReplyRootId Direct messages in Mattermost were creating threads even with replyToMode=off because resolveMattermostReplyRootId would fall back to payload.replyToId regardless of chat kind. When a downstream payload carried a replyToId (e.g. from block-streaming delivery), this bypassed the earlier DM threading guard and set root_id on the outbound post, making DM replies appear as threads instead of in the channel body. Fix: pass kind through all three delivery call sites and hard-return undefined inside resolveMattermostReplyRootId for kind="direct", mirroring the resolveMattermostEffectiveReplyToId guard that already existed for session-key resolution. Fixes openclaw#59981
…hreshold The generic_repeat detector only checked warningThreshold and always returned level "warning", making criticalThreshold effectively a no-op for the most common runaway loop pattern (same tool + same args). Add a critical-threshold check before the warning check, consistent with how known_poll_no_progress and ping_pong already behave. Fixes openclaw#60111 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…aining-only fields MiniMax's usage_percent / usagePercent fields report the *remaining* quota as a percentage, not the consumed quota. When count fields (prompt_limit / prompt_remain) are also present, fromCounts already computed the correct usedPercent and the inverted value was silently ignored. But when only usage_percent is returned (no count fields), the code treated it as a used-percent and passed it through unchanged, causing the menu bar to show "2% left" instead of "98% left". Move usage_percent and usagePercent from PERCENT_KEYS to a new REMAINING_PERCENT_KEYS array. deriveUsedPercent now inverts remaining-percent values to obtain usedPercent, matching the behaviour already validated by the existing "prefers count-based usage when percent looks inverted" test. Count- based fromCounts still takes priority over both key groups. Fixes openclaw#60193 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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.
Summary
Fixes openclaw#60111.
The
generic_repeatdetector only checkedwarningThresholdand always returnedlevel: "warning", makingcriticalThresholda no-op for the most common runaway loop pattern (same tool, same arguments, repeated calls).criticalThresholdcheck in thegeneric_repeatcode path, before the existingwarningThresholdcheckThis makes
generic_repeatconsistent withknown_poll_no_progressandping_pong, which both escalate to"critical"atcriticalThreshold.known_poll_no_progressping_ponggeneric_repeat(before)generic_repeat(after)Test plan
level: "critical"anddetector: "generic_repeat"atcriticalThreshold🤖 Generated with Claude Code