Block Buzz Git Updates

A daily update of the Buzz git project

Cadence: Daily
Length: 2 minutes

Subscribe, Combine, Customize

Subscribe to this podcast
?Receive all episodes to this podcast in the apps below or anywhere that supports RSS.
Combine these episodes into your pod
?All episodes from this podcast will be fed into your own.
Sign up to add to your own podcast
Customize this pod with your own sources
?Use this if you want a brand new podcast with its own episodes using different sources.
Sign up to customize this pod

Sources

Episodes

Block Buzz Git Updates August 14: Buzz Fixes Huddles Re-Renders, Presence Traffic and 1,000-Member Channel Cap
Created: August 14th, 2026 - 04:30 PT
Script

Here is today's Block Buzz Git Updates for Friday August 14th. Buzz Desktop has shipped a major performance fix for Huddles, its voice collaboration feature. Today’s merge isolates live speaker-level data from the app-wide Huddle context. Previously, audio level updates arrived 20 times per second, and each one could trigger re-renders across the whole application—even during silence. In a measured one-person huddle, that meant roughly 41 Channel Screen renders per second. The new design confines those rapid updates to the small set of components that actually display audio meters, cutting the observed rendering load dramatically and helping prevent delayed message hydration and stalled thread panels. [1]

Another important desktop change reduces unnecessary relay traffic. Buzz had subscribed to presence heartbeats for every identity available through the relay—about 2,700 events a minute in one live measurement, accounting for more than 70 percent of readable traffic. The desktop now requests presence only for authors attached to actively viewed queries. It carefully keeps the previous subscription alive until a replacement is confirmed, avoiding gaps during changing views or failed relay connections. That should lower bandwidth, parsing, and IPC overhead without weakening the existing REST-based recovery path. [2]

On mobile, Buzz merged a broad interface and responsiveness polish pass today. Profiles gain poster-first animated avatars that users can tap to control; direct-message headers and agent recipient behavior are being aligned more closely with desktop. The update also improves titled sheets, status editing, and batched relay reads for smoother review builds. Separately, a targeted scroll fix lets a new drag immediately interrupt the channel list’s momentum scrolling, including from transparent screen areas. [3]

Yesterday’s infrastructure work also fixed a serious scale boundary for large channels. Relay member rosters were silently capped at 1,000 people, which could hide channels from later members and break their administrative permissions. Buzz now returns complete rosters and chunks database indexing work to safely handle large snapshots. [4]

The broader pattern is efficient scale: Buzz is moving work closer to where it is needed—whether that means rendering only affected UI, subscribing only to relevant identities, or processing every legitimate member in growing communities. Thank you for listening to Block Buzz Git Updates from The Daily FM. See you tomorrow! [5]

Source Evidence
  1. block/buzz: development activity
    ...ce.
    - `HuddleProvider` wraps the entire main app and its context value was an inline object literal — never memoized. Every level tick minted a new context identity, re-rendering **every** `useHuddle()` consumer, including `ChannelScreen` and message rows.
    
    **Measured (A/B, silent one-participant huddle, same channel/state):** ~41 sustained ChannelScreen renders/sec unsuppressed vs ~4/sec with only the speaker-level setState suppressed — the 20 Hz path is ~90% of the load. Receipts: `driver-render-counter-unsuppressed.jsonl` / `-suppressed.jsonl` on the rig, verified independently. The same main-thread churn starves the relay client's 16 ms event-flush timer, which is the delayed/bursty message hydration and thread-panel stalls seen alongside the lag.
    
    ## Fix (minimal, no behavior change for meters)
    
    1. **Split the high-frequency fields** (`micLevel`, `activeSpeakers`...
  2. block/buzz: development activity
    ...able traffic, from approximately 1,300 distinct fleet identities. Most are discarded only after WebSocket, Tauri IPC, and JS parsing.
    
    This change applies normal Nostr author filtering at relay fan-out, before those costs. It deliberately does not introduce a relay digest protocol or client-side event batching; relevant-author traffic should be small after scoping, and the existing signed-delta/REST-TTL model remains intact.
    
    ## Correctness model
    
    - active query observers are the demand source; inactive cached queries retain no authors
    - replacement opens before old closes and is promoted only after EOSE
    - timeout/CLOSED rejects and closes the candidate while preserving the last good subscription
    - rapid A→B→C and A→B→A chur…
    Files: desktop/src/features/presence/hooks.ts (+40/-29), desktop/src/features/presence/lib/presence.test.mjs (+17/-0), desktop/src/features/pres...
  3. block/buzz: development activity
    ..., desktop/src/shared/constants/kinds.ts (+1/-0)
    
    #5401 Polish mobile profiles, DMs, and sheets (merged 2026-08-14)
    ## Summary
    - add poster-first, tap-to-toggle animated avatars on profile surfaces while preserving transparent/static behavior elsewhere
    - align mobile DM headers, membership actions, and invisible agent recipient addressing with established desktop semantics
    - polish titled sheets and status editing, preserve native iOS sheet corners, and batch relay reads to improve review-build responsiveness
    
    ## Snapshots
    
    <table>
      <tr>
        <th>Profile avatar</th>
        <th>Agent DM header and composer</th>
      </tr>
      <tr>
        <td><img src="https://raw.githubusercontent.com/block/buzz/e8de7495451dbe1a393ab43c5e204ca7425f2ba5/pr-5401--profile-avatar.png" width="360" alt="Mobile profile settings with animated avatar surface"></td>
        <td><img src="https://raw.githubuserc...
  4. block/buzz: development activity
    ...truncating at 1,000 members
    - chunk `event_mentions` inserts inside one transaction so large kind `39002` snapshots remain discoverable by every `p` tag
    - add a targeted `buzz-admin reconcile-channels --channel <uuid>` force-republish path for stale discovery snapshots
    - cover a 1,501-member roster, 11,000-tag mention index, and kind `39002` tag construction past member 1,000
    
    ## Why
    
    The relay builds NIP-29 discovery and several authorization decisions from `get_members()`, but that helper silently returned only the first 1,000 active members. Desktop then counted the truncated kind `39002` event, while late members could be rejected by roster-scanning member actions.
    
    Removing the roster cap exposes PostgreSQL's 65,535 bind-parameter ceiling in mention indexing, so the insert is chunked transactionally to preserve all-or-nothing indexing.
    
    The existing reconcilers o...
  5. block/buzz: development activity
    ...), desktop/src/features/home/ui/InboxMessageRow.tsx (+4/-1), desktop/tests/e2e/inbox-edit.spec.ts (+78/-1)
    
    #5681 fix(desktop): enforce agent mention authorization at send boundaries (merged 2026-08-13)
    ## Summary
    - allow channel-member remote/headless agents only with current kind `10100` directory evidence, while stale member identities remain hidden
    - fail closed while managed/relay directories load, error, or background-refetch across channel, forum, and cached autocomplete surfaces
    - revalidate agent mention authorization immediately before normal sends and message-edit saves, including after deferred uploads
    - in owner-only builds, fetch fresh authoritative profile ownership at send time and deny missing, changed-owner, or unavailable proofs
    - preserve human mention tags when agent authorization is revoked or unknown
    
    Supersedes #5536 because its contributor-for...
