mahkoh / jay

A Wayland Compositor
GNU General Public License v3.0
220 stars 11 forks source link

Screenshot Tests Fail on Nvidia Driver #239

Closed krakow10 closed 1 week ago

krakow10 commented 1 month ago

Running cargo test --release --features it fails all the tests that use the logger:

Giant error message ``` running 49 tests test format::formats_dont_panic ... ok test it::tests::t0003_multi_window::single ... FAILED test it::tests::t0007_subsurface::single ... FAILED test it::tests::t0027_input_region::single ... FAILED test it::tests::t0032_content_type::single ... FAILED test it::tests::t0016_scroll_ws::single ... FAILED test it::tests::t0008_map_focus::single ... FAILED test it::tests::t0001_shm_formats::single ... FAILED test it::tests::t0017_remove_unused_ws::single ... FAILED test it::tests::t0025_dnd_focus_change::single ... FAILED test it::tests::t0011_set_keymap::single ... FAILED test it::tests::t0021_preferred_buffer_scale::single ... FAILED test it::tests::t0033_float_size_memoization::single ... FAILED test rect::tests::rects_to_bands ... ok test rect::tests::rects_to_bands2 ... ok test rect::tests::subtract1 ... ok test rect::tests::union1 ... ok test rect::tests::union2 ... ok test it::tests::t0040_virtual_keyboard::single ... FAILED test it::tests::t0041_input_method::single ... FAILED test it::tests::t0022_toplevel_suspended::single ... FAILED test it::tests::t0018_click_to_active_ws::single ... FAILED test it::tests::t0028_top_level_restacking::single ... FAILED test it::tests::t0030_cursor_shape::single ... FAILED test it::tests::t0039_alpha_modifier::single ... FAILED test it::tests::t0031_syncobj::single ... FAILED test it::tests::t0023_xdg_activation::single ... FAILED test it::tests::t0035_scanout_feedback::single ... FAILED test it::tests::t0013_graphics_initialized::single ... FAILED test it::tests::t0036_idle::single ... FAILED test it::tests::t0015_scroll_partial::single ... FAILED test it::tests::t0042_toplevel_select::single ... FAILED test it::tests::t0014_container_scroll_focus::single ... FAILED test it::tests::t0037_toplevel_drag::single ... FAILED test it::tests::t0005_create_seat::single ... FAILED test it::tests::t0026_output_transform::single ... FAILED test it::tests::t0024_foreign_toplevel_list::single ... FAILED test it::tests::t0019_natural_scrolling::single ... FAILED test it::tests::t0012_subsurface_focus::single ... FAILED test it::tests::t0032_data_control::single ... FAILED test it::tests::t0020_surface_offset::single ... FAILED test it::tests::t0029_double_click_float::single ... FAILED test it::tests::t0006_region::single ... FAILED test it::tests::t0034_workspace_restoration::single ... FAILED test it::tests::t0038_subsurface_parent_state::single ... FAILED test it::tests::t0009_tab_focus::single ... FAILED test it::tests::t0004_quit::single ... FAILED test it::tests::t0010_fullscreen_focus::single ... FAILED [2024-07-28T00:17:29.723Z INFO jay::it] Running 32 tests in parallel [2024-07-28T00:17:29.724Z INFO jay::it] Running t0002_window test it::tests::t0002_window::single ... ok failures: ---- it::tests::t0003_multi_window::single stdout ---- thread 'it::tests::t0003_multi_window::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0007_subsurface::single stdout ---- thread 'it::tests::t0007_subsurface::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0027_input_region::single stdout ---- thread 'it::tests::t0027_input_region::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0032_content_type::single stdout ---- thread 'it::tests::t0032_content_type::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0016_scroll_ws::single stdout ---- thread 'it::tests::t0016_scroll_ws::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0008_map_focus::single stdout ---- thread 'it::tests::t0008_map_focus::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0001_shm_formats::single stdout ---- thread 'it::tests::t0001_shm_formats::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace ---- it::tests::t0017_remove_unused_ws::single stdout ---- thread 'it::tests::t0017_remove_unused_ws::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0025_dnd_focus_change::single stdout ---- thread 'it::tests::t0025_dnd_focus_change::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0011_set_keymap::single stdout ---- thread 'it::tests::t0011_set_keymap::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0021_preferred_buffer_scale::single stdout ---- thread 'it::tests::t0021_preferred_buffer_scale::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0033_float_size_memoization::single stdout ---- thread 'it::tests::t0033_float_size_memoization::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0040_virtual_keyboard::single stdout ---- thread 'it::tests::t0040_virtual_keyboard::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0041_input_method::single stdout ---- thread 'it::tests::t0041_input_method::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0022_toplevel_suspended::single stdout ---- thread 'it::tests::t0022_toplevel_suspended::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0018_click_to_active_ws::single stdout ---- thread 'it::tests::t0018_click_to_active_ws::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0028_top_level_restacking::single stdout ---- thread 'it::tests::t0028_top_level_restacking::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0030_cursor_shape::single stdout ---- thread 'it::tests::t0030_cursor_shape::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0039_alpha_modifier::single stdout ---- thread 'it::tests::t0039_alpha_modifier::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0031_syncobj::single stdout ---- thread 'it::tests::t0031_syncobj::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0023_xdg_activation::single stdout ---- thread 'it::tests::t0023_xdg_activation::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0035_scanout_feedback::single stdout ---- thread 'it::tests::t0035_scanout_feedback::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0013_graphics_initialized::single stdout ---- thread 'it::tests::t0013_graphics_initialized::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0036_idle::single stdout ---- thread 'it::tests::t0036_idle::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0015_scroll_partial::single stdout ---- thread 'it::tests::t0015_scroll_partial::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0042_toplevel_select::single stdout ---- thread 'it::tests::t0042_toplevel_select::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0014_container_scroll_focus::single stdout ---- thread 'it::tests::t0014_container_scroll_focus::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0037_toplevel_drag::single stdout ---- thread 'it::tests::t0037_toplevel_drag::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0005_create_seat::single stdout ---- thread 'it::tests::t0005_create_seat::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0026_output_transform::single stdout ---- thread 'it::tests::t0026_output_transform::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0024_foreign_toplevel_list::single stdout ---- thread 'it::tests::t0024_foreign_toplevel_list::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0019_natural_scrolling::single stdout ---- thread 'it::tests::t0019_natural_scrolling::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0012_subsurface_focus::single stdout ---- thread 'it::tests::t0012_subsurface_focus::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0032_data_control::single stdout ---- thread 'it::tests::t0032_data_control::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0020_surface_offset::single stdout ---- thread 'it::tests::t0020_surface_offset::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0029_double_click_float::single stdout ---- thread 'it::tests::t0029_double_click_float::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0006_region::single stdout ---- thread 'it::tests::t0006_region::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0034_workspace_restoration::single stdout ---- thread 'it::tests::t0034_workspace_restoration::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0038_subsurface_parent_state::single stdout ---- thread 'it::tests::t0038_subsurface_parent_state::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0009_tab_focus::single stdout ---- thread 'it::tests::t0009_tab_focus::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0004_quit::single stdout ---- thread 'it::tests::t0004_quit::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) ---- it::tests::t0010_fullscreen_focus::single stdout ---- thread 'it::tests::t0010_fullscreen_focus::single' panicked at src/it/test_logger.rs:21:30: called `Result::unwrap()` on an `Err` value: SetLoggerError(()) failures: it::tests::t0001_shm_formats::single it::tests::t0003_multi_window::single it::tests::t0004_quit::single it::tests::t0005_create_seat::single it::tests::t0006_region::single it::tests::t0007_subsurface::single it::tests::t0008_map_focus::single it::tests::t0009_tab_focus::single it::tests::t0010_fullscreen_focus::single it::tests::t0011_set_keymap::single it::tests::t0012_subsurface_focus::single it::tests::t0013_graphics_initialized::single it::tests::t0014_container_scroll_focus::single it::tests::t0015_scroll_partial::single it::tests::t0016_scroll_ws::single it::tests::t0017_remove_unused_ws::single it::tests::t0018_click_to_active_ws::single it::tests::t0019_natural_scrolling::single it::tests::t0020_surface_offset::single it::tests::t0021_preferred_buffer_scale::single it::tests::t0022_toplevel_suspended::single it::tests::t0023_xdg_activation::single it::tests::t0024_foreign_toplevel_list::single it::tests::t0025_dnd_focus_change::single it::tests::t0026_output_transform::single it::tests::t0027_input_region::single it::tests::t0028_top_level_restacking::single it::tests::t0029_double_click_float::single it::tests::t0030_cursor_shape::single it::tests::t0031_syncobj::single it::tests::t0032_content_type::single it::tests::t0032_data_control::single it::tests::t0033_float_size_memoization::single it::tests::t0034_workspace_restoration::single it::tests::t0035_scanout_feedback::single it::tests::t0036_idle::single it::tests::t0037_toplevel_drag::single it::tests::t0038_subsurface_parent_state::single it::tests::t0039_alpha_modifier::single it::tests::t0040_virtual_keyboard::single it::tests::t0041_input_method::single it::tests::t0042_toplevel_select::single test result: FAILED. 7 passed; 42 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s error: test failed, to rerun pass `--bin jay` ```
mahkoh commented 1 month ago

