Skip to content

fix(desktop): keep shared-compute consumers admitted (WIP: multi-workspace publishing)#2000

Merged
michaelneale merged 6 commits into
mainfrom
fix/mesh-admission-refresh
Jul 17, 2026
Merged

fix(desktop): keep shared-compute consumers admitted (WIP: multi-workspace publishing)#2000
michaelneale merged 6 commits into
mainfrom
fix/mesh-admission-refresh

Conversation

@michaelneale

@michaelneale michaelneale commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

What

Continuation of #1991 (fix(desktop): keep shared-compute consumers admitted) — same two commits, pushed to an in-repo branch for direct iteration and testing.

  • Heartbeat publishes current status even when sharing is stopped, so consumer-only identities stay within serving nodes' 120s admission freshness window (45s interval → 2 beats per window, test-pinned)
  • 10s timeout on status publishes so a stalled relay can't wedge the heartbeat loop
  • Paginated mesh status queries (until + before_id cursor with stall detection) so admission rosters aren't built from a truncated 100-event status list
  • Status filter scoped by since freshness bound + current-member authors
  • apply_workspace restores MeshLLM sharing before managed agents and republishes status off the command path

Verification

  • cargo fmt / clippy --features mesh-llm clean; 33 mesh unit tests pass (incl. new heartbeat-interval and pagination-cursor tests)
  • just mesh-e2e-admission passes 3/3 on this branch: trusted member admitted + sees routed model; trusted member inference routed over mesh; non-member sees gossip but inference is rejected (allowlist gates membership and inference)
  • Live-tested against a real remote community relay: 45s consumer heartbeats publish successfully and keep the identity fresh; status publish correctly retargets the active workspace relay after apply

Notes

Membership propagation delay on a freshly joined member-gated relay produces transient 403 You must be a relay member status-publish failures until the roster settles; heartbeats recover automatically once membership lands. Unrelated agent-harness issues observed during testing will be filed separately.

matbalez and others added 2 commits July 16, 2026 13:28
Co-authored-by: Mat Balez <60949391+matbalez@users.noreply.github.com>
Signed-off-by: Mat Balez <60949391+matbalez@users.noreply.github.com>
@michaelneale
michaelneale marked this pull request as ready for review July 16, 2026 22:30
@michaelneale
michaelneale requested a review from a team as a code owner July 16, 2026 22:30
Admission previously required a member's mesh status to be fresh (<=120s),
so any member whose app went offline dropped out of every serving node's
allowlist and reappeared on return, triggering a full stop/model-reload/
start of the mesh node each time. On a busy community serving nodes would
churn constantly and freeze the desktop UI during each reload.

Membership is the trust boundary; freshness is a liveness signal:

- owner_ids_from_events ignores status age: the latest valid owner binding
  from each current NIP-43 roster member is admitted regardless of how long
  that member has been offline
- mesh_status_filter drops its since bound so the admission query sees an
  offline member's latest (replaceable) status event
- availability_from_events unchanged: routing still requires fresh status
- revocation unchanged: a member removed from the roster leaves the
  allowlist at the next poll regardless of status freshness

Tests: stale member stays admitted but excluded from routing; fresh
reporter absent from the roster is denied admission.
* origin/main:
  Fix policy receipts for cold-launch invite links (#2005)
  Preserve persistent agent audience order (#1989)
  feat(desktop): create channels in sections (#1996)
  feat(desktop): graduate community rail (#1995)
  chore(release): release Buzz Desktop version 0.4.10 (#1997)
  feat(desktop): onboarding step dots, identity/key page restyle, overflow scroll (#1993)
  chore(desktop): add AppShell.tsx file-size override to unblock main CI (#1992)
  feat: add invite QR and mobile direct join (#1957)
The picker previously surfaced mesh-llm's compiled auto_model_pack
recommendation, which could suggest sub-4B models and reasoning models
that burn hidden thinking tokens under the agent harness.

Replace it with Buzz-curated tiers:
- 64GB+ rated memory: gemma-4-26B-A4B-it (UD-Q4_K_M), resolved via
  mesh-llm's remote catalog (entry synthesized locally)
- below 64GB: Gemma-4-E4B-it-Q4_K_M
Both are non-reasoning instruction models known to survive the harness.

The UI now shows the curated picks above the fold and collapses the
rest of the catalog behind an 'Advanced' toggle, in a scrollable list.
* origin/main:
  chore(release): release Buzz Desktop version 0.4.11 (#2010)
  feat(desktop): allow agents to manage relay profiles (#2009)

@tlongwell-block tlongwell-block left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed at exact head 5f4a420.

Validated the changed catalog picker locally with Playwright (curated recommendations, advanced collapse/expand, and selection), ran the targeted desktop mesh-llm Rust suite (35 passed, 1 ignored), and confirmed required CI is green. No blocking findings.

@michaelneale
michaelneale merged commit 5d77fa5 into main Jul 17, 2026
25 checks passed
@michaelneale
michaelneale deleted the fix/mesh-admission-refresh branch July 17, 2026 02:52
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