Skip to content

v0.21.4

Choose a tag to compare

@github-actions github-actions released this 18 Aug 15:53
· 25 commits to main since this release

What's new

Fixed

  • The overflow menus open where you can see them.

Internal

  • The test suite cleans up after itself.
Full notes

Fixed

  • The overflow menus open where you can see them. Four controls did nothing at all when clicked
    (#15): the file viewer's View options ,
    which is the only home word wrap has ever had, the Changed-files and History view-options
    sliders, the branch switcher, and the recent commit messages history button. Every one of
    them really did open. aria-expanded went true, every item was in the DOM, nothing was logged,
    and the menu was drawn at translate(0, -200%), two menu-heights above the top of the window. On
    a 1600x900 desktop the file viewer's menu measured its top edge at -594px. Neither the markup
    nor the console said anything was wrong, which is how it survived four releases and one previous
    fix attempt.
    The cause is one line of nesting. reka's MenuRoot, PopoverRoot and TooltipRoot each render a
    PopperRoot, which provides the anchor its popper positions against, and every trigger
    registers itself through PopperAnchor, which injects the nearest one. With the menu
    wrapped around its tooltip, the menu's own trigger sat inside the tooltip and handed its
    anchor to the tooltip's root, while the menu's content, which sits outside the tooltip, injected
    a root that no longer had one. Floating UI never received a reference element, so it never
    positioned anything. The earlier attempt added an inert <span> between the two as-child
    triggers. That is a real and separate bug, but it could not touch this one: this half is
    provide/inject nesting, not DOM attribute merging. Each menu now lives inside its
    tooltip's trigger, so its own root is the nearest for both halves. A new check:popper guardrail
    fails the build on the old shape, because no component test can catch it: jsdom has no layout, so
    an off-screen menu passes every assertion an on-screen one does.

Internal

  • The test suite cleans up after itself. Nothing shipped to users changes, since the daemon's
    own scratch directories were always removed in finally blocks, but running the suite leaked
    directories on developer machines, in two separate ways, and had done since the scratch helper
    was introduced. Locally that came to 1,673,606 files across 46,854 directories in .testtmp/
    between 2026-07-27 and 2026-08-15, plus 1,408 directories and 31,774 files in the real
    %TEMP% from two days of runs. Only a few gigabytes; the damage is the file count, which slows
    every tool that walks the working tree and takes an age to delete once grown. CI never noticed
    because GitHub runners are destroyed after each job, so the entire cost landed on contributors.
    First cause: tests/helpers/scratch.ts moved scratch out of the OS temp directory (it had to,
    because isUnderTempDir refuses to import a repo from there) and, in doing so, silently gave up
    the reaping the OS had been doing for free, without replacing it. .testtmp/ is gitignored, so no
    git-based check could see it either. Scratch now lives under a per-run subdirectory that is torn
    down when the run ends, and a run killed before its teardown is swept by the next run rather than
    left forever. Second cause: the migration to that helper was never finished. Sixteen test files
    still built fixtures directly under %TEMP% with no cleanup, and %TEMP%\gm-* repositories are
    the exact shape of the ~115 junk rows isUnderTempDir and pruneTempRepos exist to clean up. All
    sixteen now use mkScratchDir. tests/db-temp-guard.test.ts still uses a real temp path, because
    proving the guard fires there requires one, but it now records every directory it creates and
    removes them. A new check:testscratch guardrail fails the build if a test reaches for the OS
    temp directory again.

Install

Download the bundle for your platform, extract the whole folder, and run the RepoYeti executable.
No install step or runtime is required; keep the bundled web folder beside the executable.

Platform Asset
Linux (x64) repoyeti-linux-x64.tar.gz
macOS (Apple silicon) repoyeti-macos-arm64.tar.gz
Windows (x64) repoyeti-windows-x64.zip

Source checkouts can update in-app. Portable-bundle installs update by downloading and extracting
the newer archive; nothing is installed without your say-so.
Full history: CHANGELOG.md

Full Changelog: v0.21.3...v0.21.4