Skip to content

feat(desktop-messages): show compact Buzz link metadata - #6252

Merged
tellaho merged 33 commits into
mainfrom
tho/buzz-chip-metadata
Aug 21, 2026
Merged

feat(desktop-messages): show compact Buzz link metadata#6252
tellaho merged 33 commits into
mainfrom
tho/buzz-chip-metadata

Conversation

@tellaho

@tellaho tellaho commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Category: improvement
User Impact: Buzz links in messages now resolve into compact, descriptive chips with predictable navigation, while tooltips use the neutral secondary surface consistently across light and dark themes.

Problem: Raw Buzz-native links and opaque identifiers make message context difficult to scan, while oversized previews disrupt the conversation. Missing, delayed, or deleted metadata also needs a stable presentation that does not mislead users or break navigation.

Solution: Keep message and issue chips metadata-independent: message chips render only the channel name, while issue chips render only the repository name—never fetched content/title or an event hash. Fetched context remains available in each hover tooltip. Other native links continue to resolve into concise inline labels, with muted secondary fallbacks, distinct deleted states, and existing navigation paths preserved. This also makes two explicit shared-tooltip behavior changes:

  1. Color: shared and rich tooltips move from the primary color pair to the neutral secondary semantic pair, including dedicated huddle-token handling and matching rich-descendant foregrounds.
  2. Hover behavior: tooltip roots set Radix disableHoverableContent, and tooltip content is pointer-transparent, so moving off the trigger dismisses the tooltip instead of letting the pointer enter and keep the popover open.

Together these preserve readable contrast, authoritative project context, and predictable hover dismissal.

File changes

desktop/src/features/communities/useCommunityInit.ts
Primes channel metadata needed to resolve native links promptly.

desktop/src/features/messages/lib/messageLinkMetadata.test.mjs
Covers message preview extraction, fallbacks, and deleted-message semantics.

desktop/src/features/messages/lib/messageLinkMetadata.ts
Normalizes fetched message metadata into compact labels and status-aware presentation.

desktop/src/features/messages/ui/SentFromThreadLine.tsx
Provides thread context to linked-message metadata resolution.

desktop/src/shared/lib/useResolvedLinkPreviews.ts
Exposes resolved preview state for native entity chips.

desktop/src/shared/styles/globals/markdown.css
Adds compact chip layout and semantic disabled-state styling.

desktop/src/shared/styles/globals/theme.css
Defines the semantic colors used by unavailable and deleted chips.

desktop/src/shared/ui/markdown.test.mjs
Exercises native-link rendering and provider-backed entity metadata behavior.

desktop/src/shared/ui/markdown.tsx
Routes native markdown links through metadata-aware chip components without changing navigation contracts.

desktop/src/shared/ui/markdown/ChannelDeepLink.test.mjs
Covers resolved, unresolved, private, archived, and forum channel presentations.

desktop/src/shared/ui/markdown/ChannelDeepLink.tsx
Renders channel names and concise channel metadata inline with stable fallbacks.

desktop/src/shared/ui/markdown/MessageLinkPill.tsx
Renders loading, ready, unavailable, DM, forum, and deleted message states compactly.

desktop/src/shared/ui/markdown/entityLinks.tsx
Enriches repository, issue, and pull-request chips and uses containing-project context in tooltips.

desktop/src/shared/ui/markdown/types.ts
Extends markdown runtime metadata required by native chip rendering.

desktop/src/shared/ui/markdown/useMessageLinkMetadata.ts
Fetches and classifies linked-message metadata while preserving navigable fallbacks.

desktop/src/testing/e2eBridge.ts
Adds deterministic metadata controls for runtime visual and navigation tests.

desktop/tailwind.config.js
Makes semantic disabled colors available to chip styles.

desktop/tests/e2e/entity-link-recipient-cards.spec.ts
Verifies entity labels, project-aware tooltips, delayed metadata, and navigation behavior.

desktop/tests/e2e/navigation.spec.ts
Verifies channel and message chip states, metadata resolution, deletion handling, and navigation.

desktop/src/shared/ui/tooltip.tsx
Migrates the shared tooltip surface from the primary color pair to the semantic secondary pair. It also sets Radix disableHoverableContent and makes tooltip content pointer-transparent so leaving the trigger dismisses the tooltip predictably.

desktop/src/features/agents/ui/RestartDiffBadge.tsx
Aligns restart-diff tooltip values and supporting copy with the secondary tooltip foreground.

desktop/src/features/channels/ui/AddChannelBotTeamsSection.tsx
Aligns rich team tooltip descriptions, persona chips, avatars, and names with secondary tooltip semantics.

desktop/src/features/projects/ui/ProjectAuthorIdentity.tsx
Uses the matching secondary tooltip foreground for project author metadata.

desktop/src/features/projects/ui/ProjectCards.tsx
Aligns repository-unavailable tooltip descriptions with the secondary tooltip foreground.

desktop/src/shared/styles/globals/utilities.css
Makes huddle tooltips consume their dedicated palette directly without misleading primary or secondary aliases.

desktop/src/shared/styles/globals/tooltipSemantics.test.mjs
Pins direct huddle-token consumption and rejects semantic alias drift.

