Repository navigation
fix(pi): stop posting replies the agent did not send - #1758
Merged
Merged
Conversation
Pi posted a run's final assistant text when the agent never called send. That text is private narration by design, and Goose, Claude Code and Codex never post it, so Pi now leaves it in local activity. Failed runs are still reported in the thread. Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
…answers Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
salman1993
reviewed
Oct 27, 2026
salman1993
left a comment
Contributor
There was a problem hiding this comment.
🤖 Reviewed by Sol on Salman’s behalf at 724000c6.
No blocking findings. This follows #1359: Pi leaves unsent assistant text in local activity for both normal and recovered runs. Explicit sends, final: true, and owner-tagged failure reports keep their existing behavior. Removing the fallback’s send counters and posted-answer bookkeeping keeps the change small.
Validation: the full Vitest suite passed locally (12,022 passed, 16 skipped); git diff --check passed; hosted CI required and DCO passed at this head. No live Pi/desktop conversation was exercised.
salman1993
approved these changes
Oct 27, 2026
wpfleger96
marked this pull request as ready for review
October 27, 2026 21:16
rileycrane
added a commit
that referenced
this pull request
Oct 28, 2026
…ted-setup * origin/main: (24 commits) feat(agents): share agents to the community catalog and export snapshots (#1649) feat(navigation): dialogs never become Back/Forward destinations (#1696) fix(builderlab): sign in when finishing a hosted agent's setup (#1768) fix(messages): link #name prose to open channels the directory has named (#1706) feat(agents): keep the Mac awake while agents work (#1718) perf(panels): skip layout for covered workspace tabs (#1542) feat(composer): offer model and effort in a DM with an agent without a mention (#1621) test(workflows): wait for dialog initial focus before pasting YAML in WorkflowEditor test (#1705) fix(builderlab): show all captured activity without a conversation toggle (#1764) feat(agents): add a UI for Attention watches (#1663) Keep thread reply branches one level deep (#1751) fix(messages): keep table scrollbars inside webkit message rows (#1677) feat(agents): sync agent config through config channels (#1226) fix(agents): offer a new hosted agent in Solo chats right away (#1759) test(usage): make UsagePage read-window test DST-safe (#1668) fix(panels): scope split motion selectors to layout owners (#1681) feat(agents): simplify imports and clarify community scope (#1660) fix(pi): stop posting replies the agent did not send (#1758) feat(identity): support a local debug restore helper (#1517) test(perf): cover rich thread open close and reopen (#1683) ... Signed-off-by: Riley Crane <rileycrane@squareup.com>
rileycrane
added a commit
that referenced
this pull request
Oct 28, 2026
…into rileycrane/bestie-hourly-wake * origin/rileycrane/bestie-hosted-setup: (25 commits) Give Bestie's test fixture the native keepAwake that main now requires feat(agents): share agents to the community catalog and export snapshots (#1649) feat(navigation): dialogs never become Back/Forward destinations (#1696) fix(builderlab): sign in when finishing a hosted agent's setup (#1768) fix(messages): link #name prose to open channels the directory has named (#1706) feat(agents): keep the Mac awake while agents work (#1718) perf(panels): skip layout for covered workspace tabs (#1542) feat(composer): offer model and effort in a DM with an agent without a mention (#1621) test(workflows): wait for dialog initial focus before pasting YAML in WorkflowEditor test (#1705) fix(builderlab): show all captured activity without a conversation toggle (#1764) feat(agents): add a UI for Attention watches (#1663) Keep thread reply branches one level deep (#1751) fix(messages): keep table scrollbars inside webkit message rows (#1677) feat(agents): sync agent config through config channels (#1226) fix(agents): offer a new hosted agent in Solo chats right away (#1759) test(usage): make UsagePage read-window test DST-safe (#1668) fix(panels): scope split motion selectors to layout owners (#1681) feat(agents): simplify imports and clarify community scope (#1660) fix(pi): stop posting replies the agent did not send (#1758) feat(identity): support a local debug restore helper (#1517) ... Signed-off-by: Riley Crane <rileycrane@squareup.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.
Pi no longer posts the final assistant text of a run in which the agent never called
send. That text now stays in the agent's local activity, as it already does for Goose, Claude Code and Codex.Before: when a run ended without a
send, Pi posted its last assistant text into the thread, in reply to the latest request that run took, so the thread wasn't left waiting.Why it changes: every agent's instructions say its assistant text is not published to Buzz and it must use
send. Agents therefore write that text as private narration ("I've replied to Will") or reason about why no reply is needed, and Pi then posted it, including over a deliberate decision to stay silent. Goose stopped doing this, and Claude Code and Codex never did, so the same agent behaved differently depending on its harness.After: a failed run still posts the same
⚠️ I couldn't finish that: …report to the owner in its thread; only the unsent-text fallback is removed, together with the per-conversationsendcounter, the receipts'placedsnapshot and the posted-answer marker that existed only to feed it.send'sfinal: truehandling is unchanged.src/bundled/pi/runtime.test.tschecks that unsent text is posted nowhere, and the tests that used a posted answer to check where a run's result lands now check its failure report instead.