Repository navigation
Mark Me chats as personal in the session description for remote agents - #1058
Merged
Merged
Conversation
Me placement lives only in the owner's encrypted groups:me record, so a remote agent signed in with its own key cannot tell a Me chat from any other private session and starts a fresh thread-scoped session for every top-level message. New Me chats now add a `personal` line to the session description (header, optional parent:<uuid>, optional personal), which agents can read from channel metadata. Direct share already replaces the description, which clears it. The TS parser and the Tauri host validator share the same grammar. Co-authored-by: murderbot <3754f8729004d95654c46dbab3129e4ab9ef05cc2534e2a3fbfc155983bd637b@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Bradley Axen <baxen@squareup.com>
Collaborator
|
🤖 Carl, an automated reviewer, commenting via Wes's GitHub account. Fine as a bridge, but please make the kgoose side trust Longer term I'd rather give the owner's agents read access to Me placement (for example, encrypted to their keys) than add more flags to the |
Collaborator
|
🤖 Carl, an automated reviewer, commenting via Wes's GitHub account. Correction to my comment above. I'm withdrawing both suggestions:
Sorry for the noise. |
wesbillman
approved these changes
Oct 14, 2026
klross
marked this pull request as ready for review
October 14, 2026 22:32
Keep both new channel_writes boundary tests: the session description grammar test from this branch and the channel label test from main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Katie Ross <katieross@squareup.com>
johnmatthewtennant
added a commit
that referenced
this pull request
Oct 15, 2026
…-drag * origin/main: (34 commits) fix(channels): resolve template agents from ready inventory (#922) [buzz-app] Fit uploaded videos to the relay's 4K envelope and name video rejections (#1129) feat(github): reveal the PR comment a link points at (#947) fix(messages): stop WebKit freeze from muted composer video previews (#1143) test(browser): fix route-unroute and virtua-hold webkit flakes (#1149) test(browser): let dnd-kit see its first resize before text shrinks (#1150) fix(previews): keep a hovered preview through scroll anchoring (#1138) Unify owned agent profile panels (#1083) feat(agents): import old Buzz teams from the Teams tab (#985) Mark Me chats as personal in the session description for remote agents (#1058) feat(messages): optional way to open buzz message links in a thread tab (#1113) Distinguish thread originals and tighten conversation spacing (#929) fix(buzz-mcp): page channel reads past the relay limit (#1131) fix(inbox): show a session's top-level timeline as one conversation (#1094) feat: reorder sidebar groups by dragging their headers (#1118) fix(avatars): request the cached relay thumbnail at every avatar site (#1054) fix(messages): soften quote styling and tighten spacing (#1098) fix(emoji): shrink and raise inline custom emoji (#1097) fix: follow host theme in media review chrome (#1117) Highlight an already-open thread tab when reopening it (#1050) ... Signed-off-by: John Tennant <jtennant@block.xyz> Co-authored-by: Claude Worker <f425b86c3b780d43f8d9cf1802429d04dd985bf92eac44fca9468b5ad3887c5e@buzz.block.builderlab.xyz> # Conflicts: # src/features/channel-navigation/ChannelSidebarDnd.tsx
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.
Why
Me placement is stored only in the owner's encrypted
groups:merecord. A remote agent (kgoose) signs in with its own key, so it can't tell a Me chat apart from any other private session. It defaults to thread scope, and because every message in Me is top-level, each message starts a fresh session. Local agents get this right becausemeChat()reads the owner's placement; remote agents have nothing to read.What
New Me chats add a
personalline to the existing session description, which the relay already publishes in the channel's kind 39000abouttag:The lines must appear in that order, each at most once, with nothing else allowed.
sessionMetadataand the Tauri host validator (channel_writes.rssession_metadata) now share that grammar. Without the Rust change, the desktop host would refuse to sign the new kind 9007.NewSessionComposerpassespersonaltoworkSessions.create.docs/sessions/README.md; it doesn't revive the superseded relay-enforcedspaces.mdproposal.Contract for remote agents: a channel whose 39000
aboutparses with apersonalline is the owner's personal chat. Use one channel-scoped session and post at the top level, asmeChat()does locally. The kgoose side is a separate change.Not in this PR / decisions for review
No backfill. Existing Me chats keep today's remote behavior (thread-scoped) until they're recreated or a one-time edit is added.
Link share leaves the hint in place. Destination-link sharing grants other people access but leaves the chat in Me, so it keeps the hint. That matches what local agents do today (they follow placement). If link share should mean "no longer personal", it needs a follow-up.
Version skew. Older app builds parse the session description exactly, so they show a new Me chat as an ordinary private stream:
This only affects people running several devices on different versions.
Testing
vitest run: 615 files, 8824 tests pass, plus the new metadata grammar, 9007 creation, composer, rename and direct-share cases. Whenpersonalparsing is broken, 8 direct-share tests and the grammar test fail.cargo test --manifest-path src-tauri/Cargo.toml: 369 passed and 1 failed. The failure washost_command::tests::stdin_is_exact_data_and_output_is_drained_concurrently, which passed 3 of 3 times on its own, so it's a load flake unrelated to this change. The newcreation_accepts_only_the_session_description_grammartest passes.tsc --noEmit, biome, clippy and pre-push hooks all pass.about, then direct-sharing it and checking the line is gone.🤖 Generated with Claude Code