Repository navigation
fix(desktop): group chats stop leaking (empty) sentinels and stop swallowing real answers behind (pass) (#94308, #94376) - #96239
Merged
Conversation
teknium1
force-pushed
the
salv/s5-sentinel-protocol
branch
from
August 27, 2026 09:35
18fd070 to
18b74cc
Compare
…pass) runGroupChatMemberTurn (and harvestStrandedGroupReply) selected only the last assistant message in a finished turn. A Codex intent-ack continuation nudge can land a complete, substantive room answer and then get a synthetic "(pass)" reply to the nudge itself — the terminal message picked by the old scan, which silently discarded the real answer (#94376). Both call sites now scan the messages appended this turn for the last substantive (non-pass) assistant reply, falling back to a pass only when no substantive answer exists in that window.
…path Address review feedback on #94386: the new tests only exercised runGroupChatMemberTurn's use of pickGroupTurnReply. Add the analogous case for harvestStrandedGroupReply (substantive answer -> synthetic continuation nudge -> (pass) tail) and document the pass-only tie-break (newest wins) in pickGroupTurnReply's docstring.
… group chat The agent loop writes an internal "(empty)" sentinel when the nudge/prefill/empties/fallback ladder all fail. The gateway converts it into a user-friendly notice at delivery, but the desktop group-chat bridge appended the raw sentinel into the room log (seen posting "(empty)" in a Bot Mode group room), and it synced to the shared ui_meta for mobile. Normalize at the single choke point, appendGroupChatEntry, mirroring gateway/run.py substitution so group chat and gateway surfaces show the same text. (pass)/empty silence semantics unchanged. Includes a regression test proven to fail on the pre-fix code. Fixes #94308
teknium1
force-pushed
the
salv/s5-sentinel-protocol
branch
from
August 27, 2026 10:15
cba5609 to
6b6f876
Compare
૮ >ﻌ< ა ci reviewran on 6b6f876 — chore(contributors): map aydinhrrs@gmail.com -> RibatTRW
|
This was referenced Aug 27, 2026
Closed
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
Group-chat turns stop leaking protocol sentinels and stop swallowing real answers (#94308, #94376). Consolidates the two halves of the sentinel-protocol seam, both filed Aug 25:
(pass), it shadowed the member's real answer and the whole turn was suppressed as silent ([Bug]: Bot Mode group hides valid reply when intent-ack continuation ends on (pass) #94376's real shape: over-suppression, not a leak). Now the scan keeps the last SUBSTANTIVE non-pass message; the stranded-harvest path is pinned by test.(empty)failure sentinel isn't in the pass vocabulary and rendered as a literal(empty)bubble ([Bug]: Desktop Bot Mode group chat appends the raw "(empty)" sentinel as a bot message #94308).appendGroupChatEntrynow rewrites the exact sentinel to the gateway's friendly notice; anything else passes through untouched.Validation
Live A/B (real Electron + backends, room "大司命, Testbot"): on main, an⚠️ The model returned no response…" instead.
(empty)reply renders as a literal(empty)bubble; on this branch the same flow renders "Fixes #94308, #94376. Source PRs #94310 + #94386 to be closed with credit after merge.
Infographic