Repository navigation
Conversation
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source-review follow-up via Wes’s account, with independent Rocket, Mantis and Groot review.
Reviewed head 8c7b94e3954d0abf40bc56b402397419580fb090 against base 9cc2881d63bd8d28fddf56065fc36d8dcbc7741e, focusing on the repair since 219fc6fe.
The prior P2, “preserve Members beneath Join,” is resolved in source. The new !target.join condition skips both Members handoff branches, so opening Join preserves the original Members visit. The added warm/cold controller tests exercise navigation.open and assert that Back returns to that exact entry, then to the preceding conversation or home. No new actionable findings in this bounded follow-up; no changes requested.
The original feature patch and base are unchanged, so earlier account/invite/admission coverage is retained. Back/Forward, explicit dismissal and replacement paths were traced in source. No tests, builds or apps were run; the new tests do not directly exercise Forward, Close or rendered focus, and browser/native behavior remains unverified. This is a COMMENT review, not approval.
8c7b94e to
9723171
Compare
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord automated source review via Wes’s account, integrating independent Rocket, Mantis and Groot reviews.
Reviewed 9723171e6647359332f3442b9ca5362481b935c0 against base/merge-base 58116b826171d190a7376fc57b0509c32c507dde. No new actionable findings in this bounded follow-up; no changes requested. The prior Members-under-Join repair remains intact.
The new matcher uses the same pasted-address parser and canonical community URL conversion as dialog submission. This allows completion to retire same-viewer sibling openings edited to a bare host or invite URL for the joined community. Edited empty or invalid destinations do not fall back to their original address; retirement reads the form before deleting its in-memory state. The rebased admission path retains its write guard and passes the newly parsed invite code into that submission.
Validation was source-only: no tests, builds or apps were run. The added helper assertions cover bare-host and invite-URL matching, not full sibling-visit retirement or browser/native/focus behavior. A one-time CI snapshot showed 34 successes, 23 running checks, one skip and a failed Rust and tool integration job; available annotations reported exit code 1 without establishing the cause. This review does not establish passing CI or runtime behavior.
COMMENT review only, not approval.
9723171 to
db1ad47
Compare
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord automated source review via Wes’s account, integrating independent Rocket, Mantis and Groot reviews.
Reviewed 70e1f3460adcd4396f1b4470e266405861dd442e against base/merge-base 3a1eb5601e997811009d01601786df8af9393a7f. No new actionable findings in this bounded follow-up; no changes requested. Prior Members and address-matching fixes remain covered.
The new subscription releases an opening’s in-memory state when its last tracked navigation visit leaves the retained history window, while preserving it for passive Back/Forward. Completion evaluates sibling destinations before dismissal publishes cleanup. Pasted invite submission now normalizes the address and keeps its code in the editable code field, so a later Continue cannot restore the link’s original code over an edited or cleared value.
Source-only validation: no tests, builds or apps were run. The added mounted-app assertions cover Settings-close cleanup, branch cleanup after Back, and edited/cleared pasted-code restoration. Capacity eviction, multiple visits sharing a token, lookup-error recovery, browser/native behavior and runtime focus were traced or remain unexercised; the assertions do not establish those workflows. A one-time CI snapshot had 40 successes, 18 running checks and one skip, with no failures at that moment; CI completion was not established.
COMMENT review only, not approval.
The join dialog is a presentation on the visit beneath it, for invite links, the picker's Join a community and Settings Create community. Back closes it; Forward restores the address without connecting again. Close retires its visit; a finished join replaces it with the joined community. Back cannot leave the dialog while it writes. Invite codes stay in memory only. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Logan Johnson <loganj@squareup.com>
Members hands off to what opens from it, so an invite opened while Members was showing replaced the Members visit (or, for a cold Members link, resolved it to its channel first). Back then closed both dialogs. The join dialog presents over Members, so it now pushes a visit above it. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Logan Johnson <loganj@squareup.com>
Join a community now takes an invite link or a bare host as its address. Finishing a join retires every opening that offers the joined community, so read each opening's address with the same parser; otherwise an opening left on an invite link or a bare host for that community stayed open. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Logan Johnson <loganj@squareup.com>
A pasted invite URL left its code in the address, so each Continue parsed it again and the link's code replaced an edited or cleared one. The address now holds the community and the code moves to Invite code. A join opening's state was released only by close, completion or a failed opening. Closing the view beneath it, a new branch or history's capacity left the code in memory with no way back to it. Services now release an opening's state once none of its visits is retained. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Logan Johnson <loganj@squareup.com>
A join dialog over Settings gave Settings a new request for the dialog's visit. Settings content keyed by its visit remounted: after Builderlab's Create community, the card read its creation route again and reopened Create over the join dialog. Settings now keeps its request while a join dialog covers it, as a page does. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Logan Johnson <loganj@squareup.com>
70e1f34 to
467d9e2
Compare
A join opened from a Settings card copied the card's route, so a reload reopened Create community above the join. The view beneath a join now keeps Settings' section, scope and provider, never a card's route, a plugin import or plugin details; opening, warm reuse and dismissal of joins all use it. Settings beneath a join also ignores dismissal while the join writes, as Back and the join's own Close already do. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Logan Johnson <loganj@squareup.com>
On reload, a join over Settings could open before Settings, which waits for the launch screen. Settings then took the modal layer and hid the join from keyboard and assistive technology while the join hid Settings. The join over Settings now waits until Settings has taken focus, after it hides the page beneath it. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Logan Johnson <loganj@squareup.com>
A join opened from the Builderlab card kept the card's create-community route on the Settings visit beneath it. Close then Back stopped on an extra Settings visit, and Back after a reload reopened the completed Create form. When a join opens over a visit that carries one-shot data, the controller now resolves that visit to the view the join keeps, as it already does for the channel beneath a Members handoff. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Logan Johnson <loganj@squareup.com>
A join opened over Settings plugin details dropped the plugin from the view it keeps, and the controller wrote that view into the visit it opened over. Back then returned to the Plugins list instead of the details. Plugin details are an addressed view, not an action: the view beneath a join now keeps them and drops only a card route or a plugin import. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Logan Johnson <loganj@squareup.com>
Summary
The Join a community dialog now works with Back and Forward, like Settings and the other dialogs that follow the app's navigation history rules (
docs/navigation-history.md). Before, it lived outside navigation: Back left the view under the dialog while the dialog stayed open, and Forward could not bring it back. This is the follow-up promised in #2991.It applies to every way the dialog opens:
buzz://join, the relay's invite page, Open in Buzz),Invite codes never go into history, the URL or session storage. They stay in memory for one opening of the dialog: two invites to the same community keep their own codes, and editing the address clears the code, so it never returns beside another address. After a reload an invite link must be opened again to use its code.
Details
join: { viewer, visit, community? }presentation on the visit beneath it, in the same way Settings presents over a page: the page underneath keeps its visit and stays mounted. Pages and their target comparisons see the target withoutjoin.visitis an opaque token for one opening.hosted-create-join.spec.mjsnow also reloads at the join (Join restores over Settings with no Create form, and Back shows the card's overview, not Create; both failed before the fix). It then holds a profile publication, tries Back and Escape, and refuses the publication; the join, its draft and Settings survive.docs/plugin-architecture.md: after creating a hosted community, the Builderlab card opens the join dialog (it copies the address only when no identity is ready to join with).Video
The picker's Join a community in the browser build (Chromium, slowed down): type an address, Back closes the dialog over the same view, Forward reopens it with the typed address, Reload shows the dialog again without the typed text, Close retires it (Forward is disabled).
join-dialog-history.mp4
🤖 Generated with Claude Code