desktop/tests/e2e/tooltip-semantics.spec.ts
Verifies simple and rich tooltip surfaces and descendant tokens in Buzz light and Catppuccin Mocha dark themes.

desktop/playwright.config.ts
Registers tooltip semantic coverage in the desktop smoke suite.

Reproduction steps

  1. Run the desktop app and open a message containing Buzz links for a channel, message, repository, issue, and pull request.
  2. Confirm message links show only the channel name and issue links show only the repository name inline, with no fetched content/title or event hash; confirm other native links remain compact rather than rendering raw identifiers or expanded previews.
  3. Hover the chips and confirm the neutral secondary tooltip adds concise context without duplicating the visible label.
  4. Open each chip and confirm it follows the same channel, message, repository, issue, or pull-request navigation as before.
  5. Inspect links while metadata is loading, unavailable, or definitively deleted and confirm the fallback remains compact, legible, and navigable where appropriate.
  6. In Buzz light and Catppuccin Mocha dark themes, compare a simple channel-members tooltip and the rich Add agents team tooltip; both should use secondary semantics with readable nested content.
  7. Move the pointer from a trigger toward its tooltip; confirm the tooltip dismisses rather than remaining open as hoverable content.

Screenshots

The matrix below covers both the default light theme and Catppuccin Mocha with an orange accent. Message/issue-chip rows affected by the stable-label pivot are temporarily omitted until they can be recaptured from the real built UI; the prior images showed the obsolete expanding inline label.

State Default light Dark · orange accent
Public stream channel tooltip Public stream channel tooltip — default light Public stream channel tooltip — dark orange accent
Private forum channel tooltip Private forum channel tooltip — default light Private forum channel tooltip — dark orange accent
Public forum channel tooltip Public forum channel tooltip — default light Public forum channel tooltip — dark orange accent
Channel references, including unresolved Channel references, including unresolved — default light Channel references, including unresolved — dark orange accent
Unknown channel permalink Unknown channel permalink — default light Unknown channel permalink — dark orange accent
Archived channel tooltip Archived channel tooltip — default light Archived channel tooltip — dark orange accent
Repository entity Repository entity — default light Repository entity — dark orange accent
Pull request entity Pull request entity — default light Pull request entity — dark orange accent
Entity metadata fallback Corrected entity metadata fallback tooltip — default light Corrected entity metadata fallback tooltip — dark orange accent

Tooltip semantic surface spot check

Buzz light Catppuccin Mocha dark
Rich team tooltip on the secondary surface in Buzz light Rich team tooltip on the secondary surface in Catppuccin Mocha dark

@tellaho
tellaho force-pushed the tho/buzz-chip-metadata branch from aff62ed to 38f3c22 Compare August 18, 2026 22:30
@tellaho tellaho changed the title feat(desktop-messages): reveal Buzz metadata in inline chips feat(desktop-messages): show compact Buzz link metadata Aug 19, 2026
@tellaho
tellaho marked this pull request as ready for review August 19, 2026 18:50
@tellaho
tellaho requested a review from a team as a code owner August 19, 2026 18:50
tellaho and others added 25 commits August 19, 2026 11:55
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>

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

Verdict: REQUEST CHANGES

Reviewed: 2e7583bf5ad5926ca32367af9954bc79d108e42d..48ea55f643946198c192bcb002d42fd9932d4d0b (exact live head 48ea55f643946198c192bcb002d42fd9932d4d0b)

Risk: high — this changes message-link truthfulness/navigation and shared tooltip behavior across Desktop.

The accessibility follow-up fixes bounded chip names, long-tooltip pointer access, and pathological wrapping, but both original product blockers remain:

  1. Issue/PR tooltips still discard fetched status metadata. desktop/src/shared/ui/markdown/entityLinks.tsx:83-94 selects only resolvedTitle for resolved issues and PRs. The status payload remains in metadata.description: issue status/labels at desktop/src/shared/lib/useResolvedLinkPreviews.ts:357-363, and PR status/branch/commit at :366-376. The resulting tooltip shows the subject but hides the status-aware context this feature fetches. The new assertions at desktop/tests/e2e/entity-link-recipient-cards.spec.ts:135-146,181-199 pin only the subject and static footer, so they pass while status is dropped. Please compose title plus description for both tooltip types and add assertions that fail when status/labels or status/branch/commit disappear.

  2. Definitive deletion is still presented as transient unavailability. desktop/src/shared/ui/markdown/useMessageLinkMetadata.ts:18-24,32-40,54-79 catches every getEventById rejection, retries, and reduces it to unavailable; no deleted state exists. desktop/src/shared/ui/markdown/MessageLinkPill.tsx:74-86,160-184 consequently renders “Message unavailable,” unavailable styling, and exact-message navigation for event not found. Elsewhere, desktop/src/features/messages/lib/useDraftRootStatus.ts:10-17,21-32 documents that exact signal as definitive deletion after a successful zero-row query. The E2E at desktop/tests/e2e/entity-link-recipient-cards.spec.ts:544-590 currently seeds deletedEventIds and asserts the incorrect unavailable/navigation contract. Please distinguish definitive deletion from transient failure, give it truthful accessible text/style and deletion-appropriate navigation, and regression-test both paths.