That is not the correct way to run tests. You have to do either

for integration tests or

for unit tests.

mahkoh commented 1 month ago

Actually to run Integration tests your have to use cargo run --features it -- run-tests I believe. It's best to check the CI files for these things.

krakow10 commented 1 month ago

Thanks! I had enough cargo experience to figure it out myself after your first tip, but half the tests fail on something else Compositor could not take a screenshot: Cloud not create a gbm buffer: Invalid argument (os error 22) which I assumed is either a wm already running on the current tty or nvidia driver being itself. I'm making a PKGBUILD and trying to do my due diligence to run the tests. I'm very interested in the explicit sync feature that's not available on sway.

PKGBUILD ``` pkgname=jay-git pkgver=1.4.0.r862 pkgrel=1 pkgdesc="A Wayland Compositor." arch=('x86_64') url="https://github.com/mahkoh/jay" license=('GPL3') makedepends=('cargo' 'libxkbcommon' 'mesa' 'systemd-libs' 'libinput' 'pango' 'shaderc') conflicts=('jay') source=("$pkgname::git+$url.git") sha256sums=('SKIP') pkgver() { cd "$pkgname" # Parse Cargo.toml to get version number local version=$(grep -oP 'version\s*=\s*"\K[^"]+' Cargo.toml | head -n 1) # Get git revision number local revision=$(git rev-list --count HEAD) # Combine version and revision to form PKGBUILD version string echo "${version}.r${revision}" } prepare() { cd $pkgname export RUSTUP_TOOLCHAIN=stable cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')" } build() { cd $pkgname export RUSTUP_TOOLCHAIN=stable export CARGO_TARGET_DIR=target cargo build --frozen --release } check() { cd $pkgname export RUSTUP_TOOLCHAIN=stable cargo test --frozen cargo run --features it --frozen -- run-tests } package() { cd $pkgname install -Dm0755 -t "$pkgdir/usr/bin/" "target/release/jay" install -Dm0644 -t "$pkgdir/usr/share/xdg-desktop-portal/portals/jay.portal" "etc/jay.portal" install -Dm0644 -t "$pkgdir/usr/share/xdg-desktop-portal/portals/jay-portals.conf" "etc/jay-portals.conf" } ```

