Skip to content

upstream(sync): Tier 2 desktop chrome polish (#6000, #5821, #6260, #6263, #6062, #6163) - #314

Merged
oscarlehuu merged 1 commit into
mainfrom
devin/issue-292-tier2-chrome-polish
Aug 22, 2026
Merged

upstream(sync): Tier 2 desktop chrome polish (#6000, #5821, #6260, #6263, #6062, #6163)#314
oscarlehuu merged 1 commit into
mainfrom
devin/issue-292-tier2-chrome-polish

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Aug 22, 2026

Copy link
Copy Markdown

Summary

Ports the six Tier 2 desktop chrome changes from the upstream Buzz 0.5.18 sync (meta #285). Crew's channel-first IA is untouched — no Projects rail, Workbench picker, or top-nav changes. Upstream block#6008 (workflow-library cards) is out of scope (Crew #274).

  • fix(desktop-chrome): preserve balanced layout when sidebar collapses block/buzz#6000 — balanced layout on sidebar collapse. AppShellChannelSurface now knows whether a community rail is present; when the sidebar collapses without a rail it renders an 8px bg-sidebar gutter (data-collapsed-content-gutter) and pads the surface, so the channel column keeps its balance instead of butting against the window edge. The rail moves from z-0 to z-20 so it stays above the surface, and the offcanvas sidebar body is wrapped in a data-sidebar-transition-content element that scales/translates/fades (with motion-reduce opt-out) while the shell itself stays opaque.
  • fix(shared-ui): delay hover disclosures by default block/buzz#5821 — hover disclosures dwell by default. TooltipProvider now defaults to delayDuration=500, skipDelayDuration=0, and popover.tsx exports DEFAULT_POPOVER_HOVER_OPEN_DELAY_MS = 500. Per-call-site overrides (message timeline/timestamp, main.tsx, reactions, community switcher, inbox detail, bot activity, PubKey, inline emoji, channel activity, user profile) are removed in favour of the shared defaults.
  • fix(desktop): downscale large avatars for agent-share PNG body block/buzz#6260 — downscale large avatars for agent-share PNG. agent_snapshot.rs caps the PNG body's longest edge at MAX_PNG_BODY_EDGE = 512 (Lanczos3), passing through existing PNGs only when they already fit the body cap; the manifest still carries the untouched source avatar reference. useSnapshotSendController gains getCurrentError() so the share dialogs surface the synchronous failure text.
  • fix(desktop): restore emoji recents block/buzz#6263 — restore emoji recents. New emojiMartPrewarm.ts owns the emoji data import, drops poisoned "{}" emoji-mart.frequently/last entries, and defers init({ data }) via requestIdleCallback (250 ms setTimeout fallback). EmojiPicker consumes data through that module, so Frequently used survives picker reopen.
  • fix(desktop): emit camelCase config-write payload fields block/buzz#6062 — camelCase config-write payload. ConfigWriteMechanism adds rename_all_fields = "camelCase", so env_key/config_id/config_key go over the wire as envKey/configId/configKey, matching the TypeScript bridge (e2eBridge.ts mocks updated). Rust tests pin the exact wire shape, nested writeVia, and rejection of the old snake_case payload.
  • fix(desktop): align preview sidebar row styling block/buzz#6163 — preview sidebar row styling. Inactive emphasis moves from per-row opacity-80 classes to one .sidebar-primary-menu [data-sidebar="menu-button"]:not([data-active="true"]) CSS rule, so feature-gated preview rows (Pulse, Wiki, Workflows) match Inbox/Agents instead of rendering at full emphasis.

Crew divergences from upstream

Related issue

Fixes #292 (part of #285; guardrails per #278).

Testing

Gates (all from . ./bin/activate-hermit):

Gate Result
pnpm --filter buzz check pass
pnpm --filter buzz typecheck pass
pnpm --filter buzz test pass
just check-compile pass
just test-unit fails only in buzz-cli (3 command-inventory tests) and buzz-db (embedded_migrator_contains_consolidated_initial_schema) — reproduced identically on a clean main worktree, and this PR touches no crates/ file

TDD: each non-UI change started RED. block#6263 failed with ERR_MODULE_NOT_FOUND before emojiMartPrewarm.ts existed; block#6062 failed asserting envKey/configId/configKey while serde still emitted snake_case; block#6260 failed to compile against the missing MAX_PNG_BODY_EDGE and then failed the 512px dimension assertion. All GREEN after implementation (managed_agents:: Rust suite: 1086 passed, 0 failed).

Quantitative check for block#6260 — same 2764×4096 source avatar, encoded snapshot body:

body dimensions encoded PNG
before 2764×4096 166,530 bytes
after 345×512 64,089 bytes

E2E (pnpm --filter buzz build:e2e, then xvfb-run -a pnpm exec playwright test from desktop/): the touched specs pass (community-rail, sidebar, badge, custom-emoji, composer-tooltip-dismiss). Eight agents.spec.ts failures (narrow-view overflow, catalog chooser/detail, persona sharing, start pill) reproduce byte-for-byte on a clean main worktree, and the community-rail keyboard-reorder test is flaky on main too (3/5 runs fail there, 1/3 here).

Full-viewport before/after, sidebar collapsed — the after shot keeps the sidebar-coloured gutter and the balanced channel column:

before after
sidebar collapsed before sidebar collapsed after

Hover dwell at 300 ms vs 800 ms on the composer mention button — before, the tooltip is already open at 300 ms; after, it appears only past the 500 ms dwell:

300 ms 800 ms
before hover 300ms before hover 800ms before
after hover 300ms after hover 800ms after

The after shots also show block#6163: inactive Pulse/Wiki/Workflows rows now render at the same 0.8 emphasis as Inbox/Agents.


NOTES (handover)

DONE

All six Tier 2 ports are implemented, tested and committed (200768bd6, DCO-signed) on devin/issue-292-tier2-chrome-polish:

Tests added: Rust wire-format + oversize-avatar tests (config_bridge/types.rs, agent_snapshot_tests.rs), emojiMartPrewarm.test.mjs, and E2E additions in sidebar.spec.ts, community-rail.spec.ts, badge.spec.ts, custom-emoji.spec.ts, composer-tooltip-dismiss.spec.ts. TDD RED was demonstrated for block#6263 (ERR_MODULE_NOT_FOUND), block#6062 (snake_case wire assertions) and block#6260 (missing MAX_PNG_BODY_EDGE, then the 512 px dimension assertion).

Gates (after . ./bin/activate-hermit):

Gate Result
pnpm --filter buzz check pass
pnpm --filter buzz typecheck pass
pnpm --filter buzz test pass
just check-compile pass
just test-unit fails only in buzz-cli (3 command-inventory tests) and buzz-db (embedded_migrator_contains_consolidated_initial_schema) — reproduced identically on a clean main worktree; this PR touches no crates/ file

Evidence on the session box (also attached to the Devin session, and the screenshots are embedded in the Testing section above):

  • Full-viewport before/after: /home/ubuntu/evidence/before/0{1,2,3,4}-*.png, /home/ubuntu/evidence/after/0{1,2,3,4}-*.png
  • Gate logs: /home/ubuntu/evidence/gate-check.log, gate-typecheck.log, gate-pnpm-test.log, gate-check-compile.log, gate-just-test-unit.log
  • Rust GREEN: /home/ubuntu/evidence/rust-snapshot-config-tests.log (1086 passed, 0 failed)
  • fix(desktop): downscale large avatars for agent-share PNG body block/buzz#6260 quantitative before/after: /home/ubuntu/evidence/red-6260-before-measure.log — 2764×4096 / 166,530 bytes before vs 345×512 / 64,089 bytes after
  • E2E branch vs clean-main baseline: /home/ubuntu/evidence/e2e-green.log, /home/ubuntu/evidence/e2e-baseline-main.log

IN PROGRESS

Nothing half-done — the diff is coherent and self-contained. Two deliberate stopping points:

  • Upstream's new desktop/tests/e2e/sidebar-offcanvas-rail.spec.ts was not ported; the upstream file is staged locally at /tmp/up/sidebar-offcanvas-rail.spec.ts if someone wants to adapt it. Its assertions (mid-transition opacity/scale/translate, pointer hit-testing, rail layering) are already covered by the additions to sidebar.spec.ts and community-rail.spec.ts.
  • The pre-approved end-to-end testing-agent run was cut short by a usage limit, so the UI verification here is the Playwright specs plus the full-viewport before/after captures, not an interactive adversarial drive.

TODO / NEXT

  1. Optionally port/adapt sidebar-offcanvas-rail.spec.ts (theme screenshots may need Crew's crew-dark default).
  2. Optionally run the adversarial UI drive (desktop-e2e-adversarial / desktop-e2e-manual-drive) for multi-community rail + collapse and emoji-recents-after-reopen.
  3. CI: no CI failure attributable to this change has been observed. Per the parent session, NuncioCrew CI runs are being cancelled deliberately while the merge queue is serialized, so a cancelled run here is expected and was not investigated or re-triggered. Nothing under .github/ was touched.

Known risks / expected conflicts: desktop/src/shared/ui/sidebar.tsx, desktop/src/app/AppShellChannelSurface.tsx and desktop/tests/e2e/community-rail.spec.ts already needed manual conflict resolution against upstream and are the likeliest conflict sites with sibling 0.5.18 sync PRs; desktop/tests/e2e/agents.spec.ts also carries small message-text updates. Pre-existing flake to expect on reruns: the community-rail.spec.ts keyboard-reorder test (3/5 failures on clean main) and 8 agents.spec.ts failures that also reproduce on main.

Link to Devin session: https://app.devin.ai/sessions/06c3e00a34ea443f9dadf877aca2257c
Requested by: @oscarlehuu

@devin-ai-integration

Copy link
Copy Markdown
Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

@devin-ai-integration

Copy link
Copy Markdown
Author

DONE

All six Tier 2 ports are implemented, tested and committed (200768bd6, DCO-signed) on devin/issue-292-tier2-chrome-polish:

Tests added: Rust wire-format + oversize-avatar tests (config_bridge/types.rs, agent_snapshot_tests.rs), emojiMartPrewarm.test.mjs, and E2E additions in sidebar.spec.ts, community-rail.spec.ts, badge.spec.ts, custom-emoji.spec.ts, composer-tooltip-dismiss.spec.ts. TDD RED was demonstrated for block#6263 (ERR_MODULE_NOT_FOUND), block#6062 (snake_case wire assertions) and block#6260 (missing MAX_PNG_BODY_EDGE, then the 512 px dimension assertion).

Gates (after . ./bin/activate-hermit):

Gate Result
pnpm --filter buzz check pass
pnpm --filter buzz typecheck pass
pnpm --filter buzz test pass
just check-compile pass
just test-unit fails only in buzz-cli (3 command-inventory tests) and buzz-db (embedded_migrator_contains_consolidated_initial_schema) — reproduced identically on a clean main worktree; this PR touches no crates/ file

Evidence on the session box (also attached to the Devin session, and the screenshots are embedded in the Testing section above):

  • Full-viewport before/after: /home/ubuntu/evidence/before/0{1,2,3,4}-*.png, /home/ubuntu/evidence/after/0{1,2,3,4}-*.png
  • Gate logs: /home/ubuntu/evidence/gate-check.log, gate-typecheck.log, gate-pnpm-test.log, gate-check-compile.log, gate-just-test-unit.log
  • Rust GREEN: /home/ubuntu/evidence/rust-snapshot-config-tests.log (1086 passed, 0 failed)
  • fix(desktop): downscale large avatars for agent-share PNG body block/buzz#6260 quantitative before/after: /home/ubuntu/evidence/red-6260-before-measure.log — 2764×4096 / 166,530 bytes before vs 345×512 / 64,089 bytes after
  • E2E branch vs clean-main baseline: /home/ubuntu/evidence/e2e-green.log, /home/ubuntu/evidence/e2e-baseline-main.log

IN PROGRESS

Nothing half-done — the diff is coherent and self-contained. Two deliberate stopping points:

  • Upstream's new desktop/tests/e2e/sidebar-offcanvas-rail.spec.ts was not ported; the upstream file is staged locally at /tmp/up/sidebar-offcanvas-rail.spec.ts if someone wants to adapt it. Its assertions (mid-transition opacity/scale/translate, pointer hit-testing, rail layering) are already covered by the additions to sidebar.spec.ts and community-rail.spec.ts.
  • The pre-approved end-to-end testing-agent run was cut short by a usage limit, so the UI verification here is the Playwright specs plus the full-viewport before/after captures, not an interactive adversarial drive.

TODO / NEXT

  1. Optionally port/adapt sidebar-offcanvas-rail.spec.ts (theme screenshots may need Crew's crew-dark default).
  2. Optionally run the adversarial UI drive (desktop-e2e-adversarial / desktop-e2e-manual-drive) for multi-community rail + collapse and emoji-recents-after-reopen.
  3. CI: no CI failure attributable to this change has been observed. Per the parent session, NuncioCrew CI runs are being cancelled deliberately while the merge queue is serialized, so a cancelled run here is expected and was not investigated or re-triggered. Nothing under .github/ was touched.

Known risks / expected conflicts: desktop/src/shared/ui/sidebar.tsx, desktop/src/app/AppShellChannelSurface.tsx and desktop/tests/e2e/community-rail.spec.ts already needed manual conflict resolution against upstream and are the likeliest conflict sites with sibling 0.5.18 sync PRs; desktop/tests/e2e/agents.spec.ts also carries small message-text updates. Pre-existing flake to expect on reruns: the community-rail.spec.ts keyboard-reorder test (3/5 failures on clean main) and 8 agents.spec.ts failures that also reproduce on main.

@devin-ai-integration
devin-ai-integration Bot force-pushed the devin/issue-292-tier2-chrome-polish branch from 200768b to db9da58 Compare August 22, 2026 10:40
@devin-ai-integration

Copy link
Copy Markdown
Author

CI note (Desktop Smoke E2E (2)): the 4 failures on this run are pre-existing on the base branch, not caused by this PR.

Failing tests:

  • edit-agent.spec.ts:288 shows baked defaults in the instance editor
  • edit-agent.spec.ts:318 explicit global defaults override baked labels in the instance editor
  • entity-link-recipient-cards.spec.ts:20 agent-style message with bare buzz:// links renders entity cards without snapshot tags
  • inbox-reactions.spec.ts:36 inbox reaction on a thread-reply mention persists after refetch

(plus huddle-transcription.spec.ts:779, flaky — passed on retry)

Verification: a clean detached worktree at origin/main (52042c443, this PR's merge base) with pnpm --filter buzz build:e2e + xvfb-run -a pnpm exec playwright test tests/e2e/edit-agent.spec.ts tests/e2e/entity-link-recipient-cards.spec.ts tests/e2e/inbox-reactions.spec.ts --project=smoke reproduces exactly the same 4 failures (4 failed, 9 passed) — identical test IDs to this branch's run. This PR touches none of those specs or their source paths.

Post-rebase onto 52042c443, pnpm --filter buzz check, typecheck and test all pass on this branch.

Ports six Tier 2 upstream Buzz 0.5.18 desktop changes:

- block#6000: keep a sidebar-coloured 8px gutter and lift the community rail above
  the surface so collapsing the sidebar no longer unbalances the channel
  layout; sidebar transition content scales/translates/fades.
- block#5821: hover disclosures dwell 500ms by default (shared TooltipProvider and
  popover hover constant) instead of per-call-site overrides.
- block#6260: downscale oversize agent-share avatars to a 512px longest edge for the
  PNG body while the manifest keeps the untouched source reference.
- block#6263: prewarm emoji-mart data through a shared module and normalise poisoned
  "{}" recents so Frequently used survives picker reopen.
- block#6062: serialize ConfigWriteMechanism fields as camelCase to match the
  TypeScript wire contract.
- block#6163: move inactive sidebar row emphasis into a CSS rule on the primary menu
  so gated rows match Inbox/Agents.

Fixes #292

Signed-off-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Oscar Le <oscar.lehuu@gmail.com>
@cursor
cursor Bot force-pushed the devin/issue-292-tier2-chrome-polish branch from db9da58 to 1cfbf4f Compare August 22, 2026 13:06
@cursor

cursor Bot commented Aug 22, 2026

Copy link
Copy Markdown

Rebased devin/issue-292-tier2-chrome-polish onto current origin/main (2590cf595, includes #315/#270 trees+v3, #316 notif identity, #317 font/density).

Fresh full-window screenshot + recording of collapsed gutter, community rail, and inactive row emphasis coming next. NuncioCrew Gate will be rerun if it lands cancelled (slot starvation).

@cursor

cursor Bot commented Aug 22, 2026

Copy link
Copy Markdown

Post-rebase full-window captures on 1cfbf4fa2 (onto origin/main 2590cf595). Channel-first IA is unchanged — no Projects rail, Workbench picker, or top-nav.

Walkthrough recording (inactive rows → community rail expanded → rail stays after sidebar collapse → collapsed gutter without a rail):

tier2-chrome-polish-gutter-rail-rows.mp4

Inactive primary-row emphasis (block#6163)

Inbox is active. Pulse, Wiki, Agents, and Workflows sit at the shared 0.8 emphasis instead of full-weight preview rows.

01-inactive-row-emphasis

Community rail, sidebar expanded (block#6000)

Two communities (A/B) keep the rail at z-20. Channel column stays beside it.

02-community-rail-expanded

Community rail, sidebar collapsed (block#6000)

Ctrl/Cmd+S collapses the channel sidebar. The rail stays fully visible; no 8px content gutter (rail already balances the edge).

03-community-rail-collapsed-sidebar

Collapsed gutter without a rail (block#6000)

Single community (rail omitted). Collapsed sidebar leaves the 8px bg-sidebar gutter so the channel column does not butt the window edge.

04-collapsed-sidebar-gutter

@oscarlehuu
oscarlehuu merged commit 82187d8 into main Aug 22, 2026
8 of 14 checks passed
@cursor

cursor Bot commented Aug 22, 2026

Copy link
Copy Markdown

CI follow-up after the rebase onto 2590cf595:

NuncioCrew Gate remains green (required). Advisory Desktop Smoke E2E / Integration are red and do not block merge (D-032 / D-047).

Failures on this run that were already called out on the previous head, or that docs/crew/CI.md lists as accepted upstream drift:

  • community-rail.spec.ts keyboard-reorder (known flake on main)
  • agents.spec.ts narrow overflow / catalog chooser / catalog detail / share-to-catalog / emoji avatar / community discovery / unresolved publisher / start pill
  • edit-agent.spec.ts:288 and :318, entity-link-recipient-cards.spec.ts:20, inbox-reactions.spec.ts:36
  • profile.spec.ts runtime-tab / Inbox badge, integration.spec.ts live mention refetch

Not chasing these on this PR. Touched chrome-polish specs (sidebar, community-rail gutter/rail, badge inactive emphasis, custom-emoji, composer-tooltip-dismiss) are not in the fail set.

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.

upstream(sync): Tier 2 desktop chrome polish (#6000, #5821, #6260, #6263, #6062, #6163)

1 participant