Validation at the pinned clean head:

  • pnpm --dir desktop check — passed (existing non-failing diagnostics only).
  • pnpm --dir desktop typecheck — passed.
  • pnpm --dir desktop test — 5,137/5,137 passed (independently reproduced).
  • Focused entity-link built smoke — 7/7 passed.
  • Combined affected built smoke (navigation, entity-link-recipient-cards, tooltip-semantics) — 28 passed, 1 skipped, 1 failed; the changed channel tooltip now wraps while navigation.spec.ts:576-578 still requires single-line ellipsis. A focused rerun also observed composer-label expectation drift at navigation.spec.ts:449 (general vs general · mock-gen). The built affected journey is not green at this head.
  • CI at verdict time: macOS build, relay E2E, and both integration shards passed; Desktop Core and all four smoke shards remained pending.
  • Local HEAD and live PR head were rechecked equal to 48ea55f643946198c192bcb002d42fd9932d4d0b; worktree clean.

What held up: entity metadata cache deduplication/expiry, community reset, href-bound late-completion fencing, exact entity navigation, bounded accessible names, tooltip theme semantics, and exercised light/dark layouts. Built screenshots for entity cards and both tooltip themes were inspected and readable.

Residual risk: no native Tauri exact-head run was supplied or performed; built Playwright evidence does not prove the native artifact. Resolve the two semantic blockers and the red affected smoke path, then rerun exact-head validation. Any new head requires review again.

— :bot: Jude’s code review agent

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
@tellaho
tellaho requested a review from jedwards27 August 20, 2026 18:29
jedwards27
jedwards27 previously approved these changes Aug 20, 2026

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

Verdict: APPROVE

Reviewed: 84c095f8bea14b55373e2d867100abe37aa6061e..e658101a50ef1ceda890cc7310efd59712dd02bc (exact head e658101a50ef1ceda890cc7310efd59712dd02bc)

Risk: high — this changes message-link truthfulness/navigation, metadata lifecycle, and a shared tooltip primitive across Desktop.

Both prior blockers are resolved:

  • Definitive event not found now maps to a distinct deleted state, while transient failures remain unavailable and retryable (desktop/src/shared/ui/markdown/useMessageLinkMetadata.ts:19-26,34-44,78-87). Deleted links expose truthful tooltip/accessibility semantics and route to the surviving thread root or containing channel; ordinary/unavailable links preserve exact-message navigation (desktop/src/shared/ui/markdown/MessageLinkPill.tsx:74-93,173-206). Built coverage separately exercises deleted reply, deleted top-level, and transient-unavailable behavior.
  • Issue/PR enrichment now intentionally fetches only the root subject and no longer performs the unused status query or constructs status metadata that the tooltip discards (desktop/src/shared/lib/useResolvedLinkPreviews.ts:336-347). Stable repository-only inline labels remain unchanged through metadata resolution, and tooltip tests pin the title-only contract.

Behavior/contracts traced: metadata cache keys/deduplication/eviction, stale async completion and community reset, fetched event channel/kind validation, composer-to-sent label stability, deleted/unavailable navigation, entity tooltip/card data flow, shared tooltip dismissal/color semantics, accessible names, and theme/layout behavior. No material unresolved source or product finding remains.

Exact-head validation on a clean worktree:

  • pnpm check — passed; four unrelated existing diagnostics only.
  • pnpm typecheck — passed.
  • pnpm test — 5,192/5,192 passed.
  • Fresh pnpm build:e2e, followed by CI=1 pnpm exec playwright test --project=smoke tests/e2e/entity-link-recipient-cards.spec.ts tests/e2e/navigation.spec.ts tests/e2e/tooltip-semantics.spec.ts — 30 passed, 1 intentional skip, 0 failed.
  • Five generated screenshots were inspected: stable entity chips and rich tooltip surfaces were coherent in Buzz light and Catppuccin Mocha dark. The deletion state was assertion-tested but not captured visually.

CI: macOS build, integration shards, relay E2E, release candidate, and smoke shards 1/2/4 passed at this exact head. Smoke shard 3 failed in unrelated existing journeys (project-issue-comments, message-feedback-snapshots, and overscroll-boundary), none in this PR's changed files; the first failed all retries while the other two passed on retry. Desktop Core was still running at verdict time. Required CI should still be rerun/completed green before merge; this approval is source-review clearance, not a waiver of branch protection.

Residual risk: no native Tauri exact-head MP4/AX run and no mutation proof for the deletion journeys. Built-browser interaction coverage is strong, but it does not prove native rendering.

— :bot: Jude’s code review agent

Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>

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

Verdict: APPROVE

Reviewed: 3ee465e12b815a191d902856440e2f3348bda506..0d21bda0649fe3e2d1aaddc4ac914e88dd601ac9 (exact head 0d21bda0649fe3e2d1aaddc4ac914e88dd601ac9)

Risk: high — this changes message-link truthfulness/navigation, metadata/cache lifecycle, and a shared tooltip primitive across Desktop.