Edit: Note that I'm testing on the Nvidia 560 beta driver, but chances are the stable driver isn't any different.

mahkoh commented 1 month ago

I believe the error is caused by a limitation in the nvidia driver. The screenshot code is quite old and relies on a feature not available on Nvidia. But that feature is not actually necessary so I'll remove it in a future version. In the meantime I don't see an immediate way to make the tests run on Nvidia hardware.

I'll take a look at the pkgbuild when I'm at my PC.

mahkoh commented 1 month ago

Take a look at https://github.com/mahkoh/jay/pull/240. However, after thinking about this again, I don't understand why the original code would fail on nvidia. We're calling

            gbm_bo_create_with_modifiers2(
                800,
                600,
                XRGB8888,
                &LINEAR_MODIFIER,
                1,
                GBM_BO_USE_RENDERING,
            )

This should not fail even on nvidia.

mahkoh commented 1 month ago
makedepends=('cargo' 'libxkbcommon' 'mesa' 'systemd-libs' 'libinput' 'pango' 'shaderc')

This should be

makedepends=('cargo' 'shaderc' 'gcc')
depends=('libxkbcommon' 'mesa' 'systemd-libs' 'libinput' 'pango')

probably.

install -Dm0644 -t "$pkgdir/usr/share/xdg-desktop-portal/portals/jay-portals.conf" "etc/jay-portals.conf"

