upstream(sync): Tier 2 desktop chrome polish (#6000, #5821, #6260, #6263, #6062, #6163) - #314
Conversation
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
DONEAll six Tier 2 ports are implemented, tested and committed (
Tests added: Rust wire-format + oversize-avatar tests ( Gates (after
Evidence on the session box (also attached to the Devin session, and the screenshots are embedded in the Testing section above):
IN PROGRESSNothing half-done — the diff is coherent and self-contained. Two deliberate stopping points:
TODO / NEXT
Known risks / expected conflicts: |
200768b to
db9da58
Compare
|
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:
(plus Verification: a clean detached worktree at Post-rebase onto |
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>
db9da58 to
1cfbf4f
Compare
|
Rebased
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). |
|
Post-rebase full-window captures on 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. Community rail, sidebar expanded (block#6000)Two communities ( 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). Collapsed gutter without a rail (block#6000)Single community (rail omitted). Collapsed sidebar leaves the 8px |
|
CI follow-up after the rebase onto 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
Not chasing these on this PR. Touched chrome-polish specs ( |




Summary
Ports the six Tier 2 desktop chrome changes from the upstream Buzz
0.5.18sync (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).AppShellChannelSurfacenow knows whether a community rail is present; when the sidebar collapses without a rail it renders an 8pxbg-sidebargutter (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 fromz-0toz-20so it stays above the surface, and the offcanvas sidebar body is wrapped in adata-sidebar-transition-contentelement that scales/translates/fades (withmotion-reduceopt-out) while the shell itself stays opaque.TooltipProvidernow defaults todelayDuration=500,skipDelayDuration=0, andpopover.tsxexportsDEFAULT_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.agent_snapshot.rscaps the PNG body's longest edge atMAX_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.useSnapshotSendControllergainsgetCurrentError()so the share dialogs surface the synchronous failure text.emojiMartPrewarm.tsowns the emoji data import, drops poisoned"{}"emoji-mart.frequently/lastentries, and defersinit({ data })viarequestIdleCallback(250 mssetTimeoutfallback).EmojiPickerconsumes data through that module, so Frequently used survives picker reopen.ConfigWriteMechanismaddsrename_all_fields = "camelCase", soenv_key/config_id/config_keygo over the wire asenvKey/configId/configKey, matching the TypeScript bridge (e2eBridge.tsmocks updated). Rust tests pin the exact wire shape, nestedwriteVia, and rejection of the old snake_case payload.opacity-80classes 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
open-projects-view; Crew has no Projects destination (guardrail upstream(sync): Guardrail — preserve channel-first IA during 0.5.18 merge #278), so the assertion was re-homed onto Crew's existingopen-wiki-viewrow.crew-darkdefault theme inmain.tsx, the@containertimeline wrapper, Crew's date formatters inMessageTimestamp, and the sidebar'sgroup-data-[collapsible=offcanvas]:pointer-events-nonebehaviour.desktop/tests/e2e/sidebar-offcanvas-rail.spec.tswas not ported: its assertions (mid-transition opacity/scale/translate, pointer hit-testing, rail layering) are already covered by the additions to Crew'ssidebar.spec.tsandcommunity-rail.spec.ts, and skipping the extra file keeps this diff smaller during the parallel sync stack.Related issue
Fixes #292 (part of #285; guardrails per #278).
Testing
Gates (all from
. ./bin/activate-hermit):pnpm --filter buzz checkpnpm --filter buzz typecheckpnpm --filter buzz testjust check-compilejust test-unitbuzz-cli(3 command-inventory tests) andbuzz-db(embedded_migrator_contains_consolidated_initial_schema) — reproduced identically on a cleanmainworktree, and this PR touches nocrates/fileTDD: each non-UI change started RED. block#6263 failed with
ERR_MODULE_NOT_FOUNDbeforeemojiMartPrewarm.tsexisted; block#6062 failed assertingenvKey/configId/configKeywhile serde still emitted snake_case; block#6260 failed to compile against the missingMAX_PNG_BODY_EDGEand 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:
E2E (
pnpm --filter buzz build:e2e, thenxvfb-run -a pnpm exec playwright testfromdesktop/): the touched specs pass (community-rail,sidebar,badge,custom-emoji,composer-tooltip-dismiss). Eightagents.spec.tsfailures (narrow-view overflow, catalog chooser/detail, persona sharing, start pill) reproduce byte-for-byte on a cleanmainworktree, and thecommunity-railkeyboard-reorder test is flaky onmaintoo (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:
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:
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) ondevin/issue-292-tier2-chrome-polish:AppShellChannelSurface,data-collapsed-content-gutter+pl-2), community railz-0->z-20, offcanvasdata-sidebar-transition-contentscale/translate/fade withmotion-reduceopt-out.TooltipProviderdefaults,DEFAULT_POPOVER_HOVER_OPEN_DELAY_MS), per-call-site overrides removed.MAX_PNG_BODY_EDGE = 512(Lanczos3), manifest keeps the untouched source avatar reference;useSnapshotSendController.getCurrentError().emojiMartPrewarm.ts(deferredinit({ data }), poisoned"{}"recents cleanup) consumed byEmojiPicker.ConfigWriteMechanismserializesenvKey/configId/configKey..sidebar-primary-menu [data-sidebar="menu-button"]:not([data-active="true"]).Tests added: Rust wire-format + oversize-avatar tests (
config_bridge/types.rs,agent_snapshot_tests.rs),emojiMartPrewarm.test.mjs, and E2E additions insidebar.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 (missingMAX_PNG_BODY_EDGE, then the 512 px dimension assertion).Gates (after
. ./bin/activate-hermit):pnpm --filter buzz checkpnpm --filter buzz typecheckpnpm --filter buzz testjust check-compilejust test-unitbuzz-cli(3 command-inventory tests) andbuzz-db(embedded_migrator_contains_consolidated_initial_schema) — reproduced identically on a cleanmainworktree; this PR touches nocrates/fileEvidence on the session box (also attached to the Devin session, and the screenshots are embedded in the Testing section above):
/home/ubuntu/evidence/before/0{1,2,3,4}-*.png,/home/ubuntu/evidence/after/0{1,2,3,4}-*.png/home/ubuntu/evidence/gate-check.log,gate-typecheck.log,gate-pnpm-test.log,gate-check-compile.log,gate-just-test-unit.log/home/ubuntu/evidence/rust-snapshot-config-tests.log(1086 passed, 0 failed)/home/ubuntu/evidence/red-6260-before-measure.log— 2764×4096 / 166,530 bytes before vs 345×512 / 64,089 bytes aftermainbaseline:/home/ubuntu/evidence/e2e-green.log,/home/ubuntu/evidence/e2e-baseline-main.logIN PROGRESS
Nothing half-done — the diff is coherent and self-contained. Two deliberate stopping points:
desktop/tests/e2e/sidebar-offcanvas-rail.spec.tswas not ported; the upstream file is staged locally at/tmp/up/sidebar-offcanvas-rail.spec.tsif someone wants to adapt it. Its assertions (mid-transition opacity/scale/translate, pointer hit-testing, rail layering) are already covered by the additions tosidebar.spec.tsandcommunity-rail.spec.ts.TODO / NEXT
sidebar-offcanvas-rail.spec.ts(theme screenshots may need Crew'screw-darkdefault).desktop-e2e-adversarial/desktop-e2e-manual-drive) for multi-community rail + collapse and emoji-recents-after-reopen.NuncioCrew CIruns 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.tsxanddesktop/tests/e2e/community-rail.spec.tsalready needed manual conflict resolution against upstream and are the likeliest conflict sites with sibling 0.5.18 sync PRs;desktop/tests/e2e/agents.spec.tsalso carries small message-text updates. Pre-existing flake to expect on reruns: thecommunity-rail.spec.tskeyboard-reorder test (3/5 failures on cleanmain) and 8agents.spec.tsfailures that also reproduce onmain.Link to Devin session: https://app.devin.ai/sessions/06c3e00a34ea443f9dadf877aca2257c
Requested by: @oscarlehuu