Skip to content

Keep CLI pairings through a lapsed sign-in, pair for the open community, and put buzz on PATH - #3386

Merged
wpfleger96 merged 6 commits into
mainfrom
wpfleger/pairing-keep-on-lapse
Nov 13, 2026
Merged

wpfleger96 merged 6 commits into
mainfrom
wpfleger/pairing-keep-on-lapse

Conversation

@wpfleger96

@wpfleger96 wpfleger96 commented Nov 12, 2026 •

Copy link
Copy Markdown
Member

Summary

Keep pairings when the sign-in lapses. If the Builderlab sign-in expired and Buzz restarted before you signed back in, the next CLI call deleted its pairing for good. With no saved session, Buzz reads you as signed out with no email, and that never matched the email the pairing was approved under (admit in credential_service/pairing.rs). A real sign-out or account change already revokes every pairing on its own, so that mismatch now answers "sign in again in Buzz" and keeps the pairing. Other mismatches still revoke.

pair without a relay uses the open community. pair with [client] alone pairs for the community open in Buzz. The page now reports that community along with the saved ones (credential_pairing_communities gains active). With none open, the tool is refused without asking: "open one in Buzz, or pass --relay". [client, relay] works as before, and the Allow prompt still shows the community.

buzz on PATH. At every start, the installed app links ~/.local/bin/buzz to its bundled CLI at its real path. It replaces a symlink that dangles or points at a Buzz app's CLI, and leaves any other symlink, file or directory alone. Dev builds (tauri::is_dev() or a non-release identifier), AppImages, and apps run from a mounted disk image (/Volumes/…) or App Translocation skip it. On Windows, the NSIS hooks add $INSTDIR\bin to the user PATH on install and remove it on uninstall. PowerShell edits the registry value in place, so a long PATH isn't truncated, unexpanded entries survive and nothing is added twice, and then the change is broadcast. The README's command-line step is updated to match.

Testing

  • New a_pairing_survives_a_lapsed_sign_in_and_a_restart: pair while signed in with an email, relaunch signed out with no sign-out recorded, probe. The pairing is kept, the probe answers "sign in again", and the token works once signed back in.
  • New a_pairing_without_a_relay_uses_the_open_community: refused with no open community, then approved for it once one is set.
  • New cli_link unit test: creates the link, relinks dangling and Buzz-CLI links, and leaves a link to a custom CLI, files and directories alone.
  • The NSIS hook was not run locally; Windows CI builds the installer.

Bundled CLI. Pins block/buzz (src-tauri/Cargo.toml, Cargo.lock) at 630922a9, the merge of buzz#9417, which contains the previous pin 0e6037c7. The bundled buzz then pairs for the open community when no relay is given, skips stopped desktops, accepts --relay after the subcommand and reads a bare host as https://. docs/buzz-help.md describes this, plus a lapsed sign-in keeping its pairings.

Related: buzz#9417

@kalvinnchau kalvinnchau 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.

🤖 Three low-priority lifecycle concerns below. Native persistence and platform installation remain unverified.

