Repository navigation
Conversation
…f consuming the mention Re-derived from 227a500 against the refactored round pipeline. A thrown member turn of the 4001 session-reap class (a ws_orphan_reap the turn-level retry could not recover) was parked in failedMembers until the user's next action, so a user's direct @mention went unanswered and the room settled as if the member chose to pass. Now such a throw leaves the watermark unadvanced and re-drives the member up to MAX_FAILED_TURN_RETRIES (1) before parking; ambiguous failures keep parking immediately. Timeouts keep their existing stranded-harvest path. Adds a RED-on-base regression test.
This was referenced Sep 18, 2026
This branch has not been deployed
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.
Problem
A member turn that throws a transient error of the 4001 session-reap class (e.g. a ws_orphan_reap the turn-level submit retry could not recover) was parked in the per-drive
failedMembersset until the user's next action. The watermark stays unadvanced (the accepted-flag refactor), but the member is never re-driven — so a user's direct @mention goes unanswered and the room settles as if the member chose to pass. The bot goes silent on exactly the message that named it.Fix
GroupRoundMemberContext.failedRetries: Map<string, number>— per-drive transient-failure counters.runGroupRoundMemberreturns'retry'for a 4001-class throw (isSessionGoneError) that still has retries left: watermark stays unadvanced, no entry appended, and the round loop runs another round so the re-drive happens before the room settles.MAX_FAILED_TURN_RETRIES = 1— after one re-drive the member is parked infailedMembers(skipped until the user acts again), so the room still settles against a genuinely-down member.reply === nullwithout a throw) keep their existing stranded-harvest path untouched.Test
Adds
group-rounds.stale-mention.repro.test.ts: the user @-mentions a member whose first TWO submits throw 4001-class errors (past the turn-level one-shot retry); the member still answers on the room-level re-drive. RED on base, GREEN with this change; full hermes-bots group suite 229/229, tsc clean, eslint clean.Re-derivation of #106502 against the refactored round pipeline (that patch no longer applied).