镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

fix(messages): keep messages in their canonical channel - #2349

Merged
mrand-block merged 1 commit into
block:mainfrom
mrand-block:mrand-block/fix-canonical-message-channel
Nov 5, 2026
Merged

mrand-block merged 1 commit into
block:mainfrom
mrand-block:mrand-block/fix-canonical-message-channel

Conversation

@mrand-block

Copy link
Copy Markdown
Contributor

Why

A message with conflicting channel tags could appear in another conversation’s locally assembled history. Different read paths could interpret the same signed event as belonging to different channels. A sender allowed to post in a shared channel could therefore supply text to a private agent conversation, where the agent might act on it during a later request.

What changed

Require exactly one nonempty channel tag before accepting a message into views or history. Apply that rule to live admission, finite reads, and message folding. Ambiguous messages are excluded without changing their signed contents or assigning them to an arbitrary channel.

Co-authored-by: Codex <noreply@openai.com>
Signed-off-by: Michael Rand <177165992+mrand-block@users.noreply.github.com>
@mrand-block
mrand-block marked this pull request as ready for review November 3, 2026 23:41
@mrand-block
mrand-block requested a review from a team as a code owner November 3, 2026 23:41

@jmecom jmecom left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 AI-agent review of c64d8641aae921615d722ec19c2649edbd4fc864: LGTM; no blocking findings. Correctness and minimalness: 9/10.

The canonical-channel check applies before live and finite-read admission, and independently during message/history folding. I exercised genuinely signed messages with missing, empty, duplicate, and conflicting channel tags, including both tag orders. They are excluded from live delivery, finite reads, Codex conversation history, and pending-reply counts while valid messages remain available. Signature verification remains unchanged.

Validation: 147 existing focused tests plus 8 independent regression cases passed. All eight regressions failed on the parent revision for the expected reason and passed at this head. This was lower-layer/session validation; no GUI or packaged-app acceptance was performed.

Optional: retain equivalent regression coverage in the PR; the current diff contains no tests.

@jmecom jmecom left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Approved after the review above at c64d8641; no blocking findings.

@mrand-block
mrand-block merged commit 2bb12da into block:main Nov 5, 2026
40 checks passed
johnmatthewtennant added a commit that referenced this pull request Nov 5, 2026
Co-authored-by: Simone <0828be588d5c9c4d092c5b1cf01761d5aef63d6b104807fd8e8284d517dd1a99@buzz.block.builderlab.xyz>