This file belongs in the parent directory.

And you'll probably also want to install the shell completions.

krakow10 commented 1 month ago

Alright... I got a nice GPU passthrough virtual machine with a RTX 3060 going so I can listen to music while testing jay. I want to point out that I was making the PKGBUILD before I ever ran the software, so this is the first time I'm running it. The docs say that a default configuration will be used, so I tried no config first.

I'm writing this in a nonlinear way as I solve problems.

failed to open simpledrm Launching from tty with `jay run` opens a dark blue screen with a black bar at the top. The resolution seems stretched. The cursor is in the center of the screen, but cannot be moved. Jay responds to Alt+Q and closes, but I wasn't able to get anything to show up with other hotkeys. This is the only output I could get from Jay: ``` MESA-LOADER: failed to open simpledrm: /usr/lib/dri/simpledrm_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/dri, suffix _dri) MESA-LOADER: failed to open simpledrm: /usr/lib/dri/simpledrm_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/dri, suffix _dri) MESA-LOADER: failed to open simpledrm: /usr/lib/dri/simpledrm_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/dri, suffix _dri) ``` Found a solution to the same problem online: https://bbs.archlinux.org/viewtopic.php?id=298123 It was the nvidia driver. I never set the kernel params needed for nvidia wayland in the VM, whoops.

Launching with a wayland-activated nvidia driver opens a dark blue screen with a black bar at the top, and the resolution seems correct. The mouse did not seem to be movable at first, but I was able to launch alacritty, and every time I type a character the mouse position updates. I was able to open zed editor and it kept the cursor updating. A few moments after opening sublime merge (an opengl application), things on screen stopped updating. I could also reproduce this with vrrtest which uses the Love2D game engine. I tried to close things using the hotkey, and didn't think closing it worked, but looking at the screen now it did successfully close after some time. Maybe the drawing didn't update, or maybe it just took a really long time to close.

I think that's enough for today, I'm somewhat surprised the nvidia driver lets it run at all.

mahkoh commented 1 month ago

Launching with a wayland-activated nvidia driver opens a dark blue screen with a black bar at the top, and the resolution seems correct. The mouse did not seem to be movable at first, but I was able to launch alacritty, and every time I type a character the mouse position updates.

Sounds like an issue with hardware cursors.

mahkoh commented 1 week ago

Please test again on master.

krakow10 commented 1 week ago

I reran the jay-git PKGBUILD that previously failed the integration tests, and as far as I can tell the tests ran to completion.