Sources
    Block Buzz Git Updates August 13: Buzz Hardens Agent Security, Adds Community Deletion and 65K-Token Recovery
    Created: August 13th, 2026 - 04:30 PT
    Script

    Here is today's Block Buzz Git Updates for Thursday August 13th. Buzz hardened its shared-agent catalog today, closing a potentially confusing security gap between what users review and what an agent actually executes. Shared instructions now render as literal text instead of Markdown, so link destinations, hidden image sources, spoiler formatting, and invisible Unicode controls cannot disguise prompt content. The system also verifies Nostr event IDs and signatures before trusting a catalog entry’s publisher, pagination data, or executable instructions. The core principle is straightforward: the prompt users see must be exactly the prompt the agent receives. [1]

    Yesterday, Buzz merged a durable whole-community deletion system for operators. The new `buzz-admin deletions` workflow can inventory, approve, execute, and verify a community-wide removal across PostgreSQL, object storage, Redis, and repository pointers, while retaining a permanent tombstone to prevent accidental cross-tenant deletion. It deliberately stops at a retention-pending state after logical deletion, making final cleanup an explicit operational step rather than an invisible background action. [2]

    Desktop performance also received another substantial round of work yesterday. Buzz can now paint an integrity-checked cached channel sidebar immediately on a cold start, then validate it against the relay in the background. Separate changes defer expensive work when the application regains focus, coalesce large thread-activity writes, and batch agent observer updates. One measured agent-event workload cut store publications by 24 times, reducing unnecessary UI rescans under busy multi-agent activity. [3]

    Agent reliability is expanding as well. Default output capacity doubled to 65,536 tokens, with up to three bounded recovery attempts for truncated responses; incomplete tool calls remain discarded. Buzz also began reporting standard Claude Code and Codex usage metrics, and lets lazily awakened agent pools return to sleep after idle periods instead of permanently holding worker processes. [4]

    The broader trend is defense in depth: Buzz is improving reviewable agent security, lifecycle control, deletion accountability, and responsiveness together. The project is increasingly treating agents, local state, and tenant data as operational systems that must remain observable, bounded, and recoverable under real-world load. Thank you for listening to Block Buzz Git Updates from The Daily FM. See you tomorrow!

    Source Evidence
    1. block/buzz: development activity
      ...ntrols at every agent-definition boundary while preserving legitimate rendered emoji sequences
      - verify shared catalog event IDs and signatures before trusting authorship, coordinates, pagination, or executable content
      - preserve the exact system-prompt bytes between review and execution instead of silently stripping or normalizing content
      
      ## Security rationale
      
      Shared system prompts are executable configuration. Previously, catalog prompts were projected through the chat Markdown renderer, which could hide text, replace link destinations with benign labels, and turn image syntax into remote loads. Zero-width and bidirectional controls could also make reviewed text differ from what the agent executes.
      
      This change establishes a review invariant: the prompt a user sees is the prompt the agent executes. Definitions that cannot be reviewed faithfully are rejected rather...
    2. block/buzz: development activity
      ...perator-controlled V1 for deleting an entire Buzz community without deleting another tenant's data.
      
      The workflow is exposed through `buzz-admin deletions`:
      
      - `sweep` records independent fleet storage-taxonomy observations
      - `submit`, `list`, `inspect`, and `approve` manage a deletion request
      - `unblock` resumes a fail-closed request after an operator records remediation identity and reason
      - `run` and `drain` execute bounded work
      
      Requests advance through a PostgreSQL-backed state machine and stop at `retention_pending` after logical deletion has been independently verified across PostgreSQL, object storage, and Redis.
      
      This PR ships the engine and CLI, not a continuously running worker or Kubernetes packaging. For V1, a cluster/VM administrator invokes `/usr/local/bin/buzz-admin` from the existing relay image, for example with `kubectl exec` or an equivalent contai...
    3. block/buzz: development activity
      ...server hash as one integrity-checked snapshot
      - paint the snapshot immediately on cold boot, then revalidate with `knownHash`
      - fail slow-never-wrong: malformed/legacy/partial snapshots and mismatched not-modified responses force an unhashed full fetch
      - add sidebar boot diagnostics and deterministic unit/E2E coverage for boot, identity/relay isolation, partial writes, mismatch fallback, and community switches
      
      ## Safety invariants
      
      - channel list and hash are serialized in one localStorage document and replaced together
      - snapshot ownership is scoped to normalized relay URL plus identity pubkey
      - a not-modified response is accepted only when its hash exactly matches the hash describing the available list
      - any missing or impossible hash/list pairing retries `getChannels(null)` before replacing persistence
      
      ## Validation
      
      At exact commit `19ca25d23c434cc0b8893a93691a...
    4. block/buzz: development activity
      ...ing agents have more room to finish useful work instead of terminating after repeated 32,768-token reasoning-only responses.
      
      - Raise `BUZZ_AGENT_MAX_OUTPUT_TOKENS` from 32,768 to 65,536
      - Raise the finite output-truncation recovery allowance from 2 to 3 via `BUZZ_AGENT_MAX_TOKEN_RECOVERIES`; `0` still disables recovery
      - Strengthen the recovery prompt so the model stops prolonged reasoning, uses tools immediately, and builds scripts or artifacts in small verifiable steps
      - Preserve the safety invariant that incomplete truncated tool calls are discarded and never executed
      - Keep proactive handoff independently at 90% of `BUZZ_AGENT_MAX_CONTEXT_TOKENS` (180,000 tokens with the 200,000 default), regardless of the output allowance
      - Add request-loop and configuration regressions for exact-N recovery, disabled recovery, successful tool-first recovery, discarded truncated...
    Sources
      Block Buzz Git Updates August 12: Buzz Desktop 0.5.10 Fixes 20-Second Stalls, Upgrades MeshLLM
      Created: August 12th, 2026 - 04:30 PT
      Script

      Here is today's Block Buzz Git Updates for Wednesday August 12th. Buzz Desktop 0.5.10 entered its controlled release process today, with publication tied to an immutable, independently reviewed candidate rather than later changes on the main branch. The release is especially significant because it bundles a concentrated response to the performance regressions users reported after version 0.5.9. [1]

      Yesterday’s fixes target several additive causes of multi-second stalls when returning to the app, switching channels, or clicking into the composer. Buzz had begun refetching many queries simultaneously whenever the window regained focus. The team now applies a five-minute freshness window across those query families, so recent data is served from cache instead of creating a refetch storm precisely as a user resumes work. It also speeds up the expensive channel lookup path, coalesces frequent read-state writes to local storage, and restores timeline virtualization on initial loads. In the worst case, large channels had been retaining every loaded message in memory, consuming gigabytes and blocking the interface for more than 20 seconds. [2]

      The release also includes practical desktop improvements. Search now uses a shared scope model for Command-K and in-channel Command-F, with removable channel or direct-message scopes, fuzzy matching, and up to 40 scrollable results. Users can also share eligible messages from a thread into its parent channel, preserving a link back to the original discussion. On macOS, the attachment picker should work reliably after a file-selection cancel, while HTML files are allowed only as inert downloads. [3]

      On infrastructure, Buzz upgraded MeshLLM to version 0.75.1. That lets the virtual mesh model degrade gracefully to a single available model and avoids startup failures from stale runtime-cache entries. Crucially, the upgrade removes the retired dependency that required a narrowly scoped security advisory exception earlier this week. [4]

      Finally, relay reliability and observability improved: reactions on project issues or pull requests no longer panic an ingest worker and block queued publishes, while new PostgreSQL tracing spans should make database latency easier to diagnose without exposing tenant data. [5]

      The trend is clear: 0.5.10 is a stabilization release focused on responsiveness, resilient infrastructure, and better operational visibility. Thank you for listening to Block Buzz Git Updates from The Daily FM. See you tomorrow!

      Source Evidence
      1. block/buzz: development activity
        Repository block/buzz (https://github.com/block/buzz) — development activity since 2026-08-11.
        
        Merged pull requests (15):
        
        #5613 chore(release): release Buzz Desktop version 0.5.10 (merged 2026-08-12)
        ## Buzz Desktop release v0.5.10
        
        - **Frozen main:** `f35930104bcbdb1332ff13735214ecb9fce1fc7b`
        - **Reviewed candidate:** `1fb49103002e898607a7f6fd554cb51e94d92e08`
        - **Previous desktop release:** `desktop-v0.5.9`
        - **Proposed immutable tag:** `desktop-v0.5.10`
        
        This PR may be **squash merged** after the Desktop Release Candidate check and all protected-branch checks pass. Merging authorizes publication of the exact reviewed candidate; later or unrelated changes on `main` cannot alter it.
        
        The checked-in changelog accounts for every non-merge commit in the release range. The Desktop tag points to the reviewed candidate co...
      2. block/buzz: development activity
        ...-0.5.9) was confirmed to resolve it, isolating the regression to that range. Profiling a live production renderer plus a commit-level audit of the range found three independent, additive causes — fixed here — plus a long-standing `get_channels` cost that made every remaining refetch expensive, also addressed here.
        
        ## 1. Focus-return refetch storm (`refetchOnWindowFocus`)
        
        #5490 wired TanStack's `focusManager` to app focus and flipped ~20 query sites to `refetchOnWindowFocus: true`. A focus return after >60s away fires them all within milliseconds — and a click into an unfocused window *is* a focus return, so the burst runs before the click is processed. That is the "click into the composer, wait 5 seconds" symptom, and it also explains why mouse input feels worse than keyboard (clicks arrive with focus transitions; typing happens while already focused). A 5-second `s...
      3. block/buzz: development activity
        ...cope
        - add conservative fuzzy matching for people and channels while preserving exact-match ordering
        - make scoped message search complete for one-character queries and expose up to 40 scrollable results
        - keep the pre-scope channel or DM action in the normal results flow so it scrolls away with the list
        
        ## Validation
        
        - desktop TypeScript typecheck
        - desktop text-size and file-size guards
        - focused fuzzy-search unit tests (24 passed)
        - focused search Playwright coverage (7 passed), including channel and DM copy, one-character results/no-results, 40-result scrolling, and the non-sticky scope action
        - desktop E2E build
        - visual review of channel, scoped, expanded-results, and DM states
        Files: desktop/playwright.config.ts (+1/-0), desktop/src/app/AppShell.tsx (+22/-66), desktop/src/app/useAppShellKeyboardShortcuts.ts (+88/-0), desktop/src/features/channels/lib/channelS...
      4. block/buzz: development activity
        ...e/focusRefetchPolicy.test.mjs (+90/-0), desktop/src/features/home/hooks.ts (+9/-2)
        
        #5289 chore: mesh upgrade, clean up legacy special case code, simplify model selection for mesh (merged 2026-08-11)
        Shared compute now has exactly two model choices: MeshLLM's virtual `mesh`
        model, or a model you name. Buzz picks between them in one place, and
        buzz-agent no longer knows meshes exist.
        
        ## What changed
        
        - **MeshLLM v0.74.0 → v0.75.1.** v0.75.0 added `degrade_to_single_model`, so a
          `model=mesh` request is answered by one served model when there is no
          committee to form, instead of failing. v0.75.1 adds Mesh-LLM#1196, which
          skips stale pre-0.75 runtime cache entries rather than aborting startup on
          them — without it, anyone who had run mesh on 0.73/0.74 could not start.
        - **Deleted the client-side mesh catalog probe.** buzz-agent used to poll
          `/v1/models` (5s TTL,...
      5. block/buzz: development activity
        ...were indistinguishable from real messages (kind 9). Every agent turn produced
        accepted:true lines whether or not a message was actually sent, which twice
        led debuggers to conclude a silent agent had published successfully.
        
        Add kind to the Ok outcome and the tracing::info line so the publish path is
        self-describing without a database query.
        
        Closes #4676
        Files: crates/buzz-relay/src/api/bridge.rs (+4/-1)
        
        #3678 feat(tracing): add PostgreSQL tracing spans (merged 2026-08-11)
        ## Why
        Expose PostgreSQL datastore latency within existing request traces so slow logical database operations can be identified without recording tenant data or query arguments.
        
        ## What
        - Add client spans around logical PostgreSQL operations across the database facade, search, audit, replica fencing, and command persistence
        - Use a dedicated `buzz_datastore` target and `db.system.name = "postgres...
      Sources
        Block Buzz Git Updates August 11: Buzz 0.5.9 Fixes Privacy Previews, Cuts Hidden CPU 28%
        Created: August 11th, 2026 - 04:30 PT
        Script

        Here is today's Block Buzz Git Updates for Tuesday August 11th. Buzz has tightened up its new privacy-minded link-preview system with two fixes merged today. First, previews now reliably survive when a message is sent just as its metadata or media finishes resolving. Previously, a quick press of Enter—or an automatically sent confirmed draft—could race the preview process, causing the card to disappear, attach stale information, or consume an auto-send without actually sending. The composer now briefly blocks submission while a supported preview settles, with a two-second escape hatch that still lets users send a bare link if resolution stalls. Failed image uploads degrade cleanly to the remaining media or text instead of leaving a spinning card. [1]

        Second, Buzz’s own repository, issue, and pull-request links regain compact metadata cards for recipients. Those cards are resolved only against the active trusted relay and use signed repository identity, avoiding external image fetches or recipient-side web lookups. That preserves the privacy model introduced last week while restoring useful context for links shared by people, agents, or the CLI. [2]

        Yesterday’s desktop performance work addressed a substantial background-resource problem. The renderer had continued polling, animating timers, and refreshing queries at nearly the same rate when the app was hidden as when it was visible. Buzz now pauses local UI timers when hidden and gates network polling on both visibility and application focus. The reported baseline showed roughly 28 percent renderer CPU even while hidden, so this should materially reduce wasted power and fan activity for users who leave the app open. [3]

        Storage maintenance also received attention yesterday. Nine previously unbounded localStorage stores now have explicit size caps, while disposable caches get a 14-day time-based cleanup sweep. The design preserves essential offline identity data and avoids deleting entries whose age cannot be trusted. [4]

        Finally, Buzz Desktop version 0.5.9 entered its controlled release process yesterday, again tied to an immutable reviewed candidate. The emerging pattern is clear: Buzz is maturing the foundations around its newer collaboration features—privacy-preserving previews, lower idle resource use, and predictable local-state management—rather than simply shipping surface-level additions. Thank you for listening to Block Buzz Git Updates from The Daily FM. See you tomorrow! [5]

        Source Evidence
        1. block/buzz: development activity
          ...ct:** Link previews no longer disappear when a message is sent while preview metadata or media is still settling. Fast Enter, rapid Enter, and confirmed-draft auto-send now preserve the preview without duplicate sends or stale tags.
          
          **Problem:** The composer could look ready before its sender-authored snapshot tag existed. Send paths could then race preview resolution/upload, while debounced preview state could attach a tag for a URL that had already been removed. The same timing also caused confirmed-draft auto-send to be consumed without sending.
          
          **Solution:**
          - Debounce preview resolution to avoid card flicker while typing, then disable every submit path while a supported external preview settles. A 2-second escape cap still permits a bare-link send if resolution stalls.
          - Keep submit synchronous: acquire a composer-local lock before asynchronous send work, read...
        2. block/buzz: development activity
          ...op/tests/e2e/messaging.spec.ts (+507/-71), desktop/tests/helpers/bridge.ts (+7/-0)
          
          #5494 fix(link-preview): restore Buzz entity link cards (merged 2026-08-11)
          **Category:** fix
          **User Impact:** Buzz pull request, issue, and repository links now show compact, useful metadata cards in received messages, including messages sent by agents and the CLI.
          
          **Problem:** Sender-authored snapshots protect recipients from external preview fetches, but that change also removed recipient-side cards for trusted Buzz entity links when the sender did not attach snapshots.
          
          **Solution:** Resolve recognized Buzz entities only against the active relay and show signed repository identity, title, and compact builder context with the current inline Buzz mark in the favicon slot, but without avatars, thumbnails, or external image fetches. Entity metadata wins over conflicting sender snapsho...
        3. block/buzz: development activity
          ...r polling while hidden (#3677) (merged 2026-08-10)
          Fixes #3677.
          
          ## Problem
          
          The renderer never quiesces: recurring timers, query polling, and re-render tickers run at full rate whether the window is visible, hidden, or minimized. Measured on a live installed app: **27.5% mean renderer CPU visible vs 28.7% hidden** (60×1s `ps` samples of the WebContent process; `sample(1)` dominated by `WebCore::timerFired`/ThreadTimers, microtask checkpoints, JSON parsing, style matching). Matches all three reproductions in #3677 (macOS prerelease, Linux/WebKitGTK A/B/A minimize test, stable macOS).
          
          Per-timer instrumentation (dev build, wrapped `setInterval`/`setTimeout`/rAF) attributed the recurring work: `useNow` 60 fires/min, 40 active TanStack refetch intervals, agent-turn pruning 12/min, auto-restart ticks, huddle/reminder polls — none visibility-gated.
          
          ## Fix (two-tier gating...
        4. block/buzz: development activity
          ...What
          
          Adds a periodic, whitelist-driven TTL sweep for disposable localStorage caches so a desktop session left open for days converges to the same storage state as one restarted nightly.
          
          - New `desktop/src/shared/lib/localStorageSweep.ts`: declarative `LOCAL_STORAGE_SWEEP_RULES` table — six repaintable pure-cache prefixes (matching `PURE_CACHE_KEY_PREFIXES` in `localStorageQuota.ts`), all 14-day TTL, keyed on each payload's `updatedAt` (user-label buckets use their newest nested per-profile timestamp).
          - Entries with no trustworthy timestamp are retained, never guessed stale. `buzz-self-profile.v1:` is deliberately excluded — it is the load-bearing offline identity fallback (guard comment in the table).
          - Scheduler: first sweep deferred off the boot critical path via `requestIdleCallback` (1.5s timeout) with a 250ms timer fallback, then hourly and on return-to-visibl...
        5. block/buzz: development activity
          ...(+253/-1), desktop/src/shared/lib/useResolvedLinkPreviews.ts (+151/-38), desktop/src/shared/ui/compact-link-preview-attachment.tsx (+17/-3), desktop/src/shared/ui/markdown.tsx (+8/-14), desktop/src/shared/ui/markdown/useMessageLinkPreviews.test.mjs (+64/-0), desktop/src/shared/ui/markdown/useMessageLinkPreviews.ts (+102/-0), desktop/tests/e2e/entity-link-recipient-cards.spec.ts (+167/-0)
          
          #5521 chore(release): release Buzz Desktop version 0.5.9 (merged 2026-08-10)
          ## Buzz Desktop release v0.5.9
          
          - **Frozen main:** `f8f2ef0440e7a074223ec04dc3b32d817b8b9d9b`
          - **Reviewed candidate:** `ee33722615ca1e7b8efb03e2ed641d99448c8899`
          - **Previous desktop release:** `desktop-v0.5.8`
          - **Proposed immutable tag:** `desktop-v0.5.9`
          
          This PR may be **squash merged** after the Desktop Release Candidate check and all protected-branch checks pass. Merging authorizes publication of the...
        Sources
          Block Buzz Git Updates August 10: Buzz Flags Retired nostr-relay-pool as MeshLLM Migration Looms
          Created: August 10th, 2026 - 04:30 PT
          Script

          Here is today's Block Buzz Git Updates for Monday August 10th. Yesterday’s most important change was a narrowly scoped security-policy exception for a retired Rust crate in Buzz’s dependency tree. The affected package, nostr-relay-pool, has no patched release because its functionality was absorbed into newer versions of nostr-sdk. Buzz inherits the old crate indirectly through the pinned MeshLLM library. Rather than disable advisory checks broadly, the team added a documented allow rule for this one informational RustSec advisory, while retaining every other dependency policy and security check. [1]

          That is a pragmatic short-term fix, not a declaration that the dependency is safe forever. A direct upgrade to the newer nostr-sdk removed the retired crate, but triggered thirteen MeshLLM API compilation errors. The durable solution is therefore an upstream MeshLLM migration, and Buzz has explicitly recorded that the exception must be removed once that work lands. The security check is restored without changing runtime behavior or loosening the wider supply-chain gate. [2]

          The desktop team also fixed a regression in the Welcome-channel onboarding experience. Dismissing the Welcome composer banner now removes the complete guidance layer, rather than leaving an invisible or orphaned interface element behind. More importantly, that dismissal persists while a user moves between Buzz’s private and starter Welcome channels, as long as they are using the same identity. The update addresses deterministic end-to-end failures introduced by recent onboarding work, and the focused tests passed six out of six repeated runs alongside a full desktop unit suite of more than 4,500 tests. [3]

          Finally, yesterday brought a substantial maintenance sweep: eleven merged pull requests, mostly automated patch upgrades across React, Vite, TanStack virtualization, and Rust dependencies. Among the more relevant fixes, async-compression now includes a repair for hangs while decoding a corrupt follow-on zstd frame, and the diffy update improves merge-conflict marker formatting at the end of files. [4]

          The broader signal is disciplined hardening. Buzz is favoring tightly bounded exceptions, repeatable end-to-end validation, and steady dependency maintenance—work that is less visible than new features, but essential for a dependable desktop collaboration and agent platform. Thank you for listening to Block Buzz Git Updates from The Daily FM. See you tomorrow! [5]

          Source Evidence
          1. block/buzz: development activity
            ...ired relay pool advisory (merged 2026-08-09)
            ## Summary
            
            - temporarily allow the informational `RUSTSEC-2026-0243` advisory for the retired `nostr-relay-pool` crate
            - document the exact MeshLLM → `nostr-sdk 0.44.1` transitive path and removal condition
            - keep every other advisory and the global dependency policy enforced
            
            ## Why an exception
            
            RustSec provides no patched `nostr-relay-pool` release because the standalone crate was absorbed into `nostr-sdk >= 0.45`. Buzz inherits it through pinned MeshLLM v0.74. A direct test bump to `nostr-sdk 0.45.1` removed the retired crate but produced 13 MeshLLM API compilation errors, so the durable fix requires an upstream source migration rather than a lockfile update.
            
            This narrow exception restores the required Security check while that migration is completed. It must be removed once MeshLLM adopts `nostr-sdk >= 0.45`.
            
            ## Val...
          2. block/buzz: development activity
            ...z inherits it through pinned MeshLLM v0.74. A direct test bump to `nostr-sdk 0.45.1` removed the retired crate but produced 13 MeshLLM API compilation errors, so the durable fix requires an upstream source migration rather than a lockfile update.
            
            This narrow exception restores the required Security check while that migration is completed. It must be removed once MeshLLM adopts `nostr-sdk >= 0.45`.
            
            ## Validation
            
            - `bin/cargo-deny --locked check --config deny.toml advisories`
            - `bin/cargo-deny --locked check`
            - `git diff --check origin/main...HEAD`
            - mandatory pre-push Rust and desktop/Tauri checks
            
            ## Scope
            
            One four-line `deny.toml` addition. No Rust source, lockfile, runtime, or release behavior changes.
            Files: deny.toml (+4/-0)
            
            #4439 chore(deps): update dependency @tanstack/react-virtual to v3.14.9 (merged 2026-08-09)
            This PR contains the following updates:
            
            | P...
          3. block/buzz: development activity
            ...nted, but `welcome-composer-guidance-layer` remained
            - the re-entry test expected case-sensitive `Welcome` while navigating to `welcome-everyone`
            
            The state hook also scoped completion to channel IDs while `ChannelPane` remounts during navigation. The Welcome guidance is one experience spanning both Welcome channels, so completion now survives that remount while remaining identity-scoped.
            
            ## Validation
            
            At `b577eb42edffe889f63566f2457eacea720f3593`:
            
            - `pnpm -C desktop typecheck`
            - focused Biome check for all four changed files
            - E2E build
            - both `welcome-everywhere banner` integration tests repeated three times: **6/6 passed**
            - mandatory pre-push desktop check, typecheck, and full desktop unit suite: **4,535 passed**
            - `git diff --check`
            Files: desktop/src/features/channels/ui/ChannelPane.tsx (+5/-1), desktop/src/features/channels/ui/WelcomeComposerBanner.tsx (+4/-...
          4. block/buzz: development activity
            ...ullus157/async-compression) | dependencies | patch | `0.4.42` → `0.4.43` |
            
            ---
            
            > [!WARNING]
            > Some dependencies could not be looked up. Check the [Dependency Dashboard](../issues/1) for more information.
            
            ---
            
            ### Release Notes
            
            <details>
            <summary>Nullus157/async-compression (async-compression)</summary>
            
            ### [`v0.4.43`](https://redirect.github.com/Nullus157/async-compression/releases/tag/async-compression-v0.4.43)
            
            [Compare Source](https://redirect.github.com/Nullus157/async-compression/compare/async-compression-v0.4.42...async-compression-v0.4.43)
            
            ##### Other
            
            - Fix hang when decoding a corrupt subsequent zstd frame ([#&#8203;470](https://redirect.github.com/Nullus157/async-compression/pull/470))
            
            </details>
            
            ---
            
            ### Configuration
            
            📅 **Schedule**: (UTC)
            
            - Branch creation
              - Between 12:00 AM and 03:59 AM, only on Monday (`* 0-3 * * 1`)
            - Automerge
              - At any t...
          5. block/buzz: development activity
            ...exception restores the required Security check while that migration is completed. It must be removed once MeshLLM adopts `nostr-sdk >= 0.45`.
            
            ## Validation
            
            - `bin/cargo-deny --locked check --config deny.toml advisories`
            - `bin/cargo-deny --locked check`
            - `git diff --check origin/main...HEAD`
            - mandatory pre-push Rust and desktop/Tauri checks
            
            ## Scope
            
            One four-line `deny.toml` addition. No Rust source, lockfile, runtime, or release behavior changes.
            Files: deny.toml (+4/-0)
            
            #4439 chore(deps): update dependency @tanstack/react-virtual to v3.14.9 (merged 2026-08-09)
            This PR contains the following updates:
            
            | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
            |---|---|---|---|
            | [@tanstack/react-virtual](https://tanstack.com/virtual) ([source](https://redirect.github.com/TanStack...
          Sources
            Block Buzz Git Updates August 9: Buzz Desktop 0.5.8 Enters Release as Relay 0.2.1 Launches
            Created: August 9th, 2026 - 04:30 PT
            Script

            Here is today's Block Buzz Git Updates for Sunday August 9th. Yesterday’s most consequential work improves how Buzz agents handle unreliable AI providers. The agent runtime now retries when a provider returns an HTTP-success response whose JSON body is truncated or malformed. Previously, that unusual but real upstream failure could end an entire agent turn immediately, even though the retry system already handled timeouts, rate limits, server errors, and interrupted streams. The new path uses the same bounded retries and backoff, while preserving the safeguard that a retry cannot replay a tool call. [1]

            A related benchmark fix addresses text-only models that reject image-bearing conversation history. Buzz now recognizes both 400-style and 404-style “not multimodal” errors, strips unsupported image inputs into an explanatory placeholder, and lets the conversation proceed. The team also removes a 32-round ceiling from benchmark agent trials, relying on the existing wall-clock budget instead. That should prevent thinking-heavy models from being stopped mid-task simply because their responses rotate frequently. [2]

            On the product side, Buzz Desktop version 0.5.8 entered the release process yesterday. As with recent desktop releases, publication is tied to a specifically reviewed immutable candidate rather than whatever code lands later on the main branch. The accompanying work includes two useful interface repairs: the Welcome-channel composer guidance banner now occupies normal layout space instead of covering the latest message, and users can dismiss it manually. Separately, the Prompt Context modal now wraps long IDs and JSON fragments rather than clipping content at the dialog edge. [3]

            Buzz Relay version 0.2.1 was also released. Its changelog packages recent capabilities including rich message link previews, private managed-agent event ingestion, authenticated media reads, phone-assisted desktop identity recovery, and lifecycle testing for relay-driven mesh inference. Much of that functionality was developed earlier, but yesterday’s release makes it a coherent Relay version. [4]

            The broader trend is operational resilience. Buzz is not only adding collaboration and agent features; it is focusing on the awkward real-world edges—partial provider responses, incompatible modalities, benchmark limits, layout overflow, and controlled releases—that determine whether those features remain dependable in daily use. Thank you for listening to Block Buzz Git Updates from The Daily FM. See you tomorrow!

            Source Evidence
            1. block/buzz: development activity
              ...plete body was the one transient upstream fault that fell through to terminal.
              
              ## Fix
              
              In both `post()` and `openrouter_post()` (`crates/buzz-agent/src/llm.rs`): when the fully-received success body fails `serde_json::from_slice`, `continue` the **existing** retry loop instead of returning terminal — same `MAX_RETRIES` (3) bound, same `backoff_with_jitter`. On exhaustion, the error goes through `terminal_llm_error` so it carries cumulative duration + attempt count like every other retried failure (previously the `json:` error carried neither).
              
              `post_anthropic` routes through `post()`, so Anthropic/OpenAI/Databricks/mesh and OpenRouter are all covered.
              
              ## Why this cannot re-run a tool call
              
              Hard requirement: tool calls are not idempotent, and this change must not introduce any pos…
              Files: crates/buzz-agent/src/llm.rs (+283/-3)
              
              #5330 fix(desktop): welcome banner ove...
            2. block/buzz: development activity
              ...i.conf.json (+1/-1)
              
              #5318 fix(buzz-agent): recover from 400-shaped image rejections; unbound benchmark agent rounds (merged 2026-08-08)
              ## Problem
              
              Two failure modes from the `tb21-glm52-crusoe-1` benchmark run (GLM-5.2 solo, TB2.1) wedged or killed 13 of 89 trials without the model being at fault:
              
              1. **Conversation poisoning on text-only endpoints.** Crusoe's serverless `crusoeai/GLM-5.2-NVFP4` rejects any request whose history contains an image with `400: ... is not a multimodal model`. The recovery machinery for exactly this case already exists — `AgentError::UnsupportedImageInput` → `replace_unsupported_images()` strips the image blocks, marks the tool result as an error, substitutes a text placeholder, and continues the turn. But classification only matched OpenRouter's 404 body (`no endpoints found that support image input`) and was only consulted on the 404 a...
            3. block/buzz: development activity
              ...`6a17d035f79ad582ca3f4f3cdc38d376f2c4087f`
              - **Reviewed candidate:** `f3de860574bb3119018b4592353e9761635aeb07`
              - **Previous desktop release:** `desktop-v0.5.7`
              - **Proposed immutable tag:** `desktop-v0.5.8`
              
              This PR may be **squash merged** after the Desktop Release Candidate check and all protected-branch checks pass. Merging authorizes publication of the exact reviewed candidate; later or unrelated changes on `main` cannot alter it.
              
              The checked-in changelog accounts for every non-merge commit in the release range. The Desktop tag points to the reviewed candidate commit, not the later squash commit. Publication remains bound to that immutable candidate tag.
              Files: .release/desktop-candidate.json (+7/-7), CHANGELOG.md (+14/-0), desktop/package.json (+1/-1), desktop/src-tauri/Cargo.lock (+1/-1), desktop/src-tauri/Cargo.toml (+1/-1), desktop/src-tauri/tauri.conf.json...
            4. block/buzz: development activity
              ...b200a3382a91ec253f530b44dfda5f55))
              - feat(relay): accept kind:30179 private managed-agent events at ingest ([#5133](https://github.com/block/buzz/pull/5133)) ([`ad923353a2`](https://github.com/block/buzz/commit/ad923353a24b784df13a7c88757d6b24ebe36299))
              - fix(media): require authenticated reads ([#4610](https://github.com/block/buzz/pull/4610)) ([`769ac70b74`](https://github.com/block/buzz/commit/769ac70b741e3ad6809bff14eba29d3dd2cbd318))
              - feat(identity): recover desktop identity from a signed-in phone ([#4845](https://github.com/block/buzz/pull/4845)) ([`6eb65919f1`](https://github.com/block/buzz/commit/6eb65919f1eabd46b3850c15eefab31092dd500b))
              - ci: prove the relay-driven mesh lifecycle — discover, join, infer, deny — with real nodes ([#3862](https://github.com/block/buzz/pull/3862)) ([`38bf642fcf`](https://github.com/block/buzz/commit/38bf642fcfa7a9fc1e06d6cf87d6...
            Sources
              Block Buzz Git Updates August 8: Buzz Adds Private Link Previews, Fixes Claude Agent Stalls
              Created: August 8th, 2026 - 04:30 PT
              Script

              Here is today's Block Buzz Git Updates for Saturday August 8th. Yesterday’s biggest desktop-facing change is rich link previews in Buzz messages. Previews are resolved only by the sender while composing, then sent as validated snapshots alongside the message. That means recipients see useful titles, descriptions, and media context without their client visiting the linked website—a privacy-conscious design that also avoids recipient-side tracking. The composer now keeps pasted links responsive, does not delay sending for unresolved previews, and removes failed or timed-out preview cards rather than leaving clutter behind. [1]

              Agent reliability received an important pair of fixes. Buzz now treats a provider’s max-token cutoff as an interrupted response, continuing the same turn up to two times rather than ending abruptly. It also discards incomplete tool calls from truncated output, preventing malformed arguments from being executed or replayed. Separately, handoff summaries now get a dedicated reasoning-token budget. This directly addresses cases where reasoning models spent their entire output allowance thinking, returned no usable summary text, and forced lossy conversation-history truncation. A related issue documenting long Claude-agent stalls after max-token truncation was closed this morning, suggesting the team has quickly connected observed production behavior to concrete recovery work. [2]

              Desktop’s agent experience is also being consolidated. Creating a new agent, browsing the catalog, and importing a snapshot now live behind one persistent Add Agent dialog rather than scattered dropdowns and separate windows. Existing-agent onboarding was repaired too: people importing a key or recovering an identity can once again skip harness and model setup instead of becoming stuck on those screens. [3]

              The release train is moving as well. Buzz Desktop 0.5.7 entered its controlled release process yesterday, tied to an immutable reviewed candidate tag. It follows 0.5.6 with fixes for CSP-related emoji-picker styling and mention-completion cursor behavior, plus an update that corrects Linux AppImage icon packaging. [4]

              One quieter but meaningful infrastructure change binds local development services to loopback by default, preventing PostgreSQL, Redis, MinIO, Keycloak, and monitoring ports from accidentally being exposed on a remote machine’s public network. The trend is clear: Buzz is pairing feature growth with stronger privacy defaults and resilient failure recovery. Thank you for listening to Block Buzz Git Updates from The Daily FM. See you tomorrow! [5]

              Source Evidence
              1. block/buzz: development activity
                ...**Solution:** Paint pasted links before starting cold resolver work, resolve only in the sender's composer, attach only complete validated snapshots at Send, and render authored snapshots without recipient fallback fetching.
                
                ## Behavior
                
                - **Cold paste stays responsive:** bare and angle-bracket URL paste paths commit the visible link before resolver work begins.
                - **Sender-only fetching:** metadata is resolved while composing; recipients render only the sender-authored snapshot.
                - **Send never waits:** pending, failed, invalid, and unsendable previews are omitted. They do not block or cancel the message.
                - **Terminal misses disappear:** failed, timed-out, or 404 resolver results remove the composer card while preserving visible link text.
                - **Display-text links work:** Markdown links such as `[review the pull request](…)` produce and send the same snapshots as bare U...
              2. block/buzz: development activity
                ...**
                Add a regression test that imports an existing key, reaches harness setup, clicks **Skip for now**, and asserts onboardi…
                Files: desktop/src/features/onboarding/machineOnboarding.ts (+5/-0), desktop/tests/e2e/onboarding.spec.ts (+26/-0)
                
                #5223 Recover from max-token response truncation (merged 2026-08-07)
                ## Summary
                
                - treat provider `max_tokens` as an interrupted assistant response and continue the same turn with actionable feedback
                - discard tool calls from truncated responses, including malformed partial arguments, so they are neither executed nor replayed with invalid tool-result pairing
                - bound recovery to two retries while preserving normal finite `max_rounds` accounting
                
                ## Verification
                
                - `cargo fmt --all -- --check`
                - `cargo test -p buzz-agent` (422 unit tests plus all package integration/doc suites passed)
                - `cargo clippy -p buzz-agent --all-targets -- -D...
              3. block/buzz: development activity
                ...by importing an existing key or recovering from a phone can now use "Skip for now" (and Next) on the harness setup and model config steps, instead of getting stuck.
                
                **Problem:** On the "Set up your agent harnesses" and "Configure your default model settings" onboarding steps, clicking **Skip for now** — or **Next** — did nothing for anyone who reached those steps by importing an existing key or recovering an identity from a phone. The app stayed frozen on the step.
                
                **Solution:** The onboarding state machine sets `continuingPubkeyRef` to the current pubkey on import/recovery to keep the flow on `onboarding` until setup finishes (added in #4845). But `complete()` never cleared that ref, so once it matched the current pubkey the stage stayed pinned to `onboarding` forever — completion could never win. `complete()` now clears the ref so finishing/skipping actually settl...
              4. block/buzz: development activity
                ...st's public IPv4 and IPv6 addresses while remaining available on loopback
                
                Origin: `buzz://message?channel=199eb7bc-3feb-484f-ae0e-4995123721ea&id=1c5bc387e86e21bb31677f56e1c862d4d9a17943bce91f8d93e825d029ce7f72`
                Files: docker-compose.yml (+7/-7)
                
                #5252 chore(release): release Buzz Desktop version 0.5.7 (merged 2026-08-07)
                ## Buzz Desktop release v0.5.7
                
                - **Frozen main:** `74b913cff8512c015dc6f1a7473b253fa803f954`
                - **Reviewed candidate:** `f167818d25dd9f03115ab907a16f07daee2ece5c`
                - **Previous desktop release:** `desktop-v0.5.6`
                - **Proposed immutable tag:** `desktop-v0.5.7`
                
                This PR may be **squash merged** after the Desktop Release Candidate check and all protected-branch checks pass. Merging authorizes publication of the exact reviewed candidate; later or unrelated changes on `main` cannot alter it.
                
                The checked-in changelog accounts for every non-merge commit in...
              5. block/buzz: development activity
                ...ocker publishes a host port on every interface when no host address is specified. Running the development stack on a remote workstation or VPS therefore exposes its infrastructure services to that machine's public networks. Loopback bindings retain host-local development access and Docker's internal `buzz-net` connectivity without making those services Internet-reachable.
                
                ## Impact
                
                Local workflows continue using the same ports. Deliberate remote administration now requires an SSH tunnel or another trusted private-network path.
                
                ## Validation
                
                - `docker compose -f docker-compose.yml config --quiet`
                - Recreated the six affected services with their existing named volumes and Docker network
                - PostgreSQL remained healthy and retained all 54 application tables
                - Redis, MinIO, and Prometheus health checks passed
                - All affected ports were closed on the host's public IPv4 an...
              Sources
                Block Buzz Git Updates August 7: Buzz Locks Media Access, Adds Private Agent Configs
                Created: August 7th, 2026 - 04:30 PT
                Script

                Here is today's Block Buzz Git Updates for Friday August 7th. Today’s most important change tightens media privacy across Buzz. Every media GET and HEAD request now requires a valid signed Blossom authorization and current relay membership; the old anonymous compatibility path is gone, and Desktop now sends the needed authorization on reads. That closes anonymous access and prevents former relay members from retrieving media. One limitation remains: media is not yet bound to its originating channel, so a user removed from a private channel could still access a known blob while they remain a relay member. Still, this is a substantial step toward enforcing media access rather than merely obscuring it. [1]

                The relay also now accepts private managed-agent configuration events, using kind 30179. These events are authenticated with UsersWrite scope and treated as owner-global data rather than channel-scoped data—even if they carry a stray channel tag. The supporting privacy gates were already in place, meaning only the author can read the configuration back. This clears an important relay-side path for private agent management without exposing those settings through ordinary event retrieval. [2]

                In agent reliability work, Buzz fixed a benchmark-launch failure caused by task text containing at-sign tokens. The command-line mention resolver could mistake content such as a Vim macro’s “@a” for a user mention, then reject the entire task before an agent saw it. The benchmark harness now explicitly supplies the orchestrator’s public key as the target mention, leaving at-signs inside the untrusted task text inert. That should eliminate a class of silently zeroed benchmark trials. [3]

                Desktop polish continues as well. Agent cards now prefer the concrete running agent’s profile avatar over a potentially stale definition avatar, while catalog listings retain the publisher’s relay-provided presentation rather than being repainted by local edits. And during identity-key creation, onboarding keeps Back available while showing Next as disabled until the key is ready. [4]

                The shared theme is authoritative identity and access: signed reads for media, owner-scoped private agent settings, explicit public-key delivery for tasks, and UI that presents the identity users are actually interacting with. Thank you for listening to Block Buzz Git Updates from The Daily FM. See you tomorrow! [5]

                Source Evidence
                1. block/buzz: development activity
                  ...valid signed Blossom authorization request and current relay membership for every media GET and HEAD request. It removes the unauthenticated compatibility path and updates desktop reads to send the required authorization.
                  
                  This blocks anonymous retrieval and access after relay-membership revocation. It does not yet bind a blob to its originating channel, so someone removed from a private channel can still read a known blob while remaining a relay member. That channel-ACL follow-up remains required before closing the full finding.
                  
                  ## Testing
                  
                  - `git diff --check origin/main...codex/security-media-read-auth`
                  - Rebased onto `origin/main` at `5c98932`
                  - Full CI pending
                  
                  Originating Buzz thread: `buzz://message?channel=3928fe05-df61-4b5d-b9c7-d623b9b10ea1&id=3c6c02312f763fbe0d2bfc33a6c1a362f91d0354f3d18b039cf7a0558c1439d1`
                  Files: .env.example (+4/-5), .github/workflows/c...
                2. block/buzz: development activity
                  ...ric EVENT ingest now accepts kind:30179 (NIP-PMA private managed-agent config). One file, `crates/buzz-relay/src/handlers/ingest.rs`, 16 insertions / 15 deletions; **two semantic lines**, byte-identical to the ingest hunk of #4999 at `6f486e88`:
                  
                  1. `required_scope_for_kind`: 30179 requires `Scope::UsersWrite` — same arm as its public sibling 30177 and the other owner-authored NIP-AP kinds.
                  2. `is_global_only_kind`: 30179 is owner-global, keyed `(pubkey, kind, d-tag)`; a stray `h` tag must not channel-scope it.
                  
                  The rest is import reflow plus replacing the guard test with a positive one (`private_managed_agent_kind_is_owner_scoped_global_user_data`: asserts UsersWrite scope, global-only, no h-channel scope).
                  
                  ## Why the guard test can be retired
                  
                  The removed test (`private_managed_agent_kind_remains_rejected_until_atomic_ingest_exists`) pinned a stated precondition: *...
                3. block/buzz: development activity
                  ...elying on `@<orchestrator-id>` name resolution. Task text is untrusted payload: when it contains @-tokens of its own, the CLI's mention resolver tries to resolve them as channel members, fails, and refuses to send — killing the trial with `RuntimeLaunchError` before the agent ever saw the task.
                  
                  Live occurrence: TB 2.1's `large-scale-text-editing` task embeds Vim macros (`:%normal! @a`). In the tb21-solo-1 run the trial died at launch:
                  
                  ```
                  RuntimeLaunchError: buzz messages send ... exited 1:
                  {"error":"user_error","message":"mention '@a' does not match a current channel member; retry with --mention <pubkey>"}
                  ```
                  
                  Any TB task whose statement contains @-syntax is silently zeroed this way.
                  
                  ## Fix
                  
                  Pass the orchestrator's pubkey as an explicit `--mention` when posting the task. The CLI demotes unresolved @-tokens in the text to presentation-only when any explicit identi...
                4. block/buzz: development activity
                  ...atures/agents/lib/agentCardAvatar.ts**
                  Adds the explicit avatar precedence rule for running agent cards and blocks avatar-dependent actions until the authoritative profile query settles.
                  
                  **desktop/src/features/agents/lib/agentCardAvatar.test.mjs**
                  Covers profile precedence, definition fal…
                  Files: desktop/src/features/agents/lib/agentCardAvatar.test.mjs (+37/-0), desktop/src/features/agents/lib/agentCardAvatar.ts (+29/-0), desktop/src/features/agents/lib/personaCatalogRelay.test.mjs (+14/-3), desktop/src/features/agents/lib/personaCatalogRelay.ts (+9/-3), desktop/src/features/agents/ui/UnifiedAgentsSection.tsx (+6/-12)
                  
                  #4978 fix(desktop): next/back navigation during key creation onboarding (merged 2026-08-07)
                  **Category:** fix
                  **User Impact:** Users can navigate back while an identity key is being created, while Next remains visible and unavailable until creation...
                5. block/buzz: development activity
                  ...valid signed Blossom authorization request and current relay membership for every media GET and HEAD request. It removes the unauthenticated compatibility path and updates desktop reads to send the required authorization.
                  
                  This blocks anonymous retrieval and access after relay-membership revocation. It does not yet bind a blob to its originating channel, so someone removed from a private channel can still read a known blob while remaining a relay member. That channel-ACL follow-up remains required before closing the full finding.
                  
                  ## Testing
                  
                  - `git diff --check origin/main...codex/security-media-read-auth`
                  - Rebased onto `origin/main` at `5c98932`
                  - Full CI pending
                  
                  Originating Buzz thread: `buzz://message?channel=3928fe05-df61-4b5d-b9c7-d623b9b10ea1&id=3c6c02312f763fbe0d2bfc33a6c1a362f91d0354f3d18b039cf7a0558c1439d1`
                  Files: .env.example (+4/-5), .github/workflows/c...
                Sources
                  Block Buzz Git Updates August 6: Buzz Adds Relay-Mesh Access Controls and Large-Channel Virtualization
                  Created: August 6th, 2026 - 04:30 PT
                  Script

                  Here is today's Block Buzz Git Updates for Thursday August 6th. Buzz has added an end-to-end CI test for its relay-driven shared-compute mesh, covering the entire path from discovery to inference. The test uses real nodes and a small local model: authorized members discover a served model through the relay, verify its owner and endpoint bindings, and run a chat completion over QUIC. Crucially, a non-member is denied both by the relay and by mesh routing, even if they possess a leaked endpoint address. This makes the relay’s role as the control plane much more concrete, and gives the team regression coverage for a high-trust distributed-AI workflow. [1]

                  Access control is also tightening across the product. Yesterday, Buzz merged exact-channel authorization for shared-agent mentions. Relay-discovered agents can appear in autocomplete only when their policy permits the viewer in the active channel or forum context; direct messages and unresolved composers fail closed. Today’s internal-build update goes further by enforcing owner-only access for managed agents, including existing provider deployments. The app will not show a locked-down state unless the remote provider has successfully accepted the stricter deployment. Together, these changes reduce the chance that an agent is discoverable or responsive beyond its intended audience. [2]

                  Another substantial reliability improvement targets ACP observer telemetry. Busy agent sessions previously could generate up to six events per second against an owner’s message quota, while a rolling cap silently dropped excess frames. Buzz now paces output at one batch per second per channel, preserves delivery where possible, and adds careful memory caps and accurate drop accounting. The extensive review history here shows attention not just to rate limits, but to avoiding hidden latency and unbounded buffering. [3]

                  Finally, desktop channel member lists now virtualize large rosters instead of mounting every profile card at once. Tests cover a 500-member channel, bounded rendered rows, and scrolling to the final member. That should make large communities feel significantly more responsive without changing search, invitations, or archived-member behavior. [4]

                  The larger pattern is defense in depth: Buzz is strengthening authorization at the UI, deployment, relay, and mesh layers, while improving the performance and observability needed to operate collaboration at larger scale. Thank you for listening to Block Buzz Git Updates from The Daily FM. See you tomorrow!

                  Source Evidence
                  1. block/buzz: development activity
                    ...pute join story end to end: a member can discover another member's served model **through the Buzz relay alone** and run inference over the mesh, while a non-member gets nothing — the relay rejects its auth, and the mesh refuses to route for it even holding a leaked endpoint address.
                    
                    This is deliberately different from mesh-llm's own CI smokes (which bootstrap two nodes with a hand-carried invite token / mdns): here the **relay is the control plane**, exactly like the desktop app:
                    
                    1. **Membership** — identities A and B are added via `buzz-admin` (kind:13534 NIP-43 roster); C is not.
                    2. **Advertise** — each member publishes a client-signed kind:30003 discovery note carrying its MeshLLM owner binding and (for the serve node) `serveTargets[].endpointAddr`, covered by an endpoint-binding signature — the exact payload shape the desktop coordinator publishes.
                    3. **Trust**...
                  2. block/buzz: development activity
                    Repository block/buzz (https://github.com/block/buzz) — development activity since 2026-08-05.
                    
                    Merged pull requests (15):
                    
                    #4913 fix(desktop): allow shared agent mentions (merged 2026-08-05)
                    ## Summary
                    
                    - admit relay-discovered agents to autocomplete when their response policy authorizes the viewer
                    - require authorization in the exact active stream/forum channel for mentions, while keeping community-wide discovery for member invitation
                    - fail closed for relay-only agents in DMs and unresolved composer contexts
                    - re-authorize cached autocomplete rows after policy/channel changes so stale agent suggestions cannot leak back in
                    - preserve managed-agent behavior and explicitly reject stale agent-marked channel members absent from both live directories
                    
                    ## Validation
                    
                    - `...
                  3. block/buzz: development activity
                    ...Files: desktop/tests/e2e/inbox-edit.spec.ts (+1/-1)
                    
                    #4917 fix(acp): pace observer telemetry at 1/s with per-channel batch envelopes (merged 2026-08-06)
                    ## Problem
                    
                    Observer telemetry is the noisiest client of the relay: the old pacer (167ms spacing + 90/min rolling cap) let a busy session bill up to 6 events/second against the owner's message quota, and the rolling cap silently *dropped* frames once exceeded.
                    
                    Ruling from the rate-limiting investigation thread (channel `826fc99b-1472-40e7-a529-6b9db8943b8c`): pace at 1/s, always emit, minimal PR.
                    
                    **Review round 1 (Max, Sami)** found the first cut wrong in three ways — tick burst (all pending frames per tick), startup burst (`interval` fires at t=0), and per-channel quota arithmetic. All fixed and mutation-verified in round 1.
                    
                    **Review round 2 (Sami, Max)** found two more against the round-1 head:
                    1. **Drain-rate c...
                  4. block/buzz: development activity
                    ...ounting every member card
                    - retain the existing member search/add flow and archived-member behavior
                    - cover a 500-member roster, bounded mounted rows, and scrolling to the final member in E2E
                    
                    ## Cause
                    
                    The members sidebar rendered every active member card at once. On large channels this mounted hundreds or thousands of avatars, profile/presence consumers, menus, and DOM rows, blocking the renderer even though fetching the roster itself is fast.
                    
                    ## Testing
                    
                    - `pnpm typecheck`
                    - `pnpm exec biome check src/features/channels/ui/MembersSidebar.tsx tests/e2e/channels.spec.ts`
                    - `pnpm build:e2e`
                    - `pnpm exec playwright test tests/e2e/channels.spec.ts --grep 'members sidebar (virtualizes large channel rosters|can invite relay-authorized agents|can invite and remove managed agents|collapses same-persona managed agents)'` (4 passed)
                    - pre-push: `desktop-check`, full `desktop-...
                  Sources
                    Block Buzz Git Updates August 5: Buzz 0.5.5 Adds Multi-Repo NIP-34 Projects, Fixes Databricks OAuth
                    Created: August 5th, 2026 - 04:30 PT
                    Script

                    Here is today's Block Buzz Git Updates for Wednesday August 5th. Yesterday brought Buzz Desktop version 0.5.5 into the release pipeline, following a sequence of candidate resets and CI fixes. The important detail is process discipline: the release is tied to an immutable reviewed tag, and the team fixed a version-specific cache-key test that had caused generic CI to fail after the bump. That suggests the release machinery is being hardened alongside the product, rather than treated as an afterthought. [1]

                    The largest product development is a more complete Projects experience for teams working across repositories. Buzz projects can now enumerate, attach, and switch among multiple NIP-34 repositories, with repository-specific activity summaries and access-channel management. The implementation also preserves privacy-safe provenance for agent-created patches, pull requests, issues, and commits. In practical terms, Buzz is moving from a one-project, one-repo framing toward a workspace model that better matches real software teams. [2]

                    That is paired with richer Buzz-native Git links in chat. Repository, pull-request, and issue links now generate preview cards with resolved titles, and clicking them routes users directly into the relevant in-app Project view instead of opening a browser. Both canonical Buzz links and relay clone URLs normalize to the same destination, reducing duplicate previews and making agent-shared Git references more useful. [3]

                    On the AI integration side, Buzz repaired Databricks model discovery when an OAuth credential is rejected. It can silently refresh once, defer browser-based PKCE authorization until a user actually sends a prompt, and give clearer guidance when a static configured token fails. That prevents passive model discovery from unexpectedly launching authentication flows or consuming session resources. [4]

                    Finally, desktop messaging gained paste-without-formatting shortcuts: Command-Shift-V on macOS and Control-Shift-V on Windows and Linux. The feature preserves normal editor behaviors including selection, undo, multiline paste, and paste observers. [5]

                    The trend is increasingly cohesive workflow design: Projects, chat, agents, authentication, and desktop ergonomics are being connected into one developer collaboration surface, while testing and release controls keep pace with that expansion. Thank you for listening to Block Buzz Git Updates from The Daily FM. See you tomorrow! [6]

                    Source Evidence
                    1. block/buzz: development activity
                      Repository block/buzz (https://github.com/block/buzz) — development activity since 2026-08-04.
                      
                      Merged pull requests (15):
                      
                      #4809 chore(release): release Buzz Desktop version 0.5.5 (merged 2026-08-04)
                      ## Buzz Desktop release v0.5.5
                      
                      - **Frozen main:** `25a9cf1be6d245fbd7373cb1160dbc790baf5bd5`
                      - **Reviewed candidate:** `8380c1f8ead8816bcf1f4ea9f66aa08e2441b15a`
                      - **Previous desktop release:** `desktop-v0.5.4`
                      - **Proposed immutable tag:** `desktop-v0.5.5`
                      
                      This PR must be **squash merged** only after the Desktop Release Candidate check passes. The branch must remain based directly on current `main`; stale base, payload drif...
                    2. block/buzz: development activity
                      ...f.json (+1/-1)
                      
                      #4671 feat(projects): support multiple repositories (merged 2026-08-04)
                      ## Summary
                      - adopt the finalized NIP-MP project model so one project can enumerate and switch between multiple NIP-34 repositories
                      - add project and repository navigation, activity summaries, existing-repository attachment, and repository access-channel management
                      - preserve privacy-safe activation provenance for agent-authored patches, pull requests, issues, and associated commits
                      
                      ## Test plan
                      - [x] Run desktop typecheck and unit tests
                      - [x] Run focused NIP-MP, repository access, and provenance tests
                      - [x] Run Rust formatting and desktop lint checks
                      - [x] Run the complete pre-push suite after merging current `main`
                      - [ ] Manually verify project creation, repository attachment, switching, and access repair on staging
                      - [ ] Manually verify public-channel and private-agent origin la...
                    3. block/buzz: development activity
                      ...of a browser.
                      
                      - **Spec**: `docs/buzz-entity-links.md` — link scheme, slices, and deferred work (`buzz://project`, OS deep links, web routes).
                      - **Canonical `buzz://` deep links**: new `desktop/src/shared/lib/entityLink.ts` with builders + strict parser for `buzz://pr?id=…&owner=…&d=…`, `buzz://issue?…`, and `buzz://repo?owner=…&d=…`, mirrored by a Rust module (`crates/buzz-cli/src/links.rs`) with a shared golden-format test so the two implementations can't drift.
                      - **Preview cards**: `linkPreview.ts` recognizes `buzz://` entity links *and* HTTPS relay clone URLs (`{origin}/git/<pubkey>/<repo>`, the shape agents paste today). Both normalize onto the canonical `buzz://` href, so the two spellings of a repo dedupe to one `Buzz`-provider card (`BuzzMark` logo) rendered by `link-preview-attachment.tsx`.
                      - **Title enrichment**: PR/issue cards fetch the real subject from t...
                    4. block/buzz: development activity
                      ...hen discovery has no usable OAuth credential, `session/new` succeeds with only the trimmed configured model so the first `session/prompt` can run the existing browser PKCE flow
                      - reject a rejected configured `DATABRICKS_TOKEN` with actionable, non-interactive guidance; static credentials cannot recover through PKCE
                      - use the configured-model fallback for non-auth discovery failures without caching failed or fallback catalogs, so later sessions retry discovery
                      - keep known Databricks v2 models only for authenticated empty-catalog responses and mark their provenance
                      - resolve discovery before MCP spawn or session registration, preventing failed discovery from leaking resources or consuming session capacity
                      - permit serialized interactive PKCE only from the explicit saved-agent model picker; passive draft discovery never opens a browser
                      
                      ## Runtime flow
                      1. OAuth discover...
                    5. block/buzz: development activity
                      ...he immutable candidate tag.
                      Files: .release/desktop-candidate.json (+5/-5), CHANGELOG.md (+54/-0), desktop/package.json (+1/-1), desktop/src-tauri/Cargo.lock (+1/-1), desktop/src-tauri/Cargo.toml (+1/-1), desktop/src-tauri/tauri.conf.json (+1/-1)
                      
                      #4801 feat: paste composer text without formatting hotkey (merged 2026-08-04)
                      ## Summary
                      
                      - handle Cmd+Shift+V on macOS and Ctrl+Shift+V on Windows/Linux in the message composer
                      - read plain text through the native Tauri/arboard clipboard path in packaged builds, with a browser-only Clipboard API fallback
                      - re-enter ProseMirror's paste pipeline with populated `text/plain` clipboard data so selection, undo, multiline behavior, and paste observers remain intact
                      - cover both platform mappings with rendered composer E2E tests that assert the native command path
                      
                      ## Testing
                      
                      - `pnpm test` — 4,286 passed
                      - `pnpm check`
                      - `pnpm typ...
                    6. block/buzz: development activity
                      ...uri/src/commands/agent_models_tests.rs (+41/-0)
                      
                      #4797 Revert "chore(release): release Buzz Desktop version 0.5.5" (merged 2026-08-04)
                      Reverts block/buzz#4788
                      Files: .release/desktop-candidate.json (+5/-5), CHANGELOG.md (+0/-45), desktop/package.json (+1/-1), desktop/src-tauri/Cargo.lock (+1/-1), desktop/src-tauri/Cargo.toml (+1/-1), desktop/src-tauri/tauri.conf.json (+1/-1)
                      
                      #4695 feat: Buzz entity links — rich preview cards + in-app navigation for repos, PRs, and issues (merged 2026-08-04)
                      ## Summary
                      
                      Gives Buzz-hosted git entities the same "GitHub-style" chat experience GitHub links already get: rich preview cards, real titles, and click-through — except clicks navigate **in-app** to the Projects view instead of a browser.
                      
                      - **Spec**: `docs/buzz-entity-links.md` — link scheme, slices, and deferred work (`buzz://project`, OS deep links, web routes).
                      - **Canonical `...
                    Sources

                      <- Back to library