Visitar URL original
Fix the bugs the desktop release gate found by chrisnojima · Pull Request #29852 · keybase/client · GitHub
Skip to content

Fix the bugs the desktop release gate found - #29852

Open
chrisnojima wants to merge 10 commits into
nojima/HOTPOT-e2e-gate-7-people-settingsfrom
nojima/HOTPOT-e2e-gate-8-bug-fixes
Open

chrisnojima wants to merge 10 commits into
nojima/HOTPOT-e2e-gate-7-people-settingsfrom
nojima/HOTPOT-e2e-gate-8-bug-fixes

Conversation

@chrisnojima

@chrisnojima chrisnojima commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Eighth of eight stacked PRs. This one fixes the app bugs that the desktop release gate (PRs 1–7) found on master. Each fix is proven by its gate test, which failed on the old code and passes now, and its entry in known-failures.ts is removed. One known failure is left: the chat-scroll paging drift, which needs its own effort.

Fixes

  • Menubar recent files never refresh (a regression from Version 670 - clean2 #29122): the widget loaded them once per main-window session. It reloads them on every show again.
  • Every decrypt failure said "Failed to decrypt text.": the service sends the cause code as a string, and the lookup compared it to numbers. The code is parsed first.
  • "Following" never read "Unfollow" on hover: the desktop Box2 dropped onMouseEnter. It now passes it to its element.
  • An untouched avatar crop saved NaN (user and team avatars): the crop was set only by pointer moves. Saving untouched saves the view the image opened on. For the user avatar, the NaN also dropped the service connection.
  • A picked avatar opened at its natural size in the crop's top-left corner: a small image sat in the corner, and a large one showed only its corner. A picked image now opens scaled to cover the circle and centered, and it can't be zoomed out past that, so every crop is a full square. The crop reads layout sizes, so a modal that is still scaling in doesn't skew them.
  • Unlock folders window: the device list is left aligned, and the paper key input is wider.
  • The team's "Feature on my profile" box showed the team's publicity, not your own showcase of it, so unchecking it could send nothing. It now reads your showcase from the teams list and sends whatever you set. The box stays disabled until that list has the team.
  • "Backup all files" reported more started jobs than it made: SimpleFSArchiveStart returned an empty job with no error for a folder that was never written. It now refuses that folder:
    • backing up all files counts the folder as skipped;
    • backing up all git repos lists it under errors;
    • a single-folder backup says "Nothing was backed up: …". Before, every start error was hidden;
    • the CLI prints the error instead of an empty job.
  • A late press on a backup job opened Finder instead of cancelling. When a job finished, "Show in Finder" took Cancel's place. Dismiss now takes that spot, and Show in Finder moves below it.

Gate screenshots

These are fixes to the report's evidence, not to the app:

  • A step screenshot waits until the window stops changing, for up to 1s, so modals and backdrops are no longer caught mid-fade. A step that has to act on a passing state (the in-flight upload) opts out.
  • The team page link waits for its tab to load. The paste waits for its upload to finish. A download waits out its "Saved" toast so it doesn't show up in the next test. Giphy results and the info panel's media wait until their images are drawn.
  • Mark unread now has screenshots of the orange line and of the inbox row marked unread.
  • The zoomed-avatar test now actually zooms (its click used to stop the zoom) and checks that it did. The unzoomed test checks that the image fills the circle.

Decisions for review

  • The avatar crop no longer zooms out below the circle. Before, it could go down to 0.3x, which left gaps and produced non-square crops.

  • The backup "Skipped N folders" count now includes never-written folders. Its note says so. That's what makes "Started N" true.

  • A failed single-folder backup still offers "See progress". Changing that is a separate UX call.

Evidence

Full release on this tree (yarn test:e2e:desktop:release):

ok   flows-coverage  354 passed; 1 known on master (chat-scroll paging)
ok   render          178 rendered, 0 failed
ok   census          routes 135 covered, 0 unclaimed; writes 130 covered, 0 unsent; windows 4 covered
ok   secrets         no secret in 11779 artifacts
ok   watchdog        renderer never went blank

That run's other failures:

  • Video fullscreen: the Mac's screen locked mid-run. The test fails by name when that happens, and macOS refuses fullscreen to a window in a locked session.
  • File previews: KBFS's local HTTP server served a stale view after the gate's account switches. That's a pre-existing KBFS bug.
  • Two upload tests, flaky: the app's folder listing stayed stale after an upload. That's a pre-existing app bug; the tests stay strict.

The run before it, on the same fixes, had previews and uploads green.

The avatar, unlock-folders and screenshot changes were checked with a targeted run, not a full release: the 12 affected flows passed (team page link, paste, three drops, both mark-unread tests, the info panel attachments tab, giphy, skin tone, both avatar tests), and yarn visual:render 'window/unlock-folders*' rendered both screens.

Unit tests cover the crypto status mapping, Box2's desktop events, the crop's cover/centre, zoom floor and unlaid-out fallback, and the showcase source. A Go test covers the never-written folder. yarn lint:all, yarn test:unit and go test ./kbfs/simplefs/ are clean.

@chrisnojima
chrisnojima added this pull request to stack #29846 October 29, 2026 16:40
In hot dev, Vite serves the renderer as hundreds of module requests to localhost. Without the
per-host limit, a reload opens them all at once, overflows the dev server's listen queue, and
the reset requests fail as refused, leaving the window blank. Vite's HMR runs over a WebSocket,
which the limit doesn't cover. Cold dev and production load from the app scheme and the
service's HTTP servers bind 127.0.0.1, so the switch matched nothing there.
@chrisnojima
chrisnojima marked this pull request as ready for review October 29, 2026 18:49
…; chat flows send through peers instead of the simulator
…t only on the e2e team, seed or fail instead of skipping
…secret scan, known failures; account and device flows
menubar: reload recent files on every show. crypto: read the decrypt/verify cause code the service sends as a string. box2: pass onMouseEnter to the desktop element. edit-avatar: save the crop the image opens on when it is left untouched, and open a new image on the default crop. teams: read your showcase of a team from the teams list, send the toggle as set, and disable the box until it is known. simplefs: refuse to start a backup of a folder that was never written, and count it as skipped when backing up all files. settings: say when a single backup did not start; put Dismiss where Cancel was on a finished backup row. The gate's tests for each now pass and their known-failure entries are removed.
@chrisnojima
chrisnojima force-pushed the nojima/HOTPOT-e2e-gate-8-bug-fixes branch from 2dfd2bf to 1ea030f Compare October 29, 2026 18:50
…eenshots wait for the screen to settle

edit-avatar: a picked image opens scaled to cover the crop circle and centered, and can't be zoomed out
past it, so every crop is a full square. Sizes come from layout, not the screen, so a modal still scaling
in doesn't skew them. unlock-folders: the device list is left aligned and the paper key input is wider.

Gate: a step screenshot waits until the window stops changing (up to 1s). The team page link waits for
its tab to load, the paste waits for the upload, a download waits out its Saved toast, giphy and the
info panel's media wait for their images, and mark unread gets screenshots of the line and the inbox
row. The zoomed-avatar test now actually zooms (its click stopped the zoom) and checks it did; the
unzoomed one checks the image fills the circle.
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.

1 participant