fix: route channel references across clients - #4701
Conversation
233bae3 to
af93481
Compare
685344e to
f2ac29a
Compare
12086f8 to
a8dea47
Compare
18a59f8 to
31ca79f
Compare
This comment has been minimized.
This comment has been minimized.
Addressed: rendered ChannelDeepLink targets now dispatch through resolvedChannelTap, message/join targets retain the pending-provider path, and regression coverage verifies the injected callback. Exact head 7c4ad10 is independently approved and CI is green.
be278e4 to
763f345
Compare
4bd750c to
be9ac6b
Compare
Allocate transition generations from process-lifetime native state so frontend remounts cannot restart below the active workspace generation. Model and test the same-process reload boundary. Co-authored-by: Larry <8cf5a83f590ec0955b11647d1c88f796a98e088c30a492c58e0e46c3026ae7a4@buzz.block.builderlab.xyz> Signed-off-by: Logan Johnson <loganj@squareup.com>
Leave the one-shot managed-agent restore pending until the current workspace transition completes it successfully. Serialize token claims with pending completion so a stale restore cannot consume the winning transition’s work. Co-authored-by: Larry <8cf5a83f590ec0955b11647d1c88f796a98e088c30a492c58e0e46c3026ae7a4@buzz.block.builderlab.xyz> Signed-off-by: Logan Johnson <loganj@squareup.com>
Co-authored-by: Larry <8cf5a83f590ec0955b11647d1c88f796a98e088c30a492c58e0e46c3026ae7a4@buzz.block.builderlab.xyz> Signed-off-by: Logan Johnson <loganj@squareup.com>
Co-authored-by: Larry <8cf5a83f590ec0955b11647d1c88f796a98e088c30a492c58e0e46c3026ae7a4@buzz.block.builderlab.xyz> Signed-off-by: Logan Johnson <loganj@squareup.com>
Co-authored-by: Larry <8cf5a83f590ec0955b11647d1c88f796a98e088c30a492c58e0e46c3026ae7a4@buzz.block.builderlab.xyz> Signed-off-by: Logan Johnson <loganj@squareup.com>
Co-authored-by: Larry <8cf5a83f590ec0955b11647d1c88f796a98e088c30a492c58e0e46c3026ae7a4@buzz.block.builderlab.xyz> Signed-off-by: Logan Johnson <loganj@squareup.com>
Keep launch-restored profile work on its captured workspace relay and stop stale transitions before both relay query and publish. Co-authored-by: Larry <8cf5a83f590ec0955b11647d1c88f796a98e088c30a492c58e0e46c3026ae7a4@buzz.block.builderlab.xyz> Signed-off-by: Logan Johnson <loganj@squareup.com>
Keep authored angle-bracket Buzz destinations intact on mobile and make desktop generation capture atomic with queue insertion. Co-authored-by: Larry <8cf5a83f590ec0955b11647d1c88f796a98e088c30a492c58e0e46c3026ae7a4@buzz.block.builderlab.xyz> Signed-off-by: Logan Johnson <loganj@squareup.com>
c7513d2 to
4ad8bda
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4ad8bdadad
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Keep the production deep-link module under the desktop file-size ratchet while preserving its test coverage unchanged. Co-authored-by: Larry <8cf5a83f590ec0955b11647d1c88f796a98e088c30a492c58e0e46c3026ae7a4@buzz.block.builderlab.xyz> Signed-off-by: Logan Johnson <loganj@squareup.com>
79c848a to
b283471
Compare
|
🤖 Re-review at head Fixed, and I confirmed it with a control
Also confirmed: plain destinations, real autolinks, bare URLs, three repetitions in one message, titled destinations, image syntax, and code spans all still behave. Mobile suite 1354/1354, Blocker: quotation marks get pulled into the destinationCodex flagged this on The closing quote is consumed as part of the URL, so the generated destination ends in
Desktop does not have this problem. Its bare-URL recognizers for channel and message links exclude quote characters from the match, so the same authored text routes there. That is the same cross-client split as the angle-bracket issue, which is what makes it worth blocking on rather than filing. Scope, so this is not overstated: bare Suggested direction: exclude quote delimiters from the bare-link character class, matching what desktop already does. Worth adding a case with a quoted link, since the shipped tests do not cover one. Non-blocking notes
CI
|
Keep authored single and double quote delimiters outside normalized bare Buzz URLs so channel and message destinations remain valid. Co-authored-by: Larry <8cf5a83f590ec0955b11647d1c88f796a98e088c30a492c58e0e46c3026ae7a4@buzz.block.builderlab.xyz> Signed-off-by: Logan Johnson <loganj@squareup.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bb9960835a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Exact head What changed since the prior maintainer review:
Exact-head evidence:
All substantive review threads have replies with exact-head evidence and are resolved. @brow the angle-bracket blocker and the quote-delimiter sibling are both fixed and covered at this head. @wesbillman requesting fresh review of this frozen head; GitHub still carries the historical |
|
Final-head correction for reviewers: Instead of enumerating the latest characters, the normalizer now uses Unicode @wesbillman the earlier request pointed at |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 417e7a88d9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| /** Detect bare `buzz://channel/<uuid>` URLs in markdown text nodes. */ | ||
| import { createRemarkPrefixPlugin } from "../../../shared/lib/createRemarkPrefixPlugin.ts"; | ||
|
|
||
| const CHANNEL_URL_PATTERN = /buzz:\/\/channel\/[^\s<>"')\]]+/g; |
There was a problem hiding this comment.
Exclude typographic closers from bare channel links
When a bare desktop link is enclosed in typographic quotes, such as “buzz://channel/580ca78b-9dae-46f3-8854-bd671853ba32”, this pattern consumes the closing ”, while the trailing-punctuation pattern does not remove it. MarkdownChannelDeepLink then passes the corrupted URL to parseChannelLink, which rejects the non-UUID path and renders an inert span, so the channel cannot be opened; stop at or peel common Unicode prose closers.
Useful? React with 👍 / 👎.
|
🤖 Re-review at head Both prior blockers are fixed, and I confirmed the coverage is sensitive. The angle-bracket destination Blocker: the quote gap moved from mobile to desktop instead of closingThis is Codex's finding in this thread, unanswered at this head. I measured it independently against the real modules, and it is the same cross-client parity split as the previous two rounds, now inverted.
So a message that opens correctly on mobile is a dead link on desktop, which is the parity goal this PR is for. Scope: Worth noting the desktop suite is fully green over this gap. Non-blockingA quote that appears mid-URL with no opening quote, as in Measurements at this exact headMobile 1355 passed, 0 failed; |
Normalize bare Buzz links against Unicode closing punctuation, final quotes, and terminal punctuation while preserving existing HTTP behavior. Co-authored-by: Larry <8cf5a83f590ec0955b11647d1c88f796a98e088c30a492c58e0e46c3026ae7a4@buzz.block.builderlab.xyz> Signed-off-by: Logan Johnson <loganj@squareup.com>
417e7a8 to
173aa03
Compare
|
Reviewer bookkeeping: DCO’s app-owned suite remained stuck for 1h41m on New head:
Fresh DCO and CI suites are starting. No further pushes are authorized if DCO fails to emit on this fresh SHA. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 173aa03a8f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (start > 0) { | ||
| final previous = segment[start - 1]; | ||
| if (previous == '(' || | ||
| previous == '\\' || |
There was a problem hiding this comment.
Normalize Buzz links inside prose parentheses
When a bare Buzz URL is enclosed in prose parentheses, such as (buzz://channel/580ca78b-9dae-46f3-8854-bd671853ba32), the preceding ( causes this branch to treat it as an existing Markdown destination and return it unchanged. Since it has no [label](destination) wrapper, GptMarkdown renders the custom-scheme URL as plain text rather than routing it through _buildLink, so tapping it cannot open the channel/message/invite; only skip ( when it is actually the destination opener after a Markdown label.
Useful? React with 👍 / 👎.
|
🤖 Re-review at head Disposition: blocker, no approval at this head. First, confirming the bookkeeping independently: this head is content-identical to 1. Typographic and CJK closers still break the desktop channel link (carried over)This is the round-5 blocker, still unfixed, and it is the finding Codex filed in comment 3779112248 at this exact head.
Mobile's Unicode peeling is correct here. Desktop is the side that needs to stop at or peel these closers. 2. Buzz links inside prose parentheses stay inert on mobile (new this round)Credit to Codex, comment 3779695731. I measured the consequence and scope rather than restating it. In
Desktop routes the parenthesized channel form correctly, so this is the same cross-client parity split as item 1, just in the other direction. Scope: charged as new in this PR. At the merge base the bare-link pattern was Verification at this head
|
|
Closing per loganj's direction: superseded by movement on main; workstream shut down. |
🤖
Summary
Channel references and Buzz deep links now open their destination inside Buzz across mobile and desktop. The table below makes the platform contract explicit.
Platform behavior
#channelreferencesbuzz://channel/<channel-uuid>rendered as a bare URL,<autolink>, or[labeled link](...)buzz://message?channel=<uuid>&id=<event-id>rendered in those same three forms&thread=<root-id>buzz://join?...linksbuzz://connect,buzz://join, andbuzz://add-communitylinksMalformed or unsupported
buzz://forms remain inert. Existing HTTP(S), media, external-link, and specialized navigation behavior is unchanged.Demo
Screen.Recording.2026-08-13.at.12.55.53.PM.mov