The post-clearance follow-up is sound: desktop/tests/e2e/project-issue-comments.spec.ts:111-114 now proves the canonical forged issue identity through the composer chip's data-href rather than expecting the intentionally hidden event hash as visible text, and proves the chip clears on channel change. It does not reopen the prior defects.

Behavior/contracts traced: stable metadata-independent message/issue labels; definitive event not found deletion versus retryable transient unavailability; deleted reply/top-level fallback navigation; exact-message navigation for ordinary/unavailable links; canonical composer/entity identity; per-ID channel lookups and miss/error caching; community/identity cache isolation; private non-member channel handling; shared tooltip dismissal/color semantics; accessible names; bounded layout; and downstream tooltip consumers. No material unresolved finding remains.

Exact-head validation on clean worktrees:

  • Desktop lint/check and typecheck passed (pre-existing non-failing diagnostics only).
  • Full Desktop unit suite: 5,203/5,203 passed.
  • Fresh E2E production build (tsc && vite build --mode e2e) passed.
  • Built Playwright coverage passed in two complementary runs: 34 passed, 1 intentional skip, 0 failed across entity-link-recipient-cards, navigation, tooltip-semantics, and project-issue-comments; an independent runtime-focused run covering the first, second, and fourth specs passed 30 with 1 intentional skip.
  • Generated recipient-card, composer/sent-transition, Buzz-light tooltip, and Catppuccin-Mocha tooltip screenshots were inspected; exercised contrast, wrapping, clipping, spacing, and compact-label behavior were coherent.
  • Exact-head CI is green: Desktop Core, all four smoke shards, both integration shards and aggregate, relay E2E, macOS Tauri build, Desktop aggregate, and release candidate all succeeded.

Manual/native evidence: GitHub's macOS job built the Tauri app successfully at this exact head. No interactive native Tauri MP4/AX journey was run.

Residual risk: built-browser journeys and the macOS artifact build provide strong coverage, but they do not prove an interactive native rendering session; no mutation proof was run for the deletion journeys. Any new head invalidates this approval.

— :bot: Jude’s code review agent

@tellaho tellaho closed this Aug 21, 2026
@tellaho tellaho reopened this Aug 21, 2026
@tellaho
tellaho dismissed wesbillman’s stale review August 21, 2026 02:01

feedback addressed

@tellaho
tellaho merged commit de8a274 into main Aug 21, 2026
48 checks passed
@tellaho
tellaho deleted the tho/buzz-chip-metadata branch August 21, 2026 02:01
adrienlacombe added a commit to adrienlacombe/buzz that referenced this pull request Aug 21, 2026
`js/incomplete-multi-character-sanitization` ×6 in
desktop/src/shared/ui/markdown.test.mjs turned CodeQL red on this sync PR. Every
hit is `html.replace(/<[^>]+>/g, "")` stripping tags off renderToStaticMarkup
output so the test can assert on visible text. The rule is correct that a single
pass over that pattern is defeatable by nested or malformed markup, and it does
not matter: the input is the test's own fixture and the result is never
rendered, stored or trusted. The file is byte-identical to upstream/main.

This is the same shape as the useComposerLinkPreviews.test.mjs row one sync
earlier, so the section now leads with the cheap discriminator — is the file
identical to upstream, and is the sink inside a test block — rather than leaving
the next reader to re-derive it from the query semantics.

Signed-off-by: adrienlacombe <6303520+adrienlacombe@users.noreply.github.com>
tlongwell-block pushed a commit that referenced this pull request Aug 21, 2026
Co-authored-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>

Signed-off-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>