* origin/main:
  fix(mcp): accept create scopes in durable approvals (#2650)
  feat(bestie): Bestie tab and Remembers you for a hosted Bestie (#2478)
  fix(relay): p-tag a one-to-one DM's agent partner on new messages (#2475)
  fix(agents): show each message author's username and display name (#2628)
  fix(agents): preserve visible edits in conversation history (#2355)
  fix(canvas): keep todo edits from approving unrelated instructions (#2350)
  fix(messages): keep messages in their canonical channel (#2349)
  NEXUS-4165: Add Thinking to agent creation (#2409)
  feat(plugins): let a plugin paint a backdrop behind the shell (#2437)
  feat(search): lead empty quick open with unread conversations (#2634)
  NEXUS-4170: Allow external apps to create private Solo chats (#2411)
  fix(acp): count grouped thinking levels when checking a synced level (#2640)

Signed-off-by: John Tennant <jtennant@squareup.com>
wpfleger96 added a commit that referenced this pull request Nov 5, 2026
…leanup

* origin/main:
  fix(mcp): accept create scopes in durable approvals (#2650)
  feat(bestie): Bestie tab and Remembers you for a hosted Bestie (#2478)
  fix(relay): p-tag a one-to-one DM's agent partner on new messages (#2475)
  fix(agents): show each message author's username and display name (#2628)
  fix(agents): preserve visible edits in conversation history (#2355)
  fix(canvas): keep todo edits from approving unrelated instructions (#2350)
  fix(messages): keep messages in their canonical channel (#2349)
agude-sq added a commit to agude-sq/buzz-app that referenced this pull request Nov 5, 2026
* origin/main: (28 commits)
  fix(mcp): accept create scopes in durable approvals (block#2650)
  feat(bestie): Bestie tab and Remembers you for a hosted Bestie (block#2478)
  fix(relay): p-tag a one-to-one DM's agent partner on new messages (block#2475)
  fix(agents): show each message author's username and display name (block#2628)
  fix(agents): preserve visible edits in conversation history (block#2355)
  fix(canvas): keep todo edits from approving unrelated instructions (block#2350)
  fix(messages): keep messages in their canonical channel (block#2349)
  NEXUS-4165: Add Thinking to agent creation (block#2409)
  feat(plugins): let a plugin paint a backdrop behind the shell (block#2437)
  feat(search): lead empty quick open with unread conversations (block#2634)
  NEXUS-4170: Allow external apps to create private Solo chats (block#2411)
  fix(acp): count grouped thinking levels when checking a synced level (block#2640)
  feat(conversation): let plugin rows manage messages without visiting a channel (block#2512)
  feat(github): make side-panel link opening optional (block#2629)
  feat(messages): show a blurred thumbnail until an image loads (block#2556)
  fix(relay): give large roster and read-state reads a 30s deadline (block#2627)
  fix(user-status): show a status emoji's :name: on hover where the full status shows (block#2384)
  fix(inbox): keep the list's place when returning in the same session (block#2134)
  fix(messages): pass verified labels to the forward recipient picker (block#2633)
  feat(messages): forward a message to a person (block#2167)
  ...

# Conflicts:
#	tests/browser/settings.spec.mjs
wpfleger96 added a commit that referenced this pull request Nov 5, 2026
* commit '4bb94e259':
  feat(github): rework the GitHub settings page (#2450)
  fix(mcp): accept create scopes in durable approvals (#2650)
  feat(bestie): Bestie tab and Remembers you for a hosted Bestie (#2478)
  fix(relay): p-tag a one-to-one DM's agent partner on new messages (#2475)
  fix(agents): show each message author's username and display name (#2628)
  fix(agents): preserve visible edits in conversation history (#2355)
  fix(canvas): keep todo edits from approving unrelated instructions (#2350)
  fix(messages): keep messages in their canonical channel (#2349)
  NEXUS-4165: Add Thinking to agent creation (#2409)
  feat(plugins): let a plugin paint a backdrop behind the shell (#2437)
  feat(search): lead empty quick open with unread conversations (#2634)
  NEXUS-4170: Allow external apps to create private Solo chats (#2411)
wpfleger96 added a commit that referenced this pull request Nov 5, 2026
…-service

* origin/main: (29 commits)
  Normalize profile names for verified-name matching (#2348)
  Add BuzzTerm font settings and compact glyph spacing (#2502)
  feat(plugins): let a host command run only verified bytes (#2535)
  NEXUS-4228: Add plugin toolbar actions and panel links (#2645)
  Keep plugin update controls stable and spaced (#2636)
  feat(inbox): rename to Activity and simplify the filter bar (#2543)
  fix(goose): track every replaced protected worker and check its security gate (#2528)
  docs(agents): say Pi agents don't take plugin notes yet (#2534)
  feat(agents): reorder agent cards with hold and drag (#1837)
  fix(messages): keep own sends from before the loaded history off the timeline (#2525)
  feat(github): rework the GitHub settings page (#2450)
  fix(mcp): accept create scopes in durable approvals (#2650)
  feat(bestie): Bestie tab and Remembers you for a hosted Bestie (#2478)
  fix(relay): p-tag a one-to-one DM's agent partner on new messages (#2475)
  fix(agents): show each message author's username and display name (#2628)
  fix(agents): preserve visible edits in conversation history (#2355)
  fix(canvas): keep todo edits from approving unrelated instructions (#2350)
  fix(messages): keep messages in their canonical channel (#2349)
  NEXUS-4165: Add Thinking to agent creation (#2409)
  feat(plugins): let a plugin paint a backdrop behind the shell (#2437)
  ...

# Conflicts:
#	src/bundled/goose/runtime.ts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants