Repository navigation
Show a Solo chat's pull request state in the sidebar - #1328
Merged
Merged
Conversation
A Solo chat can be linked to one pull request, from the GitHub panel or by an agent with the link_pr tool. The link is a NIP-AR artifact in the chat (type buzz.solo.pr), signed by the owner, so every device sees it. The sidebar reads all shown chats' links and their pull requests' state in one relay read and one gh GraphQL query each minute while the window is visible, and shows draft, open, checks failing, merged or closed instead of the chat bubble. Co-authored-by: mbot <3754f8729004d95654c46dbab3129e4ab9ef05cc2534e2a3fbfc155983bd637b@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Bradley Axen <baxen@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.
Stacked on #1325.
A Solo chat can be linked to one pull request. While it is linked, the chat's row in the sidebar shows the pull request's state in place of the chat bubble: draft, open, checks failing or running, merged, or closed. That makes "is this chat's work merged yet" visible without opening anything.
The rows above use real states for #1325 and #1322 (draft), #1326 (open), #1299 (open, checks failing), and #1316 and #1319 (merged), read through
gh. The last row has no link and keeps the bubble. The screenshot comes from a local harness that renders the realSoloPullIconand store inside sidebar rows, with the relay read faked. It is not the full app.How it works
link_prtool ({url}or{unlink: true}) that works only in the Solo chat they are running in.buzz.solo.pr,d= uuidv5(channel, type), and content{version: 1, url}. Unlinking writesurl: nullas an update, because an artifactdeletecannot carry content. Every device and agent in the chat sees the same link. It is always signed by the chat's owner, including when an agent callslink_pr. It is written throughconfigArtifactWriter, so linking needs the desktop app. Reading works everywhere.#hover the visible chats).gh api graphqlquery covers every linked pull request, with aliased fields for state, isDraft, mergeStateStatus and the head commit's statusCheckRollup.gh, it falls back to public REST every 5 minutes and shows only open, draft, merged or closed.registerChatIcon(component). The first registered icon renders for each Solo row, as<Icon session channelId fallback/>.SoloInventorypasses the existing bubble asfallback, so with no plugin, or no link, nothing changes.Needs approval: FOUNDATION edits
src/features/conversation/service.tsx: newchatIconsreader +registerChatIcon, modelled onregisterTabs.src/app/App.tsx: one prop,chatIcons={services.conversation.chatIcons}, passed toPrimarySidebar.Testing
solo-pull.test.tscovers:SoloPull.test.tsxcovers:link_prthroughapply, including its refusalsSoloInventory.test.tsx: a registered chat icon replaces the bubble once it registers.Full
vitest runpasses (661 files).tsc, biome, the design checks and pre-push hooks also pass.No browser spec. The browser fixture relay has no NIP-AR artifact support, and the web transport has no artifact writer.
Not yet verified:
I checked relay acceptance against
buzz-core/src/artifact.rsand the artifact handler on block/buzz main: any namespaced type is accepted from any channel writer, andprevis required for updates.Try natively: open a PR from a Solo chat, then Link to this chat. The row icon should switch within a few seconds. Merge it from the panel, and the row should turn into the purple merge icon on the next refresh, within a minute. Needs a native rebuild, because #1325 changed the plugin manifest.
🤖 Generated with Claude Code