Tests ``` [2024-09-06T04:03:29.155Z INFO jay::it] Running 32 tests in parallel [2024-09-06T04:03:29.155Z INFO jay::it] Running t0003_multi_window [2024-09-06T04:03:29.155Z INFO jay::it] Running t0002_window [2024-09-06T04:03:29.155Z INFO jay::it] Running t0001_shm_formats [2024-09-06T04:03:29.155Z INFO jay::it] Running t0004_quit [2024-09-06T04:03:29.155Z INFO jay::it] Running t0005_create_seat [2024-09-06T04:03:29.155Z INFO jay::it] Running t0006_region [2024-09-06T04:03:29.155Z INFO jay::it] Running t0007_subsurface [2024-09-06T04:03:29.155Z INFO jay::it] Running t0008_map_focus [2024-09-06T04:03:29.156Z INFO jay::it] Running t0009_tab_focus [2024-09-06T04:03:29.156Z INFO jay::it] Running t0010_fullscreen_focus [2024-09-06T04:03:29.156Z INFO jay::it] Running t0012_subsurface_focus [2024-09-06T04:03:29.156Z INFO jay::it] Running t0011_set_keymap [2024-09-06T04:03:29.156Z INFO jay::it] Running t0013_graphics_initialized [2024-09-06T04:03:29.156Z INFO jay::it] Running t0014_container_scroll_focus [2024-09-06T04:03:29.156Z INFO jay::it] Running t0015_scroll_partial [2024-09-06T04:03:29.156Z INFO jay::it] Running t0016_scroll_ws [2024-09-06T04:03:29.156Z INFO jay::it] Running t0017_remove_unused_ws [2024-09-06T04:03:29.156Z INFO jay::it] Running t0018_click_to_active_ws [2024-09-06T04:03:29.156Z INFO jay::it] Running t0019_natural_scrolling [2024-09-06T04:03:29.156Z INFO jay::it] Running t0020_surface_offset [2024-09-06T04:03:29.156Z INFO jay::it] Running t0021_preferred_buffer_scale [2024-09-06T04:03:29.156Z INFO jay::it] Running t0022_toplevel_suspended [2024-09-06T04:03:29.156Z INFO jay::it] Running t0023_xdg_activation [2024-09-06T04:03:29.156Z INFO jay::it] Running t0024_foreign_toplevel_list [2024-09-06T04:03:29.156Z INFO jay::it] Running t0025_dnd_focus_change [2024-09-06T04:03:29.156Z INFO jay::it] Running t0026_output_transform [2024-09-06T04:03:29.156Z INFO jay::it] Running t0027_input_region [2024-09-06T04:03:29.156Z INFO jay::it] Running t0028_top_level_restacking [2024-09-06T04:03:29.156Z INFO jay::it] Running t0029_double_click_float [2024-09-06T04:03:29.157Z INFO jay::it] Running t0030_cursor_shape [2024-09-06T04:03:29.157Z INFO jay::it] Running t0031_syncobj [2024-09-06T04:03:29.157Z INFO jay::it] Running t0032_data_control [2024-09-06T04:03:29.164Z INFO jay::it] Running t0033_float_size_memoization [2024-09-06T04:03:29.178Z INFO jay::it] Running t0034_workspace_restoration [2024-09-06T04:03:29.179Z INFO jay::it] Running t0035_scanout_feedback [2024-09-06T04:03:29.180Z INFO jay::it] Running t0036_idle [2024-09-06T04:03:29.181Z INFO jay::it] Running t0037_toplevel_drag [2024-09-06T04:03:29.190Z INFO jay::it] Running t0038_subsurface_parent_state [2024-09-06T04:03:29.205Z INFO jay::it] Running t0039_alpha_modifier [2024-09-06T04:03:29.236Z INFO jay::it] Running t0040_virtual_keyboard [2024-09-06T04:03:29.243Z INFO jay::it] Running t0041_input_method [2024-09-06T04:03:29.262Z INFO jay::it] Running t0042_toplevel_select ```

I'll take a look at trying out jay again at some point.

Edit: Just tested the non-git release from 4 days ago and the tests failed, so that gives me more confidence that I ran the tests correctly and they passed on the git version.