* origin/main:
  chore(deps): pin earshot below 1.2.0 pending a VAD threshold re-pick (#6392)
  polish(desktop): finish Projects navigation and context chrome (#6429)
  fix(desktop): clarify add agents channel action (#6374)
  Repair stale large channel roster snapshots (#6251)
  feat(desktop-messages): show compact Buzz link metadata (#6252)
  feat(workflows): reply in-thread from send_message action (#6178)
  perf(desktop): split discover_acp_providers into cheap and forced paths (#6330)
  fix(desktop): restore recent channel sorting (#6402)
  fix(desktop): isolate main timeline stacking context from focus drawer (#6398)
  fix(desktop): make reconnect repair lossless (#6415)
  fix(hooks): scope pre-push lanes to branch merge-base diff (#6423)

Signed-off-by: Wren <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@buzz.block.builderlab.xyz>
TheSentinel454 added a commit that referenced this pull request Aug 21, 2026
* origin/main: (64 commits)
  chore(deps): pin earshot below 1.2.0 pending a VAD threshold re-pick (#6392)
  polish(desktop): finish Projects navigation and context chrome (#6429)
  fix(desktop): clarify add agents channel action (#6374)
  Repair stale large channel roster snapshots (#6251)
  feat(desktop-messages): show compact Buzz link metadata (#6252)
  feat(workflows): reply in-thread from send_message action (#6178)
  perf(desktop): split discover_acp_providers into cheap and forced paths (#6330)
  fix(desktop): restore recent channel sorting (#6402)
  fix(desktop): isolate main timeline stacking context from focus drawer (#6398)
  fix(desktop): make reconnect repair lossless (#6415)
  fix(hooks): scope pre-push lanes to branch merge-base diff (#6423)
  Enforce a three-day dependency cooldown (#6426)
  perf(desktop): resolve references without directory scans (#6328)
  feat(llm): stamp thinking effort on call-completed log line (#6424)
  Fix cross-owner relay agent mentions in owner-only builds (#6338)
  feat(cli): accept Buzz message links for thread reads (#6359)
  feat(workflows): add workflow editor (#6248)
  fix(desktop): preserve huddle speech boundaries (#6397)
  test(desktop): use a wordlist-safe separator in passphrase word-count test (#6356)
  fix(models): curate Databricks alias-aware labels for 5 missing endpoints (#6360)
  ...

Signed-off-by: Luke Tornquist <tornquist@squareup.com>
TheSentinel454 added a commit that referenced this pull request Aug 21, 2026
…kflow-management

* origin/main: (27 commits)
  chore(deps): pin earshot below 1.2.0 pending a VAD threshold re-pick (#6392)
  polish(desktop): finish Projects navigation and context chrome (#6429)
  fix(desktop): clarify add agents channel action (#6374)
  Repair stale large channel roster snapshots (#6251)
  feat(desktop-messages): show compact Buzz link metadata (#6252)
  feat(workflows): reply in-thread from send_message action (#6178)
  perf(desktop): split discover_acp_providers into cheap and forced paths (#6330)
  fix(desktop): restore recent channel sorting (#6402)
  fix(desktop): isolate main timeline stacking context from focus drawer (#6398)
  fix(desktop): make reconnect repair lossless (#6415)
  fix(hooks): scope pre-push lanes to branch merge-base diff (#6423)
  Enforce a three-day dependency cooldown (#6426)
  perf(desktop): resolve references without directory scans (#6328)
  feat(llm): stamp thinking effort on call-completed log line (#6424)
  Fix cross-owner relay agent mentions in owner-only builds (#6338)
  feat(cli): accept Buzz message links for thread reads (#6359)
  feat(workflows): add workflow editor (#6248)
  fix(desktop): preserve huddle speech boundaries (#6397)
  test(desktop): use a wordlist-safe separator in passphrase word-count test (#6356)
  fix(models): curate Databricks alias-aware labels for 5 missing endpoints (#6360)
  ...

Signed-off-by: Luke Tornquist <tornquist@squareup.com>

# Conflicts:
#	desktop/src/features/workflows/ui/WorkflowDeleteDialog.tsx
#	desktop/src/features/workflows/ui/WorkflowsView.tsx
wpfleger96 pushed a commit that referenced this pull request Aug 21, 2026
…ntion-phase1

* origin/main: (37 commits)
  fix(desktop): sender names in notifications + macOS click-through routing (#6427)
  docs: clarify two-layer moderation ownership (#6481)
  Fix mobile thread tail and iOS channel header (#6399)
  chore(deps): pin earshot below 1.2.0 pending a VAD threshold re-pick (#6392)
  polish(desktop): finish Projects navigation and context chrome (#6429)
  fix(desktop): clarify add agents channel action (#6374)
  Repair stale large channel roster snapshots (#6251)
  feat(desktop-messages): show compact Buzz link metadata (#6252)
  feat(workflows): reply in-thread from send_message action (#6178)
  perf(desktop): split discover_acp_providers into cheap and forced paths (#6330)
  fix(desktop): restore recent channel sorting (#6402)
  fix(desktop): isolate main timeline stacking context from focus drawer (#6398)
  fix(desktop): make reconnect repair lossless (#6415)
  fix(hooks): scope pre-push lanes to branch merge-base diff (#6423)
  Enforce a three-day dependency cooldown (#6426)
  perf(desktop): resolve references without directory scans (#6328)
  feat(llm): stamp thinking effort on call-completed log line (#6424)
  Fix cross-owner relay agent mentions in owner-only builds (#6338)
  feat(cli): accept Buzz message links for thread reads (#6359)
  feat(workflows): add workflow editor (#6248)
  ...

Signed-off-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
wpfleger96 pushed a commit that referenced this pull request Aug 21, 2026
…c-agent-commit-identity

* origin/main: (40 commits)
  chore(release): release Buzz Desktop version 0.5.18 (#6489)
  fix(desktop): simplify duplicate agent provenance (#6401)
  test(benchmarks): expand Buzz-native dataset (#6448)
  fix(desktop): sender names in notifications + macOS click-through routing (#6427)
  docs: clarify two-layer moderation ownership (#6481)
  Fix mobile thread tail and iOS channel header (#6399)
  chore(deps): pin earshot below 1.2.0 pending a VAD threshold re-pick (#6392)
  polish(desktop): finish Projects navigation and context chrome (#6429)
  fix(desktop): clarify add agents channel action (#6374)
  Repair stale large channel roster snapshots (#6251)
  feat(desktop-messages): show compact Buzz link metadata (#6252)
  feat(workflows): reply in-thread from send_message action (#6178)
  perf(desktop): split discover_acp_providers into cheap and forced paths (#6330)
  fix(desktop): restore recent channel sorting (#6402)
  fix(desktop): isolate main timeline stacking context from focus drawer (#6398)
  fix(desktop): make reconnect repair lossless (#6415)
  fix(hooks): scope pre-push lanes to branch merge-base diff (#6423)
  Enforce a three-day dependency cooldown (#6426)
  perf(desktop): resolve references without directory scans (#6328)
  feat(llm): stamp thinking effort on call-completed log line (#6424)
  ...

Signed-off-by: Duncan <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
tellaho added a commit that referenced this pull request Aug 21, 2026
* origin/main: (28 commits)
  chore(release): release Buzz Desktop version 0.5.18 (#6489)
  fix(desktop): simplify duplicate agent provenance (#6401)
  test(benchmarks): expand Buzz-native dataset (#6448)
  fix(desktop): sender names in notifications + macOS click-through routing (#6427)
  docs: clarify two-layer moderation ownership (#6481)
  Fix mobile thread tail and iOS channel header (#6399)
  chore(deps): pin earshot below 1.2.0 pending a VAD threshold re-pick (#6392)
  polish(desktop): finish Projects navigation and context chrome (#6429)
  fix(desktop): clarify add agents channel action (#6374)
  Repair stale large channel roster snapshots (#6251)
  feat(desktop-messages): show compact Buzz link metadata (#6252)
  feat(workflows): reply in-thread from send_message action (#6178)
  perf(desktop): split discover_acp_providers into cheap and forced paths (#6330)
  fix(desktop): restore recent channel sorting (#6402)
  fix(desktop): isolate main timeline stacking context from focus drawer (#6398)
  fix(desktop): make reconnect repair lossless (#6415)
  fix(hooks): scope pre-push lanes to branch merge-base diff (#6423)
  Enforce a three-day dependency cooldown (#6426)
  perf(desktop): resolve references without directory scans (#6328)
  feat(llm): stamp thinking effort on call-completed log line (#6424)
  ...


# Conflicts:
#	desktop/src/features/channels/ui/ChannelPane.tsx
#	desktop/src/features/messages/ui/MentionAutocomplete.test.mjs
#	desktop/src/features/messages/ui/MentionAutocomplete.tsx

Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
baxen pushed a commit that referenced this pull request Aug 21, 2026
* origin/main: (88 commits)
  docs(nips): comprehensive NIP-FI — core + claimable profiles (EDGE/LIFECYCLE/DELEG/CONF) (#5946)
  fix(benchmarks): wait for scripted event delivery (#6487)
  Polish mobile channel navigation and message sends (#6488)
  Clarify huddle message destination (#6496)
  feat(archive): add observer-frame retention schema and gated DB adapter (#5719)
  fix(desktop): restore human barge-in over agent TTS in huddles (#6431)
  chore(release): release Buzz Desktop version 0.5.18 (#6489)
  fix(desktop): simplify duplicate agent provenance (#6401)
  test(benchmarks): expand Buzz-native dataset (#6448)
  fix(desktop): sender names in notifications + macOS click-through routing (#6427)
  docs: clarify two-layer moderation ownership (#6481)
  Fix mobile thread tail and iOS channel header (#6399)
  chore(deps): pin earshot below 1.2.0 pending a VAD threshold re-pick (#6392)
  polish(desktop): finish Projects navigation and context chrome (#6429)
  fix(desktop): clarify add agents channel action (#6374)
  Repair stale large channel roster snapshots (#6251)
  feat(desktop-messages): show compact Buzz link metadata (#6252)
  feat(workflows): reply in-thread from send_message action (#6178)
  perf(desktop): split discover_acp_providers into cheap and forced paths (#6330)
  fix(desktop): restore recent channel sorting (#6402)
  ...

Co-authored-by: Bradley Axen <baxen@squareup.com>
Signed-off-by: Bradley Axen <baxen@squareup.com>

# Conflicts:
#	crates/buzz-acp/src/base_prompt.md
oscarlehuu added a commit to Nuncio-hq/crew that referenced this pull request Aug 23, 2026
…odo scope (#319)

* test(desktop): RED contracts for evidence-vs-chip dispatch and Tier 2 prompts

Pin the #289 conflict: a crew-evidence message that also contains a
buzz:// permalink must stay an evidence card. Compact permalink chips,
pickup follow-through, and MCP todo scope assertions fail until the
upstream ports land.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: oscarlehuu <oscarlehuu@users.noreply.github.com>

* upstream(sync): Tier 2 messaging — inbox delete, compact links, MCP todo

Absorb Buzz block#5779, block#5638, block#6252, block#6186, and block#6216.

MessageRowDefaultBody dispatch order is crew-evidence → handover →
compact Buzz permalink chips → ordinary Markdown, so an evidence card
with a buzz:// link still renders Accept/Reject instead of a chip.

block#6186 pickup follow-through composes with Crew no-bare-ack (#283/#276).
Wiki buzz://file citations stay inline (not chips). Inbox delete does
not change Mission Inbox sections.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: oscarlehuu <oscarlehuu@users.noreply.github.com>

* test(desktop): scope evidence+permalink row filter to the card descendant

The Playwright `has` locator must be relative to each message-row. Nested
timeline-scoped locators never matched even when the evidence card rendered.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: oscarlehuu <oscarlehuu@users.noreply.github.com>

* fix(desktop): extract permalink markdown components under file-size ratchet

Move channel/message/entity chip renderers out of markdown.tsx so the
already-over-limit file stays at or below the 1915-line base. Dispatch
order is unchanged: crew-evidence → handover → compact links → Markdown.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: oscarlehuu <oscarlehuu@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: oscarlehuu <oscarlehuu@users.noreply.github.com>
BradGroux pushed a commit to BradGroux/buzz that referenced this pull request Aug 23, 2026
**Category:** improvement
**User Impact:** Buzz links in messages now resolve into compact,
descriptive chips with predictable navigation, while tooltips use the
neutral secondary surface consistently across light and dark themes.

**Problem:** Raw Buzz-native links and opaque identifiers make message
context difficult to scan, while oversized previews disrupt the
conversation. Missing, delayed, or deleted metadata also needs a stable
presentation that does not mislead users or break navigation.

**Solution:** Keep message and issue chips metadata-independent: message
chips render only the channel name, while issue chips render only the
repository name—never fetched content/title or an event hash. Fetched
context remains available in each hover tooltip. Other native links
continue to resolve into concise inline labels, with muted secondary
fallbacks, distinct deleted states, and existing navigation paths
preserved. This also makes two explicit shared-tooltip behavior changes:

1. **Color:** shared and rich tooltips move from the primary color pair
to the neutral secondary semantic pair, including dedicated huddle-token
handling and matching rich-descendant foregrounds.
2. **Hover behavior:** tooltip roots set Radix
`disableHoverableContent`, and tooltip content is pointer-transparent,
so moving off the trigger dismisses the tooltip instead of letting the
pointer enter and keep the popover open.

Together these preserve readable contrast, authoritative project
context, and predictable hover dismissal.

<details>
<summary>File changes</summary>

**desktop/src/features/communities/useCommunityInit.ts**
Primes channel metadata needed to resolve native links promptly.

**desktop/src/features/messages/lib/messageLinkMetadata.test.mjs**
Covers message preview extraction, fallbacks, and deleted-message
semantics.

**desktop/src/features/messages/lib/messageLinkMetadata.ts**
Normalizes fetched message metadata into compact labels and status-aware
presentation.

**desktop/src/features/messages/ui/SentFromThreadLine.tsx**
Provides thread context to linked-message metadata resolution.

**desktop/src/shared/lib/useResolvedLinkPreviews.ts**
Exposes resolved preview state for native entity chips.

**desktop/src/shared/styles/globals/markdown.css**
Adds compact chip layout and semantic disabled-state styling.

**desktop/src/shared/styles/globals/theme.css**
Defines the semantic colors used by unavailable and deleted chips.

**desktop/src/shared/ui/markdown.test.mjs**
Exercises native-link rendering and provider-backed entity metadata
behavior.

**desktop/src/shared/ui/markdown.tsx**
Routes native markdown links through metadata-aware chip components
without changing navigation contracts.

**desktop/src/shared/ui/markdown/ChannelDeepLink.test.mjs**
Covers resolved, unresolved, private, archived, and forum channel
presentations.

**desktop/src/shared/ui/markdown/ChannelDeepLink.tsx**
Renders channel names and concise channel metadata inline with stable
fallbacks.

**desktop/src/shared/ui/markdown/MessageLinkPill.tsx**
Renders loading, ready, unavailable, DM, forum, and deleted message
states compactly.

**desktop/src/shared/ui/markdown/entityLinks.tsx**
Enriches repository, issue, and pull-request chips and uses
containing-project context in tooltips.

**desktop/src/shared/ui/markdown/types.ts**
Extends markdown runtime metadata required by native chip rendering.

**desktop/src/shared/ui/markdown/useMessageLinkMetadata.ts**
Fetches and classifies linked-message metadata while preserving
navigable fallbacks.

**desktop/src/testing/e2eBridge.ts**
Adds deterministic metadata controls for runtime visual and navigation
tests.

**desktop/tailwind.config.js**
Makes semantic disabled colors available to chip styles.

**desktop/tests/e2e/entity-link-recipient-cards.spec.ts**
Verifies entity labels, project-aware tooltips, delayed metadata, and
navigation behavior.

**desktop/tests/e2e/navigation.spec.ts**
Verifies channel and message chip states, metadata resolution, deletion
handling, and navigation.

**desktop/src/shared/ui/tooltip.tsx**
Migrates the shared tooltip surface from the primary color pair to the
semantic secondary pair. It also sets Radix `disableHoverableContent`
and makes tooltip content pointer-transparent so leaving the trigger
dismisses the tooltip predictably.

**desktop/src/features/agents/ui/RestartDiffBadge.tsx**
Aligns restart-diff tooltip values and supporting copy with the
secondary tooltip foreground.

**desktop/src/features/channels/ui/AddChannelBotTeamsSection.tsx**
Aligns rich team tooltip descriptions, persona chips, avatars, and names
with secondary tooltip semantics.

**desktop/src/features/projects/ui/ProjectAuthorIdentity.tsx**
Uses the matching secondary tooltip foreground for project author
metadata.

**desktop/src/features/projects/ui/ProjectCards.tsx**
Aligns repository-unavailable tooltip descriptions with the secondary
tooltip foreground.

**desktop/src/shared/styles/globals/utilities.css**
Makes huddle tooltips consume their dedicated palette directly without
misleading primary or secondary aliases.

**desktop/src/shared/styles/globals/tooltipSemantics.test.mjs**
Pins direct huddle-token consumption and rejects semantic alias drift.

**desktop/tests/e2e/tooltip-semantics.spec.ts**
Verifies simple and rich tooltip surfaces and descendant tokens in Buzz
light and Catppuccin Mocha dark themes.

**desktop/playwright.config.ts**
Registers tooltip semantic coverage in the desktop smoke suite.

</details>

## Reproduction steps

1. Run the desktop app and open a message containing Buzz links for a
channel, message, repository, issue, and pull request.
2. Confirm message links show only the channel name and issue links show
only the repository name inline, with no fetched content/title or event
hash; confirm other native links remain compact rather than rendering
raw identifiers or expanded previews.
3. Hover the chips and confirm the neutral secondary tooltip adds
concise context without duplicating the visible label.
4. Open each chip and confirm it follows the same channel, message,
repository, issue, or pull-request navigation as before.
5. Inspect links while metadata is loading, unavailable, or definitively
deleted and confirm the fallback remains compact, legible, and navigable
where appropriate.
6. In Buzz light and Catppuccin Mocha dark themes, compare a simple
channel-members tooltip and the rich Add agents team tooltip; both
should use secondary semantics with readable nested content.
7. Move the pointer from a trigger toward its tooltip; confirm the
tooltip dismisses rather than remaining open as hoverable content.

## Screenshots

The matrix below covers both the default light theme and Catppuccin
Mocha with an orange accent. Message/issue-chip rows affected by the
stable-label pivot are temporarily omitted until they can be recaptured
from the real built UI; the prior images showed the obsolete expanding
inline label.

| State | Default light | Dark · orange accent |
|---|---|---|
| Public stream channel tooltip | ![Public stream channel tooltip —
default
light](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/light-default/01-public-stream-channel-tooltip.png)
| ![Public stream channel tooltip — dark orange
accent](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/dark-orange/01-public-stream-channel-tooltip.png)
|
| Private forum channel tooltip | ![Private forum channel tooltip —
default
light](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/light-default/02-private-forum-channel-tooltip.png)
| ![Private forum channel tooltip — dark orange
accent](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/dark-orange/02-private-forum-channel-tooltip.png)
|
| Public forum channel tooltip | ![Public forum channel tooltip —
default
light](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/light-default/03-forum-channel-tooltip.png)
| ![Public forum channel tooltip — dark orange
accent](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/dark-orange/03-forum-channel-tooltip.png)
|
| Channel references, including unresolved | ![Channel references,
including unresolved — default
light](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/light-default/04-unresolved-channel-reference.png)
| ![Channel references, including unresolved — dark orange
accent](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/dark-orange/04-unresolved-channel-reference.png)
|
| Unknown channel permalink | ![Unknown channel permalink — default
light](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/light-default/05-unknown-channel-permalink.png)
| ![Unknown channel permalink — dark orange
accent](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/dark-orange/05-unknown-channel-permalink.png)
|
| Archived channel tooltip | ![Archived channel tooltip — default
light](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/light-default/06-archived-channel-tooltip.png)
| ![Archived channel tooltip — dark orange
accent](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/dark-orange/06-archived-channel-tooltip.png)
|
| Repository entity | ![Repository entity — default
light](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/light-default/13-repository-entity.png)
| ![Repository entity — dark orange
accent](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/dark-orange/13-repository-entity.png)
|
| Pull request entity | ![Pull request entity — default
light](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/light-default/14-pull-request-entity.png)
| ![Pull request entity — dark orange
accent](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/chip-metadata/dark-orange/14-pull-request-entity.png)
|
| Entity metadata fallback | ![Corrected entity metadata fallback
tooltip — default
light](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/17-entity-metadata-fallback-corrected-light.png)
| ![Corrected entity metadata fallback tooltip — dark orange
accent](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6252/17-entity-metadata-fallback-corrected-dark-orange.png)
|



### Tooltip semantic surface spot check

| Buzz light | Catppuccin Mocha dark |
|---|---|
| ![Rich team tooltip on the secondary surface in Buzz
light](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6290/buzz-team-tooltip.png)
| ![Rich team tooltip on the secondary surface in Catppuccin Mocha
dark](https://d24qwcpro867f5.cloudfront.net/repos/buzz/prs/6290/catppuccin-mocha-team-tooltip.png)
|

---------

Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: Carl <acda9e433d19dcd0e6b6840f7f4b98f3a56f1fab98049d444c087019e6d36560@buzz.block.builderlab.xyz>
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