Comment thread src-tauri/src/cli_link.rs Resolved
Comment thread src-tauri/src/lib.rs Resolved
@wpfleger96
wpfleger96 force-pushed the wpfleger/pairing-keep-on-lapse branch from 1fbcd3e to 3a42184 Compare November 13, 2026 00:24
wpfleger96 added a commit to block/buzz that referenced this pull request Nov 13, 2026
…t a bare relay host (#9417)

## Summary

Fixes to `buzz auth desktop pair` and relay selection:

- **`pair` skips desktops that aren't running.** A desktop that exited
without removing its advertisement no longer counts toward "several Buzz
desktops are running". It uses the same running test as `probe`, where
only a transport failure means not running.
- **`--relay` is global**, so `buzz auth desktop pair --relay …` works
and the flag shows in subcommand help.
- **A bare host means `https://`** for `--relay` and `BUZZ_RELAY_URL`.
An explicit `http://`, `ws://` or `wss://` stays as typed.
- **`pair` with no relay sends `[client]`.** The desktop pairs for its
active community and returns the bound relays, which the CLI stores. An
older desktop answers `invalid_request`, which the CLI reports as "this
Buzz can't pick a community; pass --relay".
- **`docs/local-credential-provider.md`**: covers the one-parameter
`pair`, `unavailable` when no community is active, the older-provider
fallback, skipping stale advertisements, and a lapsed sign-in keeping
the pairing instead of revoking it.
- The existing `concurrent_pair_and_unpair…` test now fails after 60s
instead of hanging when the held pair request never reaches the mock
desktop.
- The CLI tests that run the real `lsof` same-user check now take turns.
A nextest test group, `desktop-same-user-check`, serializes the whole
`desktop_provider::` module for the pre-push hook. Most of its tests
reach the check, and the few that don't run serially too. A test-only
lock around the check does the same in `cargo test`. Waiting for a turn
doesn't count against the request timeout. The check and its 5s limit
are unchanged. `list_tells_a_stale_advertisement_from_a_rejection` keeps
the in-cap `retry_after` of 30 and times from the desktop's first
answer, so waiting for a turn isn't counted.

The desktop half is block/buzz-app#3386.

## Testing

- New tests: `pair_skips_a_desktop_that_is_not_running`,
`an_older_desktop_asks_for_a_relay`,
`relay_flag_is_global_and_a_bare_host_means_https`, plus updated
relay-selection cases.
- `cargo test -p buzz-cli --locked -- --test-threads=4` passes: 689
tests, both with default threads and with `--test-threads=4`, and under
the pre-push hook's nextest run.

---------

Signed-off-by: Will Pfleger <[email protected]>
Co-authored-by: Hayt <211b96e6a2b7f45fd4047988976c7bbbeeda0c15f3ae7b32eec20834b5a55118@buzz.block.builderlab.xyz>
wpfleger96 and others added 6 commits November 12, 2026 19:30
…e open community

A pairing approved while signed in was deleted the first time a tool
called after the sign-in expired and Buzz restarted: with no session left
the person reads as signed out with no email, which never matched the
approval. A real sign-out or change of account already revokes every
pairing on its own, so that mismatch now answers "sign in again in Buzz"
and keeps the pairing.

`pair` with only a client now pairs for the community open in Buzz. The
page reports it with the saved communities; with none open, the tool is
told to open one or pass --relay. Tools that name a relay are unchanged.

Co-authored-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
Signed-off-by: Will Pfleger <[email protected]>
The installed app links ~/.local/bin/buzz to its bundled CLI at every
start, following the app's real path through updates and moves. It
replaces a symlink and never a file or directory. Development builds
and AppImages skip it: a worktree build's link would dangle, and an
AppImage runs from a mount that ends when it quits.

On Windows the installer adds the install's bin folder to the user PATH
and the uninstaller removes it, editing the registry value in place so a
long PATH is never truncated or duplicated, then broadcasts the change.

Co-authored-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
Signed-off-by: Will Pfleger <[email protected]>
tauri::is_dev() is false for a packaged debug bundle, which keeps the
release identifier, so a worktree's debug bundle could take over
~/.local/bin/buzz. Debug builds now skip the link too.

Co-authored-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
Signed-off-by: Will Pfleger <[email protected]>
Plain cargo test has tauri::is_dev() true, so the test passed without the
debug-profile check. development() now takes the Tauri-dev flag, and the
test passes false.

Co-authored-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
Signed-off-by: Will Pfleger <[email protected]>
…ff others' CLIs

A pairing past its disuse period now answers revoked even while the
sign-in has lapsed, instead of asking for a sign-in that only finds it
expired.

The buzz link replaces only a dangling link or one to a Buzz app's CLI,
leaving a link to a CLI the user chose alone. It is not made from a
mounted disk image or an App Translocation copy, which go away.

Co-authored-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
Signed-off-by: Will Pfleger <[email protected]>
Pins block/buzz at the merge of block/buzz#9417, so the bundled CLI pairs
for the open community, skips stopped desktops, takes --relay after the
subcommand and reads a bare host as https://. The help and the buzz link's
doc comment describe the new behaviour.

Co-authored-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
Signed-off-by: Will Pfleger <[email protected]>

@kazemek21 kazemek21 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.

Kyle reviewed this PR and the Nexus review-tracker notes and approved with no additional comments.

Posted by Codex (gpt-6.1-sol) on behalf of kylez

@wpfleger96
wpfleger96 force-pushed the wpfleger/pairing-keep-on-lapse branch from 3a42184 to e8247cb Compare November 13, 2026 00:33
@wpfleger96
wpfleger96 merged commit ed68067 into main Nov 13, 2026
48 checks passed
@wpfleger96
wpfleger96 deleted the wpfleger/pairing-keep-on-lapse branch November 13, 2026 00:49
LordMelkor added a commit to LordMelkor/buzz-app that referenced this pull request Nov 13, 2026
Co-authored-by: Sigil <06114f072cf21e50fcd4133ab21346cdb1f74ee16d853a9729995fa6c03a251c@buzz.block.builderlab.xyz>

* commit '05433fe4af186eeccd85c912f9e60e96b9123232':
  fix(mentions): don't let outside names block a member's exact @name (block#3254)
  ci(release): stop scheduled desktop preview builds (block#3425)
  Keep CLI pairings through a lapsed sign-in, pair for the open community, and put buzz on PATH (block#3386)
  fix(claude-code): look up the model list again once it is an hour old (block#3398)

Signed-off-by: LordMelkor <[email protected]>
ljknight added a commit to ljknight/buzz-app that referenced this pull request Nov 13, 2026
* origin/main:
  Keep deleted agents out of pickers; Delete always archives (block#3418)
  fix(mentions): don't let outside names block a member's exact @name (block#3254)
  ci(release): stop scheduled desktop preview builds (block#3425)
  Keep CLI pairings through a lapsed sign-in, pair for the open community, and put buzz on PATH (block#3386)
  fix(claude-code): look up the model list again once it is an hour old (block#3398)
  feat(plugins): let a plugin wake an agent at a channel's top level (block#3299)
  Enable mouse drag scrolling in the agent avatar picker (block#3401)

Signed-off-by: Laura Knight <[email protected]>

# Conflicts:
#	docs/plugin-authoring-guide.md
LordMelkor added a commit to LordMelkor/buzz-app that referenced this pull request Nov 13, 2026
Co-authored-by: Sigil <06114f072cf21e50fcd4133ab21346cdb1f74ee16d853a9729995fa6c03a251c@buzz.block.builderlab.xyz>

* commit '05433fe4af186eeccd85c912f9e60e96b9123232':
  fix(mentions): don't let outside names block a member's exact @name (block#3254)
  ci(release): stop scheduled desktop preview builds (block#3425)
  Keep CLI pairings through a lapsed sign-in, pair for the open community, and put buzz on PATH (block#3386)
  fix(claude-code): look up the model list again once it is an hour old (block#3398)

Signed-off-by: LordMelkor <[email protected]>
LordMelkor added a commit to LordMelkor/buzz-app that referenced this pull request Nov 13, 2026
Co-authored-by: Sigil <06114f072cf21e50fcd4133ab21346cdb1f74ee16d853a9729995fa6c03a251c@buzz.block.builderlab.xyz>

* commit '05433fe4af186eeccd85c912f9e60e96b9123232':
  fix(mentions): don't let outside names block a member's exact @name (block#3254)
  ci(release): stop scheduled desktop preview builds (block#3425)
  Keep CLI pairings through a lapsed sign-in, pair for the open community, and put buzz on PATH (block#3386)
  fix(claude-code): look up the model list again once it is an hour old (block#3398)

Signed-off-by: LordMelkor <[email protected]>
LordMelkor added a commit to LordMelkor/buzz-app that referenced this pull request Nov 13, 2026
Co-authored-by: Sigil <06114f072cf21e50fcd4133ab21346cdb1f74ee16d853a9729995fa6c03a251c@buzz.block.builderlab.xyz>

* commit '05433fe4af186eeccd85c912f9e60e96b9123232':
  fix(mentions): don't let outside names block a member's exact @name (block#3254)
  ci(release): stop scheduled desktop preview builds (block#3425)
  Keep CLI pairings through a lapsed sign-in, pair for the open community, and put buzz on PATH (block#3386)
  fix(claude-code): look up the model list again once it is an hour old (block#3398)

Signed-off-by: LordMelkor <[email protected]>
kleinbem added a commit to kleinbem/nix-packages that referenced this pull request Nov 13, 2026
Moves the fleet's mesh-llm to MeshLLM 0.79.0 and buzz-app's Shared
compute with it. Both speak skippy stage generation 16 now, so buzz-app
can split models with the fleet's mesh-llm nodes again.

- **mesh-llm** → `kleinbem/nixpkgs@ddb90897` (mesh-llm-dev:
NixOS/nixpkgs#571722 at 0.79.0 plus its follow-ups). Same attrs, paths
and module as before.
- **buzz-app** → `kleinbem/nixpkgs@00a55a67` (branch
`buzz-app-trial-0790`, on that same mesh-llm commit). It builds Block's
own 0.79 move, block/buzz-app#3271 at `058e300d`, with no patch of mine.
Two changes for current nixpkgs: `aws-lc` and `sqlite` in buildInputs
(the cargo hooks now link both from the system). One new test skip:
`cli_link::tests::only_the_installed_release_owns_the_link` asserts a
debug build, and nixpkgs tests in the release profile (added in
block/buzz-app#3386).

Checked:
- nixpkgs-review-gha, x86_64-linux: mesh-llm (43369399492),
skippy-native-runtime-vulkan (43369413074), skippy-tools (43369424969)
and nixosTests.mesh-llm (43369437043) built; buzz-app with its full test
suite (43376192753) built.
- In this flake, buzz-app and mesh-llm use the same two
`skippy-native-runtime-0.79.0` derivations.

🤖 Generated with [Claude Code](https://claude.com/claude-code)


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

<!-- coderabbit-ai-generated:v1 -->

## Summary by CodeRabbit

* **Chores**
  * Updated the pinned versions of Buzz App and Mesh LLM.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Claude Opus 5.5 <[email protected]>
kleinbem added a commit to kleinbem/nix-packages that referenced this pull request Nov 13, 2026
Moves buzz-app to `kleinbem/nixpkgs@59d494b6`, which stops the app from
linking `~/.local/bin/buzz` to its bundled CLI (added in
block/buzz-app#3386). Under Nix that link points into the store and, on
Linux, keeps the first installed version until it's garbage-collected.
The `buzz` command comes from nixpkgs' `buzz-cli` instead. mesh-llm is
unchanged.

Checked: nixpkgs-review-gha run 43431218322 built buzz-app with its full
test suite on x86_64-linux; this flake's buzz-app is that same
derivation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

<!-- coderabbit-ai-generated:v1 -->

## Summary by CodeRabbit

* **Chores**
* Updated the packaged version of buzz-app to a newer revision. No
user-facing feature changes are included in this update.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Claude Opus 5.5 <[email protected]>
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.

3 participants