Skip to content

fix(android): notif toast, images, import#135

Merged
gfauredev merged 7 commits intomainfrom
fix/android-various-issues
Apr 6, 2026
Merged

fix(android): notif toast, images, import#135
gfauredev merged 7 commits intomainfrom
fix/android-various-issues

Conversation

@gfauredev
Copy link
Copy Markdown
Owner

@gfauredev gfauredev commented Apr 6, 2026

This Pull Request…

Engineering Principles

  • PR only contains changes strictly related to the requested feature or fix,
    scope is focused (no unrelated dependency updates or formatting)
  • This code totally respects README’s Engineering Principles

CI/CD Readiness

  • Branch follows Conventional Branch: feat/…, fix/…, refactor/…, …
  • Code is formatted with dx fmt; cargo fmt
  • All checks pass, nix flake checks succeeds without warnings
    • Code compiles, dx build with necessary platform flags succeeds
    • cargo clippy -- -D warnings -W clippy::all -W clippy::pedantic
      produces zero warnings
    • All unit tests pass without warnings
      cargo llvm-cov nextest --ignore-filename-regex '(src/components/|\.cargo/registry/|nix/store)'
    • End-to-end tests pass maestro test --headless maestro/web
      maestro test --headless maestro/android

Summary by CodeRabbit

  • New Features

    • Option to open notification settings from the app on Android.
  • Improvements

    • Improved cross‑platform notification‑permission detection and request behaviour.
    • Enhanced logging and diagnostics for imports, image handling and notification flows.
    • More robust local image storage handling and pre-download checks for images.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 6, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 6429408c-5739-4ba8-bd0c-90d096797720

📥 Commits

Reviewing files that changed from the base of the PR and between 4817dac and c8b8c51.

📒 Files selected for processing (1)
  • Dioxus.toml

📝 Walkthrough

Walkthrough

Adds a cross‑platform notification permission probe and Android settings opener, increases logging across file‑import, image‑download and storage code paths, refactors native storage/image directory resolution, routes local image writes through a dedicated helper, and comments out the top‑level photos permission (and several Android permission descriptions) in Dioxus.toml.

Changes

Cohort / File(s) Summary
Manifest / Permissions
Dioxus.toml
Commented out the top‑level photos = { access = "read", description = "Custom exercises images" } entry; added several Android permission description lines as commented‑out entries (e.g. READ_EXTERNAL_STORAGE, READ_MEDIA_*, POST_NOTIFICATIONS); WAKE_LOCK description unchanged.
Notification permission & UI
src/main.rs, src/services/notifications.rs
Added pub fn is_notification_permission_granted() -> bool (wasm32 checks web_sys, Android via JNI, other natives return true) and Android open_notification_settings(); changed toast mounting gating and use of effect for permission check; bumped log level to DEBUG in main.
Storage initialisation & helpers
src/services/storage.rs, src/components/exercise_form_fields.rs
Refactored native_storage::data_dir() and native_storage::images_dir() to compute and log resolved paths; improved Android NULL pointer/log messages; exercise_form_fields now uses native_storage::images_dir() for local image writes.
Image download / cache logging
src/services/exercise_db.rs, src/services/imgcache.rs
Ensure images_dir exists before downloads; added per‑image debug logs for source URL, destination path, fetched byte counts and successful writes; changed one imgcache log from debug to info.
File import & read pipeline
src/components/more.rs
Added debug/info/warn logs to import handlers and native read_file_input; replaced JS .eval click dispatch with explicit label r#for binding; improved error/NULL handling and logging for file reads.

Sequence Diagram(s)

sequenceDiagram
    participant App as App (src/main.rs)
    participant NotifSvc as Notification Service (src/services/notifications.rs)
    participant AndroidJNI as Android JNI
    participant WebAPI as Web API (web_sys)

    rect rgba(100,150,255,0.5)
    Note over App,NotifSvc: Permission probe invoked at startup/use
    App->>NotifSvc: is_notification_permission_granted()
    alt Android
        NotifSvc->>AndroidJNI: check_android_notification_permission()
        AndroidJNI-->>NotifSvc: bool
    else wasm32
        NotifSvc->>WebAPI: Notification::permission()
        WebAPI-->>NotifSvc: "granted"/...
    else other native
        NotifSvc-->>App: true
    end
    NotifSvc-->>App: permission bool
    end

    rect rgba(200,150,100,0.5)
    Note over App,NotifSvc: User triggers permission request via toast
    App->>App: show NotificationPermissionToast (if not granted)
    App->>App: user clicks toast
    alt Android
        App->>NotifSvc: open_notification_settings()
        NotifSvc->>AndroidJNI: build/start APP_NOTIFICATION_SETTINGS intent
    else wasm32
        App->>WebAPI: Notification::request_permission()
        WebAPI-->>App: result
    end
    App->>App: hide toast
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~40 minutes

Possibly related PRs

Poem

🐰 I hop through logs and JNI streams,
I fetch the bytes of daring dreams.
From web permission to Android ring,
I nudge the toast and softly sing.
Hooray for paths and tiny things!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is a template with empty checklist items and provides no actual details about the changes, objectives, testing approach, or implementation specifics despite the changes being substantial and multifaceted. Replace the template with a detailed description explaining the Android issues being fixed, the specific changes in each file, testing performed, and any potential side effects or breaking changes.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'fix(android): notif toast, images, import' directly corresponds to the main changes across multiple files addressing Android-specific issues with notifications, image handling, and file import functionality.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/android-various-issues

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

📊 Coverage Report

Lines: 3754/4971 (75.51800442566888%)

⏱️ Tests: 255 tests in 0.583s

FilenameFunction CoverageLine CoverageRegion CoverageBranch Coverage
main.rs
  22.45% (11/49)
  59.16% (155/262)
  60.89% (218/358)
- (0/0)
models/analytics.rs
   0.00% (0/6)
   0.00% (0/34)
   0.00% (0/46)
- (0/0)
models/enums.rs
 100.00% (28/28)
 100.00% (147/147)
 100.00% (337/337)
- (0/0)
models/exercise.rs
  92.00% (46/50)
  92.10% (548/595)
  91.01% (749/823)
- (0/0)
models/log.rs
 100.00% (12/12)
 100.00% (118/118)
 100.00% (144/144)
- (0/0)
models/mod.rs
 100.00% (11/11)
 100.00% (68/68)
 100.00% (98/98)
- (0/0)
models/session.rs
  72.22% (13/18)
  84.36% (151/179)
  83.33% (210/252)
- (0/0)
models/units.rs
 100.00% (28/28)
 100.00% (167/167)
  98.88% (353/357)
- (0/0)
services/app_state.rs
   1.89% (1/53)
   2.54% (11/433)
   2.32% (15/646)
- (0/0)
services/exercise_db.rs
  88.81% (127/143)
  90.43% (1210/1338)
  89.78% (1924/2143)
- (0/0)
services/exercise_loader.rs
   0.00% (0/14)
   0.00% (0/100)
   0.00% (0/135)
- (0/0)
services/native_queue.rs
   0.00% (0/15)
   0.00% (0/145)
   0.00% (0/197)
- (0/0)
services/notifications.rs
   0.00% (0/4)
   0.00% (0/11)
   0.00% (0/12)
- (0/0)
services/service_worker.rs
 100.00% (2/2)
 100.00% (6/6)
 100.00% (6/6)
- (0/0)
services/storage.rs
  63.77% (88/138)
  80.97% (766/946)
  83.53% (1187/1421)
- (0/0)
services/wake_lock.rs
 100.00% (2/2)
 100.00% (5/5)
 100.00% (5/5)
- (0/0)
utils.rs
  92.00% (69/75)
  96.40% (402/417)
  96.97% (640/660)
- (0/0)
Totals
  67.59% (438/648)
  75.52% (3754/4971)
  77.04% (5886/7640)
- (0/0)

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

📊 Coverage Report

Lines: 3754/4969 (75.54840008049909%)

⏱️ Tests: 255 tests in 0.580s

FilenameFunction CoverageLine CoverageRegion CoverageBranch Coverage
main.rs
  22.45% (11/49)
  59.16% (155/262)
  60.89% (218/358)
- (0/0)
models/analytics.rs
   0.00% (0/6)
   0.00% (0/34)
   0.00% (0/46)
- (0/0)
models/enums.rs
 100.00% (28/28)
 100.00% (147/147)
 100.00% (337/337)
- (0/0)
models/exercise.rs
  92.00% (46/50)
  92.10% (548/595)
  91.01% (749/823)
- (0/0)
models/log.rs
 100.00% (12/12)
 100.00% (118/118)
 100.00% (144/144)
- (0/0)
models/mod.rs
 100.00% (11/11)
 100.00% (68/68)
 100.00% (98/98)
- (0/0)
models/session.rs
  72.22% (13/18)
  84.36% (151/179)
  83.33% (210/252)
- (0/0)
models/units.rs
 100.00% (28/28)
 100.00% (167/167)
  98.88% (353/357)
- (0/0)
services/app_state.rs
   1.89% (1/53)
   2.54% (11/433)
   2.32% (15/646)
- (0/0)
services/exercise_db.rs
  88.81% (127/143)
  90.43% (1210/1338)
  89.78% (1924/2143)
- (0/0)
services/exercise_loader.rs
   0.00% (0/14)
   0.00% (0/100)
   0.00% (0/135)
- (0/0)
services/native_queue.rs
   0.00% (0/15)
   0.00% (0/145)
   0.00% (0/197)
- (0/0)
services/notifications.rs
   0.00% (0/3)
   0.00% (0/9)
   0.00% (0/10)
- (0/0)
services/service_worker.rs
 100.00% (2/2)
 100.00% (6/6)
 100.00% (6/6)
- (0/0)
services/storage.rs
  63.77% (88/138)
  80.97% (766/946)
  83.53% (1187/1421)
- (0/0)
services/wake_lock.rs
 100.00% (2/2)
 100.00% (5/5)
 100.00% (5/5)
- (0/0)
utils.rs
  92.00% (69/75)
  96.40% (402/417)
  96.97% (640/660)
- (0/0)
Totals
  67.70% (438/647)
  75.55% (3754/4969)
  77.06% (5886/7638)
- (0/0)

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

❌ Maestro Web E2E Failures

📜 Maestro Console Output (Last 100 lines)
copying path '/nix/store/g6mlwdvpg92rchq352ll7jbi0pz7h43r-xz-5.8.2-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/gknk1jw10h0pswl53ps5xj06cmwza52p-binutils-wrapper-2.44' from 'https://cache.nixos.org'...
copying path '/nix/store/x7ikkplbrv5dlihy1bqq32gp6lilkval-binutils-wrapper-2.44' from 'https://cache.nixos.org'...
copying path '/nix/store/iqxriv7vl5xzsk86rjy7v72f3dgpaxb5-lilv-0.26.2' from 'https://cache.nixos.org'...
copying path '/nix/store/ik8a7b32nqv2q5p4g86hmp65jklmrp3g-systemd-259.3' from 'https://cache.nixos.org'...
copying path '/nix/store/8cc8cdqa54bahfi5n5glkm8d252zkkjn-zstd-1.5.7-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/s2grcjv8pklvkajk3mkh75aja5dppx6z-stdenv-linux' from 'https://cache.nixos.org'...
copying path '/nix/store/q3xfaw0xw291byfii8784q43xvs3bd36-libsoup-3.6.6' from 'https://cache.nixos.org'...
copying path '/nix/store/3nk9r14756spfafgji1prgxf9qhixxf6-nss-3.112.3' from 'https://cache.nixos.org'...
copying path '/nix/store/pzdalg368npikvpq4ncz2saxnz19v53k-python3-3.13.12' from 'https://cache.nixos.org'...
copying path '/nix/store/am1qqydxk0qnn66dfwa9k6dyrqhghkfi-zxing-cpp-2.3.0' from 'https://cache.nixos.org'...
copying path '/nix/store/q4v09bffjy5i0f2kdwnbbwmhqv6i3pjs-zstd-1.5.7-dev' from 'https://cache.nixos.org'...
copying path '/nix/store/4yb9bqdx98ycqajvkk13dmx9nz9ya80x-gssdp-1.6.4' from 'https://cache.nixos.org'...
copying path '/nix/store/axzfvd6f655hnp92c3fv0n571avg1yb6-gupnp-1.6.9' from 'https://cache.nixos.org'...
copying path '/nix/store/xv2cv8hv0blhlkqhcp4psblcqci9qfx6-chromedriver-unwrapped-146.0.7680.177' from 'https://cache.nixos.org'...
copying path '/nix/store/67yaxggsvwhd5x7ffqj8bcq3hvs136ph-gupnp-igd-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/mx745sg11i2na27igmmgnlf450h9dl65-dbus-1.16.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/8nqw35icyjsvqk32n0i6132vk3l1x1qg-at-spi2-core-2.58.3' from 'https://cache.nixos.org'...
copying path '/nix/store/51z2kgz91wjy629fs3hcph0iajvm7s1w-avahi-0.8' from 'https://cache.nixos.org'...
copying path '/nix/store/h62im4mqizh3smv2n532jncaz47819w4-bluez-5.84' from 'https://cache.nixos.org'...
copying path '/nix/store/5gln2rkcjx93cr5x0rr3wqrxjdmshd2f-dbus-1.16.2' from 'https://cache.nixos.org'...
copying path '/nix/store/asmzi65xzpjdnjvlyn39xlarp2x6cpj3-libjack2-1.9.22' from 'https://cache.nixos.org'...
copying path '/nix/store/8qs5mhyg6abqy924s1g07wddyjjddxiv-libpulseaudio-17.0' from 'https://cache.nixos.org'...
copying path '/nix/store/qk1d0xniardydr9rkhnnivz2ccmznw2q-cups-2.4.16-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/1m4n4g1y9q24vi5bhy53k98rbxyfs2f5-tinysparql-3.10.1' from 'https://cache.nixos.org'...
copying path '/nix/store/ca9p0l36x7zw9742ak8vy70phmsng1ns-cups-2.4.16' from 'https://cache.nixos.org'...
copying path '/nix/store/7qzvqi0niqsgnxbc8w8pbfm0qqhfm14n-flite-2.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/i5ya73idqgmxpki1h0cq4j13jx9vl4kn-fluidsynth-2.5.3' from 'https://cache.nixos.org'...
copying path '/nix/store/2vfrbgr72f60dc66mf6bpyxmhglkgaby-libao-1.2.2' from 'https://cache.nixos.org'...
copying path '/nix/store/lpc21304lsg3mwr4bz84d2fnr947mmhz-mpg123-1.33.4' from 'https://cache.nixos.org'...
copying path '/nix/store/yl5yl395iqx88kd1m7lx7p7b65n0jfx9-gtk+3-3.24.51' from 'https://cache.nixos.org'...
copying path '/nix/store/vz6zpxygfjy3vsjxs3ly32c5ynn10f2b-ungoogled-chromium-unwrapped-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/kdfxyngq84c0rbqd40jhgv5j4dmwv6l0-sox-unstable-2021-05-09-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/hh5xqz1aj82wp3p7ncr0ipjwl6ylb28v-libopenmpt-0.8.4' from 'https://cache.nixos.org'...
copying path '/nix/store/p41sp77l8hv57iklz8gazdvr34bjvhd9-perl5.42.0-File-MimeInfo-0.33' from 'https://cache.nixos.org'...
copying path '/nix/store/ihbk8s7b58dd63z7x573zcp38hcvxfh2-perl5.42.0-X11-Protocol-0.56' from 'https://cache.nixos.org'...
copying path '/nix/store/xq5xj979jbifdbnck57nci15xjmx08ny-perl5.42.0-libwww-perl-6.72' from 'https://cache.nixos.org'...
copying path '/nix/store/z5p8cy7zsrz85hcf5i0pggx2gg5rcgg3-roc-toolkit-0.4.0' from 'https://cache.nixos.org'...
copying path '/nix/store/z01j5ypjq5lsl2xhbiw9yf2w0p16ygwk-perl5.42.0-XML-Parser-2.46' from 'https://cache.nixos.org'...
copying path '/nix/store/m5c6wbkiqh753s3v6wnk9l0ad7sl9y1y-ffmpeg-headless-8.0.1-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/bbv0vprkcppy60mbpaqrxmid6xl6fqlv-perl5.42.0-XML-Twig-3.52' from 'https://cache.nixos.org'...
copying path '/nix/store/6296bwxad0yr896x9vqxjzy6s3yyjy7z-perl5.42.0-Net-DBus-1.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/l6lwzgj70lwmhf1nkdbrcli7sn530lpg-xdg-utils-1.2.1' from 'https://cache.nixos.org'...
copying path '/nix/store/lccknd7yjw6bbnnmvz0vq5vra4w4z4dz-chromaprint-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/s8w14kgj50iqw1w0jdwn9s1m0k4plzgs-gstreamer-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/zyh3vyl2k8j9x1wbw02zk1glp5d5i963-gst-plugins-base-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/2q0snh31cxlr09nsb1qp2yna2ql29k4p-libcanberra-0.30' from 'https://cache.nixos.org'...
copying path '/nix/store/0pikx4f2448sc0cgikw9yvfxq6grxdpq-libnice-0.1.22' from 'https://cache.nixos.org'...
copying path '/nix/store/f3nqnwrza03hf9l4vndjg3r4lbknf4n4-libcamera-0.7.0' from 'https://cache.nixos.org'...
copying path '/nix/store/nn129jwsznqv7k888wb05m5whpyndqrf-pipewire-1.6.2' from 'https://cache.nixos.org'...
copying path '/nix/store/ahfz4q9z487796nf71bmgsdl3703ksj7-openal-soft-1.24.3' from 'https://cache.nixos.org'...
copying path '/nix/store/v5qy1399hlrnk8z6mhlzg5jz08rw3l0j-gst-plugins-bad-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/hjp25ksf3axb4czp7sllvzl1bkpfwsyg-gtk4-4.20.3' from 'https://cache.nixos.org'...
copying path '/nix/store/hb2bs5fg5wkm04x565737qd5nh2hy5nk-gcc-wrapper-15.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/gvq9hvvnmkvrk27mba0jjjppj068z55x-stdenv-linux' from 'https://cache.nixos.org'...
copying path '/nix/store/9993qmj4n54mz6mnmzzc72px36mirqa5-rustfmt-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/l5ax073f4k5f6mbnl9fdpfiwldyxli7a-clippy-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/157hw9f81x6523chpb4fis99b3x2zq27-rust-analyzer-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/8l7m6nswqrmfx6bxblsci8sgmgwrh5w6-rust-default-1.94.1' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/hal3i0mcgsrkpharzpdjz6m10hxnxnvr-clang-21.1.8-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/5n58fciczf6bld98mzpgawkvs7jzwbqy-wasm-bindgen-cli-0.2.117' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/b25d7klxqlzl5scnq1lygjk88fg8j8fi-logout-deps-0.4.3' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/3rvfqwn4g23599vpl66lk533d9y3db8w-ungoogled-chromium-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/i1k0ay79xdxmn9qvnyfqmvk3ih0ch2d3-google-chrome' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/jh6qssswq7assbhby478d8gli8ksnf2p-maestro-2.3.0' from 'https://cache.nixos.org'...
copying path '/nix/store/zb8py6p8qq01nygnnf8jrnkps9nna189-clang-21.1.8' from 'https://cache.nixos.org'...
copying path '/nix/store/hh6y3s72d21whp6q98h4dh0valxiaw69-clang-wrapper-21.1.8' from 'https://cache.nixos.org'...
building '/nix/store/kivxslx6zpiw2qii227las7snmpdyq3q-logout-server-0.4.3.drv'...
building '/nix/store/nj8nzm4fa8rai53x2mhwymfs2wmk64g1-logout-web-e2e-test-0.4.3.drv'...
2026-04-06T17:17:59.272376Z  WARN dioxus_server::config: No index.html found in public directory, using default index.html
Anonymous analytics enabled. To opt out, set MAESTRO_CLI_NO_ANALYTICS environment variable to any value before running Maestro.


Web support is in Beta. We would appreciate your feedback!


Waiting for flows to complete...
[Passed] 03_navigate_to_credits (4s)
[Passed] 06_navigate_to_exercise_list (3s)
[Passed] 04_clean_state_credits (3s)
[Failed] 11_edit_cloned_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 07_clean_state_exercise_list (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 20_be_astonished_by_progress (19s) (Assertion is false: "Today" is visible)
[Failed] 01_start (18s) (Assertion is false: "No past sessions yet" is visible)
[Failed] 16_cancel_empty_session (18s) (Assertion is false: "No past sessions yet" is visible)
[Passed] 05_change_exercises_database (15s)
[Failed] 17_repeat_session (19s) (Assertion is false: "Today" is visible)
[Failed] 18_delete_past_session (19s) (Assertion is false: "Today" is visible)
[Passed] 12_navigate_to_analytics (3s)
[Failed] 02_allow_notifications (18s) (Assertion is false: "⚠️ Tap here to enable notifications" is visible)
[Failed] 09_learn_about_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Passed] 13_clean_state_analytics (3s)
[Passed] 14_navigate_back_to_home (4s)
[Failed] 08_search_exercises (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 10_add_custom_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 19_lookup_past_exercise (19s) (Assertion is false: "Today" is visible)
[Failed] 15_full_workout_session (20s) (Assertion is false: "⏱️ Active Session" is visible)

13/20 Flows Failed

📸 Screenshots

  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

❌ Maestro Web E2E Failures

📜 Maestro Console Output (Last 100 lines)
copying path '/nix/store/0w9wqd9awzhg2vm7j43mjz5i83ss81ij-wildmidi-0.4.6' from 'https://cache.nixos.org'...
copying path '/nix/store/g6mlwdvpg92rchq352ll7jbi0pz7h43r-xz-5.8.2-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/q3xfaw0xw291byfii8784q43xvs3bd36-libsoup-3.6.6' from 'https://cache.nixos.org'...
copying path '/nix/store/3nk9r14756spfafgji1prgxf9qhixxf6-nss-3.112.3' from 'https://cache.nixos.org'...
copying path '/nix/store/iqxriv7vl5xzsk86rjy7v72f3dgpaxb5-lilv-0.26.2' from 'https://cache.nixos.org'...
copying path '/nix/store/pzdalg368npikvpq4ncz2saxnz19v53k-python3-3.13.12' from 'https://cache.nixos.org'...
copying path '/nix/store/s2grcjv8pklvkajk3mkh75aja5dppx6z-stdenv-linux' from 'https://cache.nixos.org'...
copying path '/nix/store/ik8a7b32nqv2q5p4g86hmp65jklmrp3g-systemd-259.3' from 'https://cache.nixos.org'...
copying path '/nix/store/4yb9bqdx98ycqajvkk13dmx9nz9ya80x-gssdp-1.6.4' from 'https://cache.nixos.org'...
copying path '/nix/store/8cc8cdqa54bahfi5n5glkm8d252zkkjn-zstd-1.5.7-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/xv2cv8hv0blhlkqhcp4psblcqci9qfx6-chromedriver-unwrapped-146.0.7680.177' from 'https://cache.nixos.org'...
copying path '/nix/store/axzfvd6f655hnp92c3fv0n571avg1yb6-gupnp-1.6.9' from 'https://cache.nixos.org'...
copying path '/nix/store/snbhfzsas52cx01h4qcd0zdhbvh1gkd0-vendor-registry' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/q4v09bffjy5i0f2kdwnbbwmhqv6i3pjs-zstd-1.5.7-dev' from 'https://cache.nixos.org'...
copying path '/nix/store/67yaxggsvwhd5x7ffqj8bcq3hvs136ph-gupnp-igd-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/mx745sg11i2na27igmmgnlf450h9dl65-dbus-1.16.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/w59dhr2065b1ng5d4li2vz8hkl5y4g4b-vendor-cargo-deps' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/8nqw35icyjsvqk32n0i6132vk3l1x1qg-at-spi2-core-2.58.3' from 'https://cache.nixos.org'...
copying path '/nix/store/h62im4mqizh3smv2n532jncaz47819w4-bluez-5.84' from 'https://cache.nixos.org'...
copying path '/nix/store/5gln2rkcjx93cr5x0rr3wqrxjdmshd2f-dbus-1.16.2' from 'https://cache.nixos.org'...
copying path '/nix/store/asmzi65xzpjdnjvlyn39xlarp2x6cpj3-libjack2-1.9.22' from 'https://cache.nixos.org'...
copying path '/nix/store/51z2kgz91wjy629fs3hcph0iajvm7s1w-avahi-0.8' from 'https://cache.nixos.org'...
copying path '/nix/store/8qs5mhyg6abqy924s1g07wddyjjddxiv-libpulseaudio-17.0' from 'https://cache.nixos.org'...
copying path '/nix/store/qk1d0xniardydr9rkhnnivz2ccmznw2q-cups-2.4.16-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/1m4n4g1y9q24vi5bhy53k98rbxyfs2f5-tinysparql-3.10.1' from 'https://cache.nixos.org'...
copying path '/nix/store/7qzvqi0niqsgnxbc8w8pbfm0qqhfm14n-flite-2.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/i5ya73idqgmxpki1h0cq4j13jx9vl4kn-fluidsynth-2.5.3' from 'https://cache.nixos.org'...
copying path '/nix/store/lpc21304lsg3mwr4bz84d2fnr947mmhz-mpg123-1.33.4' from 'https://cache.nixos.org'...
copying path '/nix/store/2vfrbgr72f60dc66mf6bpyxmhglkgaby-libao-1.2.2' from 'https://cache.nixos.org'...
copying path '/nix/store/kdfxyngq84c0rbqd40jhgv5j4dmwv6l0-sox-unstable-2021-05-09-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/ca9p0l36x7zw9742ak8vy70phmsng1ns-cups-2.4.16' from 'https://cache.nixos.org'...
copying path '/nix/store/vz6zpxygfjy3vsjxs3ly32c5ynn10f2b-ungoogled-chromium-unwrapped-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/hh5xqz1aj82wp3p7ncr0ipjwl6ylb28v-libopenmpt-0.8.4' from 'https://cache.nixos.org'...
copying path '/nix/store/p41sp77l8hv57iklz8gazdvr34bjvhd9-perl5.42.0-File-MimeInfo-0.33' from 'https://cache.nixos.org'...
copying path '/nix/store/ihbk8s7b58dd63z7x573zcp38hcvxfh2-perl5.42.0-X11-Protocol-0.56' from 'https://cache.nixos.org'...
copying path '/nix/store/xq5xj979jbifdbnck57nci15xjmx08ny-perl5.42.0-libwww-perl-6.72' from 'https://cache.nixos.org'...
copying path '/nix/store/yl5yl395iqx88kd1m7lx7p7b65n0jfx9-gtk+3-3.24.51' from 'https://cache.nixos.org'...
copying path '/nix/store/z5p8cy7zsrz85hcf5i0pggx2gg5rcgg3-roc-toolkit-0.4.0' from 'https://cache.nixos.org'...
copying path '/nix/store/z01j5ypjq5lsl2xhbiw9yf2w0p16ygwk-perl5.42.0-XML-Parser-2.46' from 'https://cache.nixos.org'...
copying path '/nix/store/m5c6wbkiqh753s3v6wnk9l0ad7sl9y1y-ffmpeg-headless-8.0.1-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/bbv0vprkcppy60mbpaqrxmid6xl6fqlv-perl5.42.0-XML-Twig-3.52' from 'https://cache.nixos.org'...
copying path '/nix/store/6296bwxad0yr896x9vqxjzy6s3yyjy7z-perl5.42.0-Net-DBus-1.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/l6lwzgj70lwmhf1nkdbrcli7sn530lpg-xdg-utils-1.2.1' from 'https://cache.nixos.org'...
copying path '/nix/store/lccknd7yjw6bbnnmvz0vq5vra4w4z4dz-chromaprint-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/s8w14kgj50iqw1w0jdwn9s1m0k4plzgs-gstreamer-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/zyh3vyl2k8j9x1wbw02zk1glp5d5i963-gst-plugins-base-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/2q0snh31cxlr09nsb1qp2yna2ql29k4p-libcanberra-0.30' from 'https://cache.nixos.org'...
copying path '/nix/store/0pikx4f2448sc0cgikw9yvfxq6grxdpq-libnice-0.1.22' from 'https://cache.nixos.org'...
copying path '/nix/store/f3nqnwrza03hf9l4vndjg3r4lbknf4n4-libcamera-0.7.0' from 'https://cache.nixos.org'...
copying path '/nix/store/nn129jwsznqv7k888wb05m5whpyndqrf-pipewire-1.6.2' from 'https://cache.nixos.org'...
copying path '/nix/store/157hw9f81x6523chpb4fis99b3x2zq27-rust-analyzer-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/9993qmj4n54mz6mnmzzc72px36mirqa5-rustfmt-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/l5ax073f4k5f6mbnl9fdpfiwldyxli7a-clippy-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/ahfz4q9z487796nf71bmgsdl3703ksj7-openal-soft-1.24.3' from 'https://cache.nixos.org'...
copying path '/nix/store/v5qy1399hlrnk8z6mhlzg5jz08rw3l0j-gst-plugins-bad-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/hjp25ksf3axb4czp7sllvzl1bkpfwsyg-gtk4-4.20.3' from 'https://cache.nixos.org'...
copying path '/nix/store/hb2bs5fg5wkm04x565737qd5nh2hy5nk-gcc-wrapper-15.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/gvq9hvvnmkvrk27mba0jjjppj068z55x-stdenv-linux' from 'https://cache.nixos.org'...
copying path '/nix/store/8l7m6nswqrmfx6bxblsci8sgmgwrh5w6-rust-default-1.94.1' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/hal3i0mcgsrkpharzpdjz6m10hxnxnvr-clang-21.1.8-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/b25d7klxqlzl5scnq1lygjk88fg8j8fi-logout-deps-0.4.3' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/5n58fciczf6bld98mzpgawkvs7jzwbqy-wasm-bindgen-cli-0.2.117' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/3rvfqwn4g23599vpl66lk533d9y3db8w-ungoogled-chromium-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/i1k0ay79xdxmn9qvnyfqmvk3ih0ch2d3-google-chrome' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/jh6qssswq7assbhby478d8gli8ksnf2p-maestro-2.3.0' from 'https://cache.nixos.org'...
copying path '/nix/store/zb8py6p8qq01nygnnf8jrnkps9nna189-clang-21.1.8' from 'https://cache.nixos.org'...
copying path '/nix/store/hh6y3s72d21whp6q98h4dh0valxiaw69-clang-wrapper-21.1.8' from 'https://cache.nixos.org'...
building '/nix/store/jc9baanppan8xz2v6fix5l2fajjzlwbs-logout-server-0.4.3.drv'...
building '/nix/store/9sc4xrr7vaz4yvhcxqpjwpva179rc92b-logout-web-e2e-test-0.4.3.drv'...
2026-04-06T17:23:34.903678Z  WARN dioxus_server::config: No index.html found in public directory, using default index.html
Anonymous analytics enabled. To opt out, set MAESTRO_CLI_NO_ANALYTICS environment variable to any value before running Maestro.


Web support is in Beta. We would appreciate your feedback!


Waiting for flows to complete...
[Passed] 03_navigate_to_credits (4s)
[Passed] 06_navigate_to_exercise_list (3s)
[Passed] 04_clean_state_credits (3s)
[Failed] 11_edit_cloned_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 07_clean_state_exercise_list (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 20_be_astonished_by_progress (19s) (Assertion is false: "Today" is visible)
[Failed] 01_start (18s) (Assertion is false: "No past sessions yet" is visible)
[Failed] 16_cancel_empty_session (18s) (Assertion is false: "No past sessions yet" is visible)
[Passed] 05_change_exercises_database (14s)
[Failed] 17_repeat_session (19s) (Assertion is false: "Today" is visible)
[Failed] 18_delete_past_session (19s) (Assertion is false: "Today" is visible)
[Passed] 12_navigate_to_analytics (3s)
[Failed] 02_allow_notifications (18s) (Assertion is false: "⚠️ Tap here to enable notifications" is visible)
[Failed] 09_learn_about_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Passed] 13_clean_state_analytics (3s)
[Passed] 14_navigate_back_to_home (4s)
[Failed] 08_search_exercises (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 10_add_custom_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 19_lookup_past_exercise (19s) (Assertion is false: "Today" is visible)
[Failed] 15_full_workout_session (20s) (Assertion is false: "⏱️ Active Session" is visible)

13/20 Flows Failed

📸 Screenshots

  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@Dioxus.toml`:
- Around line 52-53: Remove the legacy
"android.permission.READ_EXTERNAL_STORAGE" entry from Dioxus.toml since the
WebView/HTML file input used by read_file_input() (in src/components/more.rs) is
handled by the browser and not the native filesystem permission; update or leave
the TODO comment to reference using the Storage Access Framework
(ACTION_OPEN_DOCUMENT) if native document access is later required, ensuring no
code relies on that permission string (search for the exact symbol
"android.permission.READ_EXTERNAL_STORAGE" to remove usages).

In `@src/main.rs`:
- Around line 231-238: The toast is hidden unconditionally in the click handler,
so if the user dismisses the browser prompt or returns from Android settings
without enabling notifications the denied state is lost; update the click
handler/flow that currently sets NotificationPermissionToastSignal (notif_toast)
to false to instead re-check
services::notifications::is_notification_permission_granted() after the
prompt/settings flow and set notif_toast to true if permission is still denied
(else set false), and apply the same change to the second occurrence of this
logic (the other use_effect/click handler block).
- Line 132: Replace the hard-coded debug level in the dioxus logger init so
release builds don't always use DEBUG: change the call to
dioxus_logger::init(...) to choose the level at runtime/build (for example use
cfg!(debug_assertions) ? dioxus_logger::tracing::Level::DEBUG :
dioxus_logger::tracing::Level::INFO or consult RUST_LOG/env first) instead of
always passing dioxus_logger::tracing::Level::DEBUG; keep the symbol
dioxus_logger::init and the Level enum usage so you adjust only the level
selection logic and default to INFO for non-debug builds.

In `@src/services/exercise_db.rs`:
- Around line 253-258: When std::fs::create_dir_all(&images_dir) fails, do not
continue: clear the progress state (call progress.clear()) and return early with
an error (propagate or return Err) instead of proceeding into the download loop
and logging success; update the error branch that currently logs "Failed to
create main images directory {}: {e}" to also clear progress and return the
failure so the UI won't show a false success.

In `@src/services/notifications.rs`:
- Around line 17-21: The Android branch in is_notification_permission_granted
currently hides JNI errors by using unwrap_or(true); change it to treat errors
as not granted: call check_android_notification_permission(), log the error when
it returns Err (use the crate's logger, e.g., log::error! or tracing::error!),
and return false on error instead of true so failures do not suppress the
permission prompt. Keep the existing return behavior for success (true/false
from the check) and only alter the error path in
is_notification_permission_granted and its Android-specific block.
- Around line 33-44: Guard ctx.vm() and ctx.context() for null before calling
unsafe JavaVM::from_raw and JObject::from_raw in all four Android-only functions
(e.g., check_android_notification_permission) in notifications.rs; mirror the
null-check pattern used in src/services/storage.rs (lines 898–900): if
ctx.vm().is_null() or ctx.context().is_null() return Err with a clear message,
and only then call unsafe JavaVM::from_raw(ctx.vm().cast()) and unsafe
JObject::from_raw(ctx.context() as jni::sys::jobject); apply this to the call
sites that currently call JavaVM::from_raw and JObject::from_raw (the blocks
around lines 38–44, 83–89, 170–176, 247–253).
🪄 Autofix (Beta)

❌ Autofix failed (check again to retry)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: a440cbf0-818f-42ec-a5cc-57684ca21295

📥 Commits

Reviewing files that changed from the base of the PR and between a6bc477 and bde420e.

📒 Files selected for processing (8)
  • Dioxus.toml
  • src/components/exercise_form_fields.rs
  • src/components/more.rs
  • src/main.rs
  • src/services/exercise_db.rs
  • src/services/imgcache.rs
  • src/services/notifications.rs
  • src/services/storage.rs

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (2)
src/services/notifications.rs (2)

17-21: ⚠️ Potential issue | 🟠 Major

Do not mask Android permission-probe failures as granted.

Line 20 still falls back to true on JNI errors. Because this value gates the Android notification-permission toast, a broken probe suppresses the only recovery path when it should do the opposite. Log the failure and return false on the error path instead.

Proposed fix
     #[cfg(target_os = "android")]
     {
-        check_android_notification_permission().unwrap_or(true)
+        check_android_notification_permission().unwrap_or_else(|e| {
+            log::warn!("Failed to check Android notification permission: {e}");
+            false
+        })
     }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/services/notifications.rs` around lines 17 - 21, The Android permission
probe in is_notification_permission_granted currently masks JNI errors by using
check_android_notification_permission().unwrap_or(true); change this so that any
Err from check_android_notification_permission() is logged (e.g., process or
crate logger via error!) and the function returns false on error instead of
true, while keeping the successful Ok(bool) behavior; update the #[cfg(target_os
= "android")] block around is_notification_permission_granted and reference
check_android_notification_permission to implement the
logging-and-false-on-error behavior.

38-44: ⚠️ Potential issue | 🔴 Critical

Guard the raw Android handles before calling from_raw.

Lines 39-44 and Lines 84-89 pass ctx.vm() and ctx.context() straight into unsafe JNI conversions. If either pointer is null during an Android lifecycle edge, this becomes undefined behaviour instead of a recoverable error. Mirror the early-return guard already used in src/services/storage.rs before both call sites.

Proposed fix
     let ctx = android_context();
+    if ctx.vm().is_null() || ctx.context().is_null() {
+        return Err("Android context not available".into());
+    }
     let vm = unsafe { JavaVM::from_raw(ctx.vm().cast()) }
         .map_err(|e| format!("JavaVM::from_raw: {e}"))?;
Verification

Expected: src/services/storage.rs shows the null-guard pattern; both call sites above currently do not.

#!/bin/bash
rg -n -C2 'ctx\.vm\(\)\.is_null|ctx\.context\(\)\.is_null|JavaVM::from_raw|JObject::from_raw' \
  src/services/notifications.rs src/services/storage.rs

Also applies to: 83-89

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/services/notifications.rs` around lines 38 - 44, The code calls
JavaVM::from_raw and JObject::from_raw with ctx.vm() and ctx.context() unsafely;
add null-pointer guards like the pattern in src/services/storage.rs before
converting: check ctx.vm().is_null() and ctx.context().is_null() and return an
Err (with a clear message) if null, then perform unsafe JavaVM::from_raw, call
attach_current_thread, and unsafe JObject::from_raw only after the non-null
checks; reference symbols: android_context(), ctx.vm(), JavaVM::from_raw,
attach_current_thread, ctx.context(), JObject::from_raw, and the variables vm
and activity when applying the guards.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/services/notifications.rs`:
- Line 78: Change open_notification_settings() to return Result<(), String> (and
do the same for the other similar function around lines 130-132), stop
swallowing failures by logging only, and instead return an Err containing the
error's to_string(); update callers (e.g., the toast click handler in main.rs)
to handle the Result (use ? or match to keep the toast visible or show a
fallback on Err) so the UI can decide whether to hide the prompt when launching
Settings fails.

---

Duplicate comments:
In `@src/services/notifications.rs`:
- Around line 17-21: The Android permission probe in
is_notification_permission_granted currently masks JNI errors by using
check_android_notification_permission().unwrap_or(true); change this so that any
Err from check_android_notification_permission() is logged (e.g., process or
crate logger via error!) and the function returns false on error instead of
true, while keeping the successful Ok(bool) behavior; update the #[cfg(target_os
= "android")] block around is_notification_permission_granted and reference
check_android_notification_permission to implement the
logging-and-false-on-error behavior.
- Around line 38-44: The code calls JavaVM::from_raw and JObject::from_raw with
ctx.vm() and ctx.context() unsafely; add null-pointer guards like the pattern in
src/services/storage.rs before converting: check ctx.vm().is_null() and
ctx.context().is_null() and return an Err (with a clear message) if null, then
perform unsafe JavaVM::from_raw, call attach_current_thread, and unsafe
JObject::from_raw only after the non-null checks; reference symbols:
android_context(), ctx.vm(), JavaVM::from_raw, attach_current_thread,
ctx.context(), JObject::from_raw, and the variables vm and activity when
applying the guards.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: df04338f-4509-4a1f-85e0-2bee1e71145c

📥 Commits

Reviewing files that changed from the base of the PR and between bde420e and 0d5c866.

📒 Files selected for processing (1)
  • src/services/notifications.rs

gfauredev and others added 4 commits April 6, 2026 21:47
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 6, 2026

Note

Autofix is a beta feature. Expect some limitations and changes as we gather feedback and continue to improve it.

Autofix skipped. No unresolved CodeRabbit review comments with fix instructions found.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

📊 Coverage Report

Lines: 3754/4971 (75.51800442566888%)

⏱️ Tests: 255 tests in 0.620s

FilenameFunction CoverageLine CoverageRegion CoverageBranch Coverage
main.rs
  22.45% (11/49)
  59.16% (155/262)
  60.89% (218/358)
- (0/0)
models/analytics.rs
   0.00% (0/6)
   0.00% (0/34)
   0.00% (0/46)
- (0/0)
models/enums.rs
 100.00% (28/28)
 100.00% (147/147)
 100.00% (337/337)
- (0/0)
models/exercise.rs
  92.00% (46/50)
  92.10% (548/595)
  91.01% (749/823)
- (0/0)
models/log.rs
 100.00% (12/12)
 100.00% (118/118)
 100.00% (144/144)
- (0/0)
models/mod.rs
 100.00% (11/11)
 100.00% (68/68)
 100.00% (98/98)
- (0/0)
models/session.rs
  72.22% (13/18)
  84.36% (151/179)
  83.33% (210/252)
- (0/0)
models/units.rs
 100.00% (28/28)
 100.00% (167/167)
  98.88% (353/357)
- (0/0)
services/app_state.rs
   1.89% (1/53)
   2.54% (11/433)
   2.32% (15/646)
- (0/0)
services/exercise_db.rs
  88.81% (127/143)
  90.30% (1210/1340)
  89.61% (1924/2147)
- (0/0)
services/exercise_loader.rs
   0.00% (0/14)
   0.00% (0/100)
   0.00% (0/135)
- (0/0)
services/native_queue.rs
   0.00% (0/15)
   0.00% (0/145)
   0.00% (0/197)
- (0/0)
services/notifications.rs
   0.00% (0/3)
   0.00% (0/9)
   0.00% (0/10)
- (0/0)
services/service_worker.rs
 100.00% (2/2)
 100.00% (6/6)
 100.00% (6/6)
- (0/0)
services/storage.rs
  63.77% (88/138)
  80.97% (766/946)
  83.53% (1187/1421)
- (0/0)
services/wake_lock.rs
 100.00% (2/2)
 100.00% (5/5)
 100.00% (5/5)
- (0/0)
utils.rs
  92.00% (69/75)
  96.40% (402/417)
  96.97% (640/660)
- (0/0)
Totals
  67.70% (438/647)
  75.52% (3754/4971)
  77.02% (5886/7642)
- (0/0)

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

📊 Coverage Report

Lines: 3754/4971 (75.51800442566888%)

⏱️ Tests: 255 tests in 0.490s

FilenameFunction CoverageLine CoverageRegion CoverageBranch Coverage
main.rs
  22.45% (11/49)
  59.16% (155/262)
  60.89% (218/358)
- (0/0)
models/analytics.rs
   0.00% (0/6)
   0.00% (0/34)
   0.00% (0/46)
- (0/0)
models/enums.rs
 100.00% (28/28)
 100.00% (147/147)
 100.00% (337/337)
- (0/0)
models/exercise.rs
  92.00% (46/50)
  92.10% (548/595)
  91.01% (749/823)
- (0/0)
models/log.rs
 100.00% (12/12)
 100.00% (118/118)
 100.00% (144/144)
- (0/0)
models/mod.rs
 100.00% (11/11)
 100.00% (68/68)
 100.00% (98/98)
- (0/0)
models/session.rs
  72.22% (13/18)
  84.36% (151/179)
  83.33% (210/252)
- (0/0)
models/units.rs
 100.00% (28/28)
 100.00% (167/167)
  98.88% (353/357)
- (0/0)
services/app_state.rs
   1.89% (1/53)
   2.54% (11/433)
   2.32% (15/646)
- (0/0)
services/exercise_db.rs
  88.81% (127/143)
  90.30% (1210/1340)
  89.61% (1924/2147)
- (0/0)
services/exercise_loader.rs
   0.00% (0/14)
   0.00% (0/100)
   0.00% (0/135)
- (0/0)
services/native_queue.rs
   0.00% (0/15)
   0.00% (0/145)
   0.00% (0/197)
- (0/0)
services/notifications.rs
   0.00% (0/3)
   0.00% (0/9)
   0.00% (0/10)
- (0/0)
services/service_worker.rs
 100.00% (2/2)
 100.00% (6/6)
 100.00% (6/6)
- (0/0)
services/storage.rs
  63.77% (88/138)
  80.97% (766/946)
  83.53% (1187/1421)
- (0/0)
services/wake_lock.rs
 100.00% (2/2)
 100.00% (5/5)
 100.00% (5/5)
- (0/0)
utils.rs
  92.00% (69/75)
  96.40% (402/417)
  96.97% (640/660)
- (0/0)
Totals
  67.70% (438/647)
  75.52% (3754/4971)
  77.02% (5886/7642)
- (0/0)

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

📊 Coverage Report

Lines: 3754/4971 (75.51800442566888%)

⏱️ Tests: 255 tests in 0.601s

FilenameFunction CoverageLine CoverageRegion CoverageBranch Coverage
main.rs
  22.45% (11/49)
  59.16% (155/262)
  60.89% (218/358)
- (0/0)
models/analytics.rs
   0.00% (0/6)
   0.00% (0/34)
   0.00% (0/46)
- (0/0)
models/enums.rs
 100.00% (28/28)
 100.00% (147/147)
 100.00% (337/337)
- (0/0)
models/exercise.rs
  92.00% (46/50)
  92.10% (548/595)
  91.01% (749/823)
- (0/0)
models/log.rs
 100.00% (12/12)
 100.00% (118/118)
 100.00% (144/144)
- (0/0)
models/mod.rs
 100.00% (11/11)
 100.00% (68/68)
 100.00% (98/98)
- (0/0)
models/session.rs
  72.22% (13/18)
  84.36% (151/179)
  83.33% (210/252)
- (0/0)
models/units.rs
 100.00% (28/28)
 100.00% (167/167)
  98.88% (353/357)
- (0/0)
services/app_state.rs
   1.89% (1/53)
   2.54% (11/433)
   2.32% (15/646)
- (0/0)
services/exercise_db.rs
  88.81% (127/143)
  90.30% (1210/1340)
  89.61% (1924/2147)
- (0/0)
services/exercise_loader.rs
   0.00% (0/14)
   0.00% (0/100)
   0.00% (0/135)
- (0/0)
services/native_queue.rs
   0.00% (0/15)
   0.00% (0/145)
   0.00% (0/197)
- (0/0)
services/notifications.rs
   0.00% (0/3)
   0.00% (0/9)
   0.00% (0/10)
- (0/0)
services/service_worker.rs
 100.00% (2/2)
 100.00% (6/6)
 100.00% (6/6)
- (0/0)
services/storage.rs
  63.77% (88/138)
  80.97% (766/946)
  83.53% (1187/1421)
- (0/0)
services/wake_lock.rs
 100.00% (2/2)
 100.00% (5/5)
 100.00% (5/5)
- (0/0)
utils.rs
  92.00% (69/75)
  96.40% (402/417)
  96.97% (640/660)
- (0/0)
Totals
  67.70% (438/647)
  75.52% (3754/4971)
  77.02% (5886/7642)
- (0/0)

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

📊 Coverage Report

Lines: 3754/4971 (75.51800442566888%)

⏱️ Tests: 255 tests in 0.612s

FilenameFunction CoverageLine CoverageRegion CoverageBranch Coverage
main.rs
  22.45% (11/49)
  59.16% (155/262)
  60.89% (218/358)
- (0/0)
models/analytics.rs
   0.00% (0/6)
   0.00% (0/34)
   0.00% (0/46)
- (0/0)
models/enums.rs
 100.00% (28/28)
 100.00% (147/147)
 100.00% (337/337)
- (0/0)
models/exercise.rs
  92.00% (46/50)
  92.10% (548/595)
  91.01% (749/823)
- (0/0)
models/log.rs
 100.00% (12/12)
 100.00% (118/118)
 100.00% (144/144)
- (0/0)
models/mod.rs
 100.00% (11/11)
 100.00% (68/68)
 100.00% (98/98)
- (0/0)
models/session.rs
  72.22% (13/18)
  84.36% (151/179)
  83.33% (210/252)
- (0/0)
models/units.rs
 100.00% (28/28)
 100.00% (167/167)
  98.88% (353/357)
- (0/0)
services/app_state.rs
   1.89% (1/53)
   2.54% (11/433)
   2.32% (15/646)
- (0/0)
services/exercise_db.rs
  88.81% (127/143)
  90.30% (1210/1340)
  89.61% (1924/2147)
- (0/0)
services/exercise_loader.rs
   0.00% (0/14)
   0.00% (0/100)
   0.00% (0/135)
- (0/0)
services/native_queue.rs
   0.00% (0/15)
   0.00% (0/145)
   0.00% (0/197)
- (0/0)
services/notifications.rs
   0.00% (0/3)
   0.00% (0/9)
   0.00% (0/10)
- (0/0)
services/service_worker.rs
 100.00% (2/2)
 100.00% (6/6)
 100.00% (6/6)
- (0/0)
services/storage.rs
  63.77% (88/138)
  80.97% (766/946)
  83.53% (1187/1421)
- (0/0)
services/wake_lock.rs
 100.00% (2/2)
 100.00% (5/5)
 100.00% (5/5)
- (0/0)
utils.rs
  92.00% (69/75)
  96.40% (402/417)
  96.97% (640/660)
- (0/0)
Totals
  67.70% (438/647)
  75.52% (3754/4971)
  77.02% (5886/7642)
- (0/0)

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

❌ Maestro Web E2E Failures

📜 Maestro Console Output (Last 100 lines)
copying path '/nix/store/9g18my8aw2iyz5mjrxlb4nqra8jdhm8n-systemd-minimal-259.3' from 'https://cache.nixos.org'...
copying path '/nix/store/iqxriv7vl5xzsk86rjy7v72f3dgpaxb5-lilv-0.26.2' from 'https://cache.nixos.org'...
copying path '/nix/store/0w9wqd9awzhg2vm7j43mjz5i83ss81ij-wildmidi-0.4.6' from 'https://cache.nixos.org'...
copying path '/nix/store/nwq8f8cf9lib30l1hz93cfxfgamapka6-tpm2-tss-4.1.3' from 'https://cache.nixos.org'...
copying path '/nix/store/g6mlwdvpg92rchq352ll7jbi0pz7h43r-xz-5.8.2-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/8cc8cdqa54bahfi5n5glkm8d252zkkjn-zstd-1.5.7-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/q3xfaw0xw291byfii8784q43xvs3bd36-libsoup-3.6.6' from 'https://cache.nixos.org'...
copying path '/nix/store/3nk9r14756spfafgji1prgxf9qhixxf6-nss-3.112.3' from 'https://cache.nixos.org'...
copying path '/nix/store/pzdalg368npikvpq4ncz2saxnz19v53k-python3-3.13.12' from 'https://cache.nixos.org'...
copying path '/nix/store/s2grcjv8pklvkajk3mkh75aja5dppx6z-stdenv-linux' from 'https://cache.nixos.org'...
copying path '/nix/store/q4v09bffjy5i0f2kdwnbbwmhqv6i3pjs-zstd-1.5.7-dev' from 'https://cache.nixos.org'...
copying path '/nix/store/ik8a7b32nqv2q5p4g86hmp65jklmrp3g-systemd-259.3' from 'https://cache.nixos.org'...
copying path '/nix/store/4yb9bqdx98ycqajvkk13dmx9nz9ya80x-gssdp-1.6.4' from 'https://cache.nixos.org'...
copying path '/nix/store/xv2cv8hv0blhlkqhcp4psblcqci9qfx6-chromedriver-unwrapped-146.0.7680.177' from 'https://cache.nixos.org'...
copying path '/nix/store/axzfvd6f655hnp92c3fv0n571avg1yb6-gupnp-1.6.9' from 'https://cache.nixos.org'...
copying path '/nix/store/mx745sg11i2na27igmmgnlf450h9dl65-dbus-1.16.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/67yaxggsvwhd5x7ffqj8bcq3hvs136ph-gupnp-igd-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/8nqw35icyjsvqk32n0i6132vk3l1x1qg-at-spi2-core-2.58.3' from 'https://cache.nixos.org'...
copying path '/nix/store/51z2kgz91wjy629fs3hcph0iajvm7s1w-avahi-0.8' from 'https://cache.nixos.org'...
copying path '/nix/store/asmzi65xzpjdnjvlyn39xlarp2x6cpj3-libjack2-1.9.22' from 'https://cache.nixos.org'...
copying path '/nix/store/5gln2rkcjx93cr5x0rr3wqrxjdmshd2f-dbus-1.16.2' from 'https://cache.nixos.org'...
copying path '/nix/store/h62im4mqizh3smv2n532jncaz47819w4-bluez-5.84' from 'https://cache.nixos.org'...
copying path '/nix/store/8qs5mhyg6abqy924s1g07wddyjjddxiv-libpulseaudio-17.0' from 'https://cache.nixos.org'...
copying path '/nix/store/ihbk8s7b58dd63z7x573zcp38hcvxfh2-perl5.42.0-X11-Protocol-0.56' from 'https://cache.nixos.org'...
copying path '/nix/store/p41sp77l8hv57iklz8gazdvr34bjvhd9-perl5.42.0-File-MimeInfo-0.33' from 'https://cache.nixos.org'...
copying path '/nix/store/xq5xj979jbifdbnck57nci15xjmx08ny-perl5.42.0-libwww-perl-6.72' from 'https://cache.nixos.org'...
copying path '/nix/store/qk1d0xniardydr9rkhnnivz2ccmznw2q-cups-2.4.16-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/1m4n4g1y9q24vi5bhy53k98rbxyfs2f5-tinysparql-3.10.1' from 'https://cache.nixos.org'...
copying path '/nix/store/z01j5ypjq5lsl2xhbiw9yf2w0p16ygwk-perl5.42.0-XML-Parser-2.46' from 'https://cache.nixos.org'...
copying path '/nix/store/7qzvqi0niqsgnxbc8w8pbfm0qqhfm14n-flite-2.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/i5ya73idqgmxpki1h0cq4j13jx9vl4kn-fluidsynth-2.5.3' from 'https://cache.nixos.org'...
copying path '/nix/store/2vfrbgr72f60dc66mf6bpyxmhglkgaby-libao-1.2.2' from 'https://cache.nixos.org'...
copying path '/nix/store/lpc21304lsg3mwr4bz84d2fnr947mmhz-mpg123-1.33.4' from 'https://cache.nixos.org'...
copying path '/nix/store/ca9p0l36x7zw9742ak8vy70phmsng1ns-cups-2.4.16' from 'https://cache.nixos.org'...
copying path '/nix/store/vz6zpxygfjy3vsjxs3ly32c5ynn10f2b-ungoogled-chromium-unwrapped-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/yl5yl395iqx88kd1m7lx7p7b65n0jfx9-gtk+3-3.24.51' from 'https://cache.nixos.org'...
copying path '/nix/store/bbv0vprkcppy60mbpaqrxmid6xl6fqlv-perl5.42.0-XML-Twig-3.52' from 'https://cache.nixos.org'...
copying path '/nix/store/kdfxyngq84c0rbqd40jhgv5j4dmwv6l0-sox-unstable-2021-05-09-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/hh5xqz1aj82wp3p7ncr0ipjwl6ylb28v-libopenmpt-0.8.4' from 'https://cache.nixos.org'...
copying path '/nix/store/6296bwxad0yr896x9vqxjzy6s3yyjy7z-perl5.42.0-Net-DBus-1.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/z5p8cy7zsrz85hcf5i0pggx2gg5rcgg3-roc-toolkit-0.4.0' from 'https://cache.nixos.org'...
copying path '/nix/store/m5c6wbkiqh753s3v6wnk9l0ad7sl9y1y-ffmpeg-headless-8.0.1-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/l6lwzgj70lwmhf1nkdbrcli7sn530lpg-xdg-utils-1.2.1' from 'https://cache.nixos.org'...
copying path '/nix/store/lccknd7yjw6bbnnmvz0vq5vra4w4z4dz-chromaprint-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/s8w14kgj50iqw1w0jdwn9s1m0k4plzgs-gstreamer-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/2q0snh31cxlr09nsb1qp2yna2ql29k4p-libcanberra-0.30' from 'https://cache.nixos.org'...
copying path '/nix/store/zyh3vyl2k8j9x1wbw02zk1glp5d5i963-gst-plugins-base-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/0pikx4f2448sc0cgikw9yvfxq6grxdpq-libnice-0.1.22' from 'https://cache.nixos.org'...
copying path '/nix/store/f3nqnwrza03hf9l4vndjg3r4lbknf4n4-libcamera-0.7.0' from 'https://cache.nixos.org'...
copying path '/nix/store/nn129jwsznqv7k888wb05m5whpyndqrf-pipewire-1.6.2' from 'https://cache.nixos.org'...
copying path '/nix/store/hb2bs5fg5wkm04x565737qd5nh2hy5nk-gcc-wrapper-15.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/ahfz4q9z487796nf71bmgsdl3703ksj7-openal-soft-1.24.3' from 'https://cache.nixos.org'...
copying path '/nix/store/gvq9hvvnmkvrk27mba0jjjppj068z55x-stdenv-linux' from 'https://cache.nixos.org'...
copying path '/nix/store/v5qy1399hlrnk8z6mhlzg5jz08rw3l0j-gst-plugins-bad-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/l5ax073f4k5f6mbnl9fdpfiwldyxli7a-clippy-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/9993qmj4n54mz6mnmzzc72px36mirqa5-rustfmt-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/157hw9f81x6523chpb4fis99b3x2zq27-rust-analyzer-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/hjp25ksf3axb4czp7sllvzl1bkpfwsyg-gtk4-4.20.3' from 'https://cache.nixos.org'...
copying path '/nix/store/8l7m6nswqrmfx6bxblsci8sgmgwrh5w6-rust-default-1.94.1' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/hal3i0mcgsrkpharzpdjz6m10hxnxnvr-clang-21.1.8-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/b25d7klxqlzl5scnq1lygjk88fg8j8fi-logout-deps-0.4.3' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/5n58fciczf6bld98mzpgawkvs7jzwbqy-wasm-bindgen-cli-0.2.117' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/3rvfqwn4g23599vpl66lk533d9y3db8w-ungoogled-chromium-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/i1k0ay79xdxmn9qvnyfqmvk3ih0ch2d3-google-chrome' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/jh6qssswq7assbhby478d8gli8ksnf2p-maestro-2.3.0' from 'https://cache.nixos.org'...
copying path '/nix/store/zb8py6p8qq01nygnnf8jrnkps9nna189-clang-21.1.8' from 'https://cache.nixos.org'...
copying path '/nix/store/hh6y3s72d21whp6q98h4dh0valxiaw69-clang-wrapper-21.1.8' from 'https://cache.nixos.org'...
building '/nix/store/0pjvf39dd2ja6jb03g43sqr482czrrhb-logout-server-0.4.3.drv'...
building '/nix/store/dgqbw7rzqc4y2974dw9k2hl43hyz5f4i-logout-web-e2e-test-0.4.3.drv'...
2026-04-06T19:54:09.771028Z  WARN dioxus_server::config: No index.html found in public directory, using default index.html
Anonymous analytics enabled. To opt out, set MAESTRO_CLI_NO_ANALYTICS environment variable to any value before running Maestro.


Web support is in Beta. We would appreciate your feedback!


Waiting for flows to complete...
[Passed] 03_navigate_to_credits (3s)
[Passed] 06_navigate_to_exercise_list (3s)
[Passed] 04_clean_state_credits (3s)
[Failed] 11_edit_cloned_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 07_clean_state_exercise_list (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 20_be_astonished_by_progress (18s) (Assertion is false: "Today" is visible)
[Failed] 01_start (18s) (Assertion is false: "No past sessions yet" is visible)
[Failed] 16_cancel_empty_session (18s) (Assertion is false: "No past sessions yet" is visible)
[Passed] 05_change_exercises_database (15s)
[Failed] 17_repeat_session (19s) (Assertion is false: "Today" is visible)
[Failed] 18_delete_past_session (19s) (Assertion is false: "Today" is visible)
[Passed] 12_navigate_to_analytics (3s)
[Failed] 02_allow_notifications (18s) (Assertion is false: "⚠️ Tap here to enable notifications" is visible)
[Failed] 09_learn_about_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Passed] 13_clean_state_analytics (3s)
[Passed] 14_navigate_back_to_home (4s)
[Failed] 08_search_exercises (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 10_add_custom_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 19_lookup_past_exercise (19s) (Assertion is false: "Today" is visible)
[Failed] 15_full_workout_session (20s) (Assertion is false: "⏱️ Active Session" is visible)

13/20 Flows Failed

📸 Screenshots

  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

❌ Maestro Web E2E Failures

📜 Maestro Console Output (Last 100 lines)
copying path '/nix/store/9g18my8aw2iyz5mjrxlb4nqra8jdhm8n-systemd-minimal-259.3' from 'https://cache.nixos.org'...
copying path '/nix/store/kn9lwgvdaa94nl9nsxx5p198gry21n03-librsvg-2.61.4' from 'https://cache.nixos.org'...
copying path '/nix/store/nwq8f8cf9lib30l1hz93cfxfgamapka6-tpm2-tss-4.1.3' from 'https://cache.nixos.org'...
copying path '/nix/store/0w9wqd9awzhg2vm7j43mjz5i83ss81ij-wildmidi-0.4.6' from 'https://cache.nixos.org'...
copying path '/nix/store/8cc8cdqa54bahfi5n5glkm8d252zkkjn-zstd-1.5.7-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/gknk1jw10h0pswl53ps5xj06cmwza52p-binutils-wrapper-2.44' from 'https://cache.nixos.org'...
copying path '/nix/store/x7ikkplbrv5dlihy1bqq32gp6lilkval-binutils-wrapper-2.44' from 'https://cache.nixos.org'...
copying path '/nix/store/q4v09bffjy5i0f2kdwnbbwmhqv6i3pjs-zstd-1.5.7-dev' from 'https://cache.nixos.org'...
copying path '/nix/store/q3xfaw0xw291byfii8784q43xvs3bd36-libsoup-3.6.6' from 'https://cache.nixos.org'...
copying path '/nix/store/pzdalg368npikvpq4ncz2saxnz19v53k-python3-3.13.12' from 'https://cache.nixos.org'...
copying path '/nix/store/3nk9r14756spfafgji1prgxf9qhixxf6-nss-3.112.3' from 'https://cache.nixos.org'...
copying path '/nix/store/ik8a7b32nqv2q5p4g86hmp65jklmrp3g-systemd-259.3' from 'https://cache.nixos.org'...
copying path '/nix/store/4yb9bqdx98ycqajvkk13dmx9nz9ya80x-gssdp-1.6.4' from 'https://cache.nixos.org'...
copying path '/nix/store/xv2cv8hv0blhlkqhcp4psblcqci9qfx6-chromedriver-unwrapped-146.0.7680.177' from 'https://cache.nixos.org'...
copying path '/nix/store/axzfvd6f655hnp92c3fv0n571avg1yb6-gupnp-1.6.9' from 'https://cache.nixos.org'...
copying path '/nix/store/mx745sg11i2na27igmmgnlf450h9dl65-dbus-1.16.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/67yaxggsvwhd5x7ffqj8bcq3hvs136ph-gupnp-igd-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/8nqw35icyjsvqk32n0i6132vk3l1x1qg-at-spi2-core-2.58.3' from 'https://cache.nixos.org'...
copying path '/nix/store/51z2kgz91wjy629fs3hcph0iajvm7s1w-avahi-0.8' from 'https://cache.nixos.org'...
copying path '/nix/store/5gln2rkcjx93cr5x0rr3wqrxjdmshd2f-dbus-1.16.2' from 'https://cache.nixos.org'...
copying path '/nix/store/h62im4mqizh3smv2n532jncaz47819w4-bluez-5.84' from 'https://cache.nixos.org'...
copying path '/nix/store/asmzi65xzpjdnjvlyn39xlarp2x6cpj3-libjack2-1.9.22' from 'https://cache.nixos.org'...
copying path '/nix/store/8qs5mhyg6abqy924s1g07wddyjjddxiv-libpulseaudio-17.0' from 'https://cache.nixos.org'...
copying path '/nix/store/qk1d0xniardydr9rkhnnivz2ccmznw2q-cups-2.4.16-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/1m4n4g1y9q24vi5bhy53k98rbxyfs2f5-tinysparql-3.10.1' from 'https://cache.nixos.org'...
copying path '/nix/store/p41sp77l8hv57iklz8gazdvr34bjvhd9-perl5.42.0-File-MimeInfo-0.33' from 'https://cache.nixos.org'...
copying path '/nix/store/ihbk8s7b58dd63z7x573zcp38hcvxfh2-perl5.42.0-X11-Protocol-0.56' from 'https://cache.nixos.org'...
copying path '/nix/store/xq5xj979jbifdbnck57nci15xjmx08ny-perl5.42.0-libwww-perl-6.72' from 'https://cache.nixos.org'...
copying path '/nix/store/ca9p0l36x7zw9742ak8vy70phmsng1ns-cups-2.4.16' from 'https://cache.nixos.org'...
copying path '/nix/store/i5ya73idqgmxpki1h0cq4j13jx9vl4kn-fluidsynth-2.5.3' from 'https://cache.nixos.org'...
copying path '/nix/store/lpc21304lsg3mwr4bz84d2fnr947mmhz-mpg123-1.33.4' from 'https://cache.nixos.org'...
copying path '/nix/store/2vfrbgr72f60dc66mf6bpyxmhglkgaby-libao-1.2.2' from 'https://cache.nixos.org'...
copying path '/nix/store/vz6zpxygfjy3vsjxs3ly32c5ynn10f2b-ungoogled-chromium-unwrapped-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/7qzvqi0niqsgnxbc8w8pbfm0qqhfm14n-flite-2.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/z01j5ypjq5lsl2xhbiw9yf2w0p16ygwk-perl5.42.0-XML-Parser-2.46' from 'https://cache.nixos.org'...
copying path '/nix/store/yl5yl395iqx88kd1m7lx7p7b65n0jfx9-gtk+3-3.24.51' from 'https://cache.nixos.org'...
copying path '/nix/store/kdfxyngq84c0rbqd40jhgv5j4dmwv6l0-sox-unstable-2021-05-09-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/hh5xqz1aj82wp3p7ncr0ipjwl6ylb28v-libopenmpt-0.8.4' from 'https://cache.nixos.org'...
copying path '/nix/store/bbv0vprkcppy60mbpaqrxmid6xl6fqlv-perl5.42.0-XML-Twig-3.52' from 'https://cache.nixos.org'...
copying path '/nix/store/z5p8cy7zsrz85hcf5i0pggx2gg5rcgg3-roc-toolkit-0.4.0' from 'https://cache.nixos.org'...
copying path '/nix/store/6296bwxad0yr896x9vqxjzy6s3yyjy7z-perl5.42.0-Net-DBus-1.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/m5c6wbkiqh753s3v6wnk9l0ad7sl9y1y-ffmpeg-headless-8.0.1-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/l6lwzgj70lwmhf1nkdbrcli7sn530lpg-xdg-utils-1.2.1' from 'https://cache.nixos.org'...
copying path '/nix/store/lccknd7yjw6bbnnmvz0vq5vra4w4z4dz-chromaprint-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/s8w14kgj50iqw1w0jdwn9s1m0k4plzgs-gstreamer-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/zyh3vyl2k8j9x1wbw02zk1glp5d5i963-gst-plugins-base-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/2q0snh31cxlr09nsb1qp2yna2ql29k4p-libcanberra-0.30' from 'https://cache.nixos.org'...
copying path '/nix/store/0pikx4f2448sc0cgikw9yvfxq6grxdpq-libnice-0.1.22' from 'https://cache.nixos.org'...
copying path '/nix/store/f3nqnwrza03hf9l4vndjg3r4lbknf4n4-libcamera-0.7.0' from 'https://cache.nixos.org'...
copying path '/nix/store/nn129jwsznqv7k888wb05m5whpyndqrf-pipewire-1.6.2' from 'https://cache.nixos.org'...
copying path '/nix/store/ahfz4q9z487796nf71bmgsdl3703ksj7-openal-soft-1.24.3' from 'https://cache.nixos.org'...
copying path '/nix/store/v5qy1399hlrnk8z6mhlzg5jz08rw3l0j-gst-plugins-bad-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/l5ax073f4k5f6mbnl9fdpfiwldyxli7a-clippy-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/157hw9f81x6523chpb4fis99b3x2zq27-rust-analyzer-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/9993qmj4n54mz6mnmzzc72px36mirqa5-rustfmt-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/hjp25ksf3axb4czp7sllvzl1bkpfwsyg-gtk4-4.20.3' from 'https://cache.nixos.org'...
copying path '/nix/store/hb2bs5fg5wkm04x565737qd5nh2hy5nk-gcc-wrapper-15.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/8l7m6nswqrmfx6bxblsci8sgmgwrh5w6-rust-default-1.94.1' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/gvq9hvvnmkvrk27mba0jjjppj068z55x-stdenv-linux' from 'https://cache.nixos.org'...
copying path '/nix/store/hal3i0mcgsrkpharzpdjz6m10hxnxnvr-clang-21.1.8-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/b25d7klxqlzl5scnq1lygjk88fg8j8fi-logout-deps-0.4.3' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/5n58fciczf6bld98mzpgawkvs7jzwbqy-wasm-bindgen-cli-0.2.117' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/jh6qssswq7assbhby478d8gli8ksnf2p-maestro-2.3.0' from 'https://cache.nixos.org'...
copying path '/nix/store/3rvfqwn4g23599vpl66lk533d9y3db8w-ungoogled-chromium-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/i1k0ay79xdxmn9qvnyfqmvk3ih0ch2d3-google-chrome' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/zb8py6p8qq01nygnnf8jrnkps9nna189-clang-21.1.8' from 'https://cache.nixos.org'...
copying path '/nix/store/hh6y3s72d21whp6q98h4dh0valxiaw69-clang-wrapper-21.1.8' from 'https://cache.nixos.org'...
building '/nix/store/qmv2jxk1grrryxqnyhz3rz74sfhr9m1i-logout-server-0.4.3.drv'...
building '/nix/store/0nmqn0v0bsp2c6ypmgni97x5cnlbzr62-logout-web-e2e-test-0.4.3.drv'...
2026-04-06T19:54:30.735472Z  WARN dioxus_server::config: No index.html found in public directory, using default index.html
Anonymous analytics enabled. To opt out, set MAESTRO_CLI_NO_ANALYTICS environment variable to any value before running Maestro.


Web support is in Beta. We would appreciate your feedback!


Waiting for flows to complete...
[Passed] 03_navigate_to_credits (3s)
[Passed] 06_navigate_to_exercise_list (3s)
[Passed] 04_clean_state_credits (3s)
[Failed] 11_edit_cloned_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 07_clean_state_exercise_list (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 20_be_astonished_by_progress (18s) (Assertion is false: "Today" is visible)
[Failed] 01_start (18s) (Assertion is false: "No past sessions yet" is visible)
[Failed] 16_cancel_empty_session (18s) (Assertion is false: "No past sessions yet" is visible)
[Passed] 05_change_exercises_database (14s)
[Failed] 17_repeat_session (19s) (Assertion is false: "Today" is visible)
[Failed] 18_delete_past_session (19s) (Assertion is false: "Today" is visible)
[Passed] 12_navigate_to_analytics (3s)
[Failed] 02_allow_notifications (18s) (Assertion is false: "⚠️ Tap here to enable notifications" is visible)
[Failed] 09_learn_about_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Passed] 13_clean_state_analytics (3s)
[Passed] 14_navigate_back_to_home (4s)
[Failed] 08_search_exercises (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 10_add_custom_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 19_lookup_past_exercise (19s) (Assertion is false: "Today" is visible)
[Failed] 15_full_workout_session (20s) (Assertion is false: "⏱️ Active Session" is visible)

13/20 Flows Failed

📸 Screenshots

  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

❌ Maestro Web E2E Failures

📜 Maestro Console Output (Last 100 lines)
copying path '/nix/store/0w9wqd9awzhg2vm7j43mjz5i83ss81ij-wildmidi-0.4.6' from 'https://cache.nixos.org'...
copying path '/nix/store/iqxriv7vl5xzsk86rjy7v72f3dgpaxb5-lilv-0.26.2' from 'https://cache.nixos.org'...
copying path '/nix/store/g6mlwdvpg92rchq352ll7jbi0pz7h43r-xz-5.8.2-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/gknk1jw10h0pswl53ps5xj06cmwza52p-binutils-wrapper-2.44' from 'https://cache.nixos.org'...
copying path '/nix/store/x7ikkplbrv5dlihy1bqq32gp6lilkval-binutils-wrapper-2.44' from 'https://cache.nixos.org'...
copying path '/nix/store/ik8a7b32nqv2q5p4g86hmp65jklmrp3g-systemd-259.3' from 'https://cache.nixos.org'...
copying path '/nix/store/8cc8cdqa54bahfi5n5glkm8d252zkkjn-zstd-1.5.7-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/s2grcjv8pklvkajk3mkh75aja5dppx6z-stdenv-linux' from 'https://cache.nixos.org'...
copying path '/nix/store/q3xfaw0xw291byfii8784q43xvs3bd36-libsoup-3.6.6' from 'https://cache.nixos.org'...
copying path '/nix/store/3nk9r14756spfafgji1prgxf9qhixxf6-nss-3.112.3' from 'https://cache.nixos.org'...
copying path '/nix/store/pzdalg368npikvpq4ncz2saxnz19v53k-python3-3.13.12' from 'https://cache.nixos.org'...
copying path '/nix/store/q4v09bffjy5i0f2kdwnbbwmhqv6i3pjs-zstd-1.5.7-dev' from 'https://cache.nixos.org'...
copying path '/nix/store/4yb9bqdx98ycqajvkk13dmx9nz9ya80x-gssdp-1.6.4' from 'https://cache.nixos.org'...
copying path '/nix/store/axzfvd6f655hnp92c3fv0n571avg1yb6-gupnp-1.6.9' from 'https://cache.nixos.org'...
copying path '/nix/store/67yaxggsvwhd5x7ffqj8bcq3hvs136ph-gupnp-igd-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/xv2cv8hv0blhlkqhcp4psblcqci9qfx6-chromedriver-unwrapped-146.0.7680.177' from 'https://cache.nixos.org'...
copying path '/nix/store/mx745sg11i2na27igmmgnlf450h9dl65-dbus-1.16.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/8nqw35icyjsvqk32n0i6132vk3l1x1qg-at-spi2-core-2.58.3' from 'https://cache.nixos.org'...
copying path '/nix/store/h62im4mqizh3smv2n532jncaz47819w4-bluez-5.84' from 'https://cache.nixos.org'...
copying path '/nix/store/51z2kgz91wjy629fs3hcph0iajvm7s1w-avahi-0.8' from 'https://cache.nixos.org'...
copying path '/nix/store/asmzi65xzpjdnjvlyn39xlarp2x6cpj3-libjack2-1.9.22' from 'https://cache.nixos.org'...
copying path '/nix/store/5gln2rkcjx93cr5x0rr3wqrxjdmshd2f-dbus-1.16.2' from 'https://cache.nixos.org'...
copying path '/nix/store/8qs5mhyg6abqy924s1g07wddyjjddxiv-libpulseaudio-17.0' from 'https://cache.nixos.org'...
copying path '/nix/store/1m4n4g1y9q24vi5bhy53k98rbxyfs2f5-tinysparql-3.10.1' from 'https://cache.nixos.org'...
copying path '/nix/store/qk1d0xniardydr9rkhnnivz2ccmznw2q-cups-2.4.16-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/ca9p0l36x7zw9742ak8vy70phmsng1ns-cups-2.4.16' from 'https://cache.nixos.org'...
copying path '/nix/store/7qzvqi0niqsgnxbc8w8pbfm0qqhfm14n-flite-2.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/i5ya73idqgmxpki1h0cq4j13jx9vl4kn-fluidsynth-2.5.3' from 'https://cache.nixos.org'...
copying path '/nix/store/2vfrbgr72f60dc66mf6bpyxmhglkgaby-libao-1.2.2' from 'https://cache.nixos.org'...
copying path '/nix/store/lpc21304lsg3mwr4bz84d2fnr947mmhz-mpg123-1.33.4' from 'https://cache.nixos.org'...
copying path '/nix/store/vz6zpxygfjy3vsjxs3ly32c5ynn10f2b-ungoogled-chromium-unwrapped-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/yl5yl395iqx88kd1m7lx7p7b65n0jfx9-gtk+3-3.24.51' from 'https://cache.nixos.org'...
copying path '/nix/store/kdfxyngq84c0rbqd40jhgv5j4dmwv6l0-sox-unstable-2021-05-09-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/hh5xqz1aj82wp3p7ncr0ipjwl6ylb28v-libopenmpt-0.8.4' from 'https://cache.nixos.org'...
copying path '/nix/store/z5p8cy7zsrz85hcf5i0pggx2gg5rcgg3-roc-toolkit-0.4.0' from 'https://cache.nixos.org'...
copying path '/nix/store/p41sp77l8hv57iklz8gazdvr34bjvhd9-perl5.42.0-File-MimeInfo-0.33' from 'https://cache.nixos.org'...
copying path '/nix/store/ihbk8s7b58dd63z7x573zcp38hcvxfh2-perl5.42.0-X11-Protocol-0.56' from 'https://cache.nixos.org'...
copying path '/nix/store/xq5xj979jbifdbnck57nci15xjmx08ny-perl5.42.0-libwww-perl-6.72' from 'https://cache.nixos.org'...
copying path '/nix/store/m5c6wbkiqh753s3v6wnk9l0ad7sl9y1y-ffmpeg-headless-8.0.1-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/z01j5ypjq5lsl2xhbiw9yf2w0p16ygwk-perl5.42.0-XML-Parser-2.46' from 'https://cache.nixos.org'...
copying path '/nix/store/bbv0vprkcppy60mbpaqrxmid6xl6fqlv-perl5.42.0-XML-Twig-3.52' from 'https://cache.nixos.org'...
copying path '/nix/store/6296bwxad0yr896x9vqxjzy6s3yyjy7z-perl5.42.0-Net-DBus-1.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/l6lwzgj70lwmhf1nkdbrcli7sn530lpg-xdg-utils-1.2.1' from 'https://cache.nixos.org'...
copying path '/nix/store/lccknd7yjw6bbnnmvz0vq5vra4w4z4dz-chromaprint-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/s8w14kgj50iqw1w0jdwn9s1m0k4plzgs-gstreamer-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/2q0snh31cxlr09nsb1qp2yna2ql29k4p-libcanberra-0.30' from 'https://cache.nixos.org'...
copying path '/nix/store/zyh3vyl2k8j9x1wbw02zk1glp5d5i963-gst-plugins-base-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/0pikx4f2448sc0cgikw9yvfxq6grxdpq-libnice-0.1.22' from 'https://cache.nixos.org'...
copying path '/nix/store/f3nqnwrza03hf9l4vndjg3r4lbknf4n4-libcamera-0.7.0' from 'https://cache.nixos.org'...
copying path '/nix/store/nn129jwsznqv7k888wb05m5whpyndqrf-pipewire-1.6.2' from 'https://cache.nixos.org'...
copying path '/nix/store/ahfz4q9z487796nf71bmgsdl3703ksj7-openal-soft-1.24.3' from 'https://cache.nixos.org'...
copying path '/nix/store/v5qy1399hlrnk8z6mhlzg5jz08rw3l0j-gst-plugins-bad-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/hjp25ksf3axb4czp7sllvzl1bkpfwsyg-gtk4-4.20.3' from 'https://cache.nixos.org'...
copying path '/nix/store/hb2bs5fg5wkm04x565737qd5nh2hy5nk-gcc-wrapper-15.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/gvq9hvvnmkvrk27mba0jjjppj068z55x-stdenv-linux' from 'https://cache.nixos.org'...
copying path '/nix/store/l5ax073f4k5f6mbnl9fdpfiwldyxli7a-clippy-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/157hw9f81x6523chpb4fis99b3x2zq27-rust-analyzer-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/9993qmj4n54mz6mnmzzc72px36mirqa5-rustfmt-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/8l7m6nswqrmfx6bxblsci8sgmgwrh5w6-rust-default-1.94.1' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/hal3i0mcgsrkpharzpdjz6m10hxnxnvr-clang-21.1.8-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/b25d7klxqlzl5scnq1lygjk88fg8j8fi-logout-deps-0.4.3' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/5n58fciczf6bld98mzpgawkvs7jzwbqy-wasm-bindgen-cli-0.2.117' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/3rvfqwn4g23599vpl66lk533d9y3db8w-ungoogled-chromium-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/i1k0ay79xdxmn9qvnyfqmvk3ih0ch2d3-google-chrome' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/jh6qssswq7assbhby478d8gli8ksnf2p-maestro-2.3.0' from 'https://cache.nixos.org'...
copying path '/nix/store/zb8py6p8qq01nygnnf8jrnkps9nna189-clang-21.1.8' from 'https://cache.nixos.org'...
copying path '/nix/store/hh6y3s72d21whp6q98h4dh0valxiaw69-clang-wrapper-21.1.8' from 'https://cache.nixos.org'...
building '/nix/store/6nz5lsb3fswyz4h5r861p02w9g9idsk6-logout-server-0.4.3.drv'...
building '/nix/store/bx0d2czskl6b1513jd72d6bs8nldnf7g-logout-web-e2e-test-0.4.3.drv'...
2026-04-06T19:55:20.380342Z  WARN dioxus_server::config: No index.html found in public directory, using default index.html
Anonymous analytics enabled. To opt out, set MAESTRO_CLI_NO_ANALYTICS environment variable to any value before running Maestro.


Web support is in Beta. We would appreciate your feedback!


Waiting for flows to complete...
[Passed] 03_navigate_to_credits (3s)
[Passed] 06_navigate_to_exercise_list (3s)
[Passed] 04_clean_state_credits (3s)
[Failed] 11_edit_cloned_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 07_clean_state_exercise_list (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 20_be_astonished_by_progress (19s) (Assertion is false: "Today" is visible)
[Failed] 01_start (18s) (Assertion is false: "No past sessions yet" is visible)
[Failed] 16_cancel_empty_session (18s) (Assertion is false: "No past sessions yet" is visible)
[Passed] 05_change_exercises_database (15s)
[Failed] 17_repeat_session (19s) (Assertion is false: "Today" is visible)
[Failed] 18_delete_past_session (19s) (Assertion is false: "Today" is visible)
[Passed] 12_navigate_to_analytics (3s)
[Failed] 02_allow_notifications (18s) (Assertion is false: "⚠️ Tap here to enable notifications" is visible)
[Failed] 09_learn_about_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Passed] 13_clean_state_analytics (3s)
[Passed] 14_navigate_back_to_home (4s)
[Failed] 08_search_exercises (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 10_add_custom_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 19_lookup_past_exercise (19s) (Assertion is false: "Today" is visible)
[Failed] 15_full_workout_session (20s) (Assertion is false: "⏱️ Active Session" is visible)

13/20 Flows Failed

📸 Screenshots

  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

❌ Maestro Web E2E Failures

📜 Maestro Console Output (Last 100 lines)
copying path '/nix/store/9g18my8aw2iyz5mjrxlb4nqra8jdhm8n-systemd-minimal-259.3' from 'https://cache.nixos.org'...
copying path '/nix/store/nwq8f8cf9lib30l1hz93cfxfgamapka6-tpm2-tss-4.1.3' from 'https://cache.nixos.org'...
copying path '/nix/store/kn9lwgvdaa94nl9nsxx5p198gry21n03-librsvg-2.61.4' from 'https://cache.nixos.org'...
copying path '/nix/store/0w9wqd9awzhg2vm7j43mjz5i83ss81ij-wildmidi-0.4.6' from 'https://cache.nixos.org'...
copying path '/nix/store/8cc8cdqa54bahfi5n5glkm8d252zkkjn-zstd-1.5.7-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/iqxriv7vl5xzsk86rjy7v72f3dgpaxb5-lilv-0.26.2' from 'https://cache.nixos.org'...
copying path '/nix/store/am1qqydxk0qnn66dfwa9k6dyrqhghkfi-zxing-cpp-2.3.0' from 'https://cache.nixos.org'...
copying path '/nix/store/q3xfaw0xw291byfii8784q43xvs3bd36-libsoup-3.6.6' from 'https://cache.nixos.org'...
copying path '/nix/store/3nk9r14756spfafgji1prgxf9qhixxf6-nss-3.112.3' from 'https://cache.nixos.org'...
copying path '/nix/store/pzdalg368npikvpq4ncz2saxnz19v53k-python3-3.13.12' from 'https://cache.nixos.org'...
copying path '/nix/store/q4v09bffjy5i0f2kdwnbbwmhqv6i3pjs-zstd-1.5.7-dev' from 'https://cache.nixos.org'...
copying path '/nix/store/ik8a7b32nqv2q5p4g86hmp65jklmrp3g-systemd-259.3' from 'https://cache.nixos.org'...
copying path '/nix/store/4yb9bqdx98ycqajvkk13dmx9nz9ya80x-gssdp-1.6.4' from 'https://cache.nixos.org'...
copying path '/nix/store/xv2cv8hv0blhlkqhcp4psblcqci9qfx6-chromedriver-unwrapped-146.0.7680.177' from 'https://cache.nixos.org'...
copying path '/nix/store/axzfvd6f655hnp92c3fv0n571avg1yb6-gupnp-1.6.9' from 'https://cache.nixos.org'...
copying path '/nix/store/67yaxggsvwhd5x7ffqj8bcq3hvs136ph-gupnp-igd-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/mx745sg11i2na27igmmgnlf450h9dl65-dbus-1.16.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/51z2kgz91wjy629fs3hcph0iajvm7s1w-avahi-0.8' from 'https://cache.nixos.org'...
copying path '/nix/store/h62im4mqizh3smv2n532jncaz47819w4-bluez-5.84' from 'https://cache.nixos.org'...
copying path '/nix/store/8nqw35icyjsvqk32n0i6132vk3l1x1qg-at-spi2-core-2.58.3' from 'https://cache.nixos.org'...
copying path '/nix/store/5gln2rkcjx93cr5x0rr3wqrxjdmshd2f-dbus-1.16.2' from 'https://cache.nixos.org'...
copying path '/nix/store/asmzi65xzpjdnjvlyn39xlarp2x6cpj3-libjack2-1.9.22' from 'https://cache.nixos.org'...
copying path '/nix/store/8qs5mhyg6abqy924s1g07wddyjjddxiv-libpulseaudio-17.0' from 'https://cache.nixos.org'...
copying path '/nix/store/qk1d0xniardydr9rkhnnivz2ccmznw2q-cups-2.4.16-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/1m4n4g1y9q24vi5bhy53k98rbxyfs2f5-tinysparql-3.10.1' from 'https://cache.nixos.org'...
copying path '/nix/store/7qzvqi0niqsgnxbc8w8pbfm0qqhfm14n-flite-2.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/i5ya73idqgmxpki1h0cq4j13jx9vl4kn-fluidsynth-2.5.3' from 'https://cache.nixos.org'...
copying path '/nix/store/2vfrbgr72f60dc66mf6bpyxmhglkgaby-libao-1.2.2' from 'https://cache.nixos.org'...
copying path '/nix/store/lpc21304lsg3mwr4bz84d2fnr947mmhz-mpg123-1.33.4' from 'https://cache.nixos.org'...
copying path '/nix/store/kdfxyngq84c0rbqd40jhgv5j4dmwv6l0-sox-unstable-2021-05-09-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/vz6zpxygfjy3vsjxs3ly32c5ynn10f2b-ungoogled-chromium-unwrapped-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/ca9p0l36x7zw9742ak8vy70phmsng1ns-cups-2.4.16' from 'https://cache.nixos.org'...
copying path '/nix/store/hh5xqz1aj82wp3p7ncr0ipjwl6ylb28v-libopenmpt-0.8.4' from 'https://cache.nixos.org'...
copying path '/nix/store/ihbk8s7b58dd63z7x573zcp38hcvxfh2-perl5.42.0-X11-Protocol-0.56' from 'https://cache.nixos.org'...
copying path '/nix/store/p41sp77l8hv57iklz8gazdvr34bjvhd9-perl5.42.0-File-MimeInfo-0.33' from 'https://cache.nixos.org'...
copying path '/nix/store/xq5xj979jbifdbnck57nci15xjmx08ny-perl5.42.0-libwww-perl-6.72' from 'https://cache.nixos.org'...
copying path '/nix/store/yl5yl395iqx88kd1m7lx7p7b65n0jfx9-gtk+3-3.24.51' from 'https://cache.nixos.org'...
copying path '/nix/store/z5p8cy7zsrz85hcf5i0pggx2gg5rcgg3-roc-toolkit-0.4.0' from 'https://cache.nixos.org'...
copying path '/nix/store/z01j5ypjq5lsl2xhbiw9yf2w0p16ygwk-perl5.42.0-XML-Parser-2.46' from 'https://cache.nixos.org'...
copying path '/nix/store/m5c6wbkiqh753s3v6wnk9l0ad7sl9y1y-ffmpeg-headless-8.0.1-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/bbv0vprkcppy60mbpaqrxmid6xl6fqlv-perl5.42.0-XML-Twig-3.52' from 'https://cache.nixos.org'...
copying path '/nix/store/6296bwxad0yr896x9vqxjzy6s3yyjy7z-perl5.42.0-Net-DBus-1.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/l6lwzgj70lwmhf1nkdbrcli7sn530lpg-xdg-utils-1.2.1' from 'https://cache.nixos.org'...
copying path '/nix/store/lccknd7yjw6bbnnmvz0vq5vra4w4z4dz-chromaprint-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/s8w14kgj50iqw1w0jdwn9s1m0k4plzgs-gstreamer-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/zyh3vyl2k8j9x1wbw02zk1glp5d5i963-gst-plugins-base-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/0pikx4f2448sc0cgikw9yvfxq6grxdpq-libnice-0.1.22' from 'https://cache.nixos.org'...
copying path '/nix/store/2q0snh31cxlr09nsb1qp2yna2ql29k4p-libcanberra-0.30' from 'https://cache.nixos.org'...
copying path '/nix/store/f3nqnwrza03hf9l4vndjg3r4lbknf4n4-libcamera-0.7.0' from 'https://cache.nixos.org'...
copying path '/nix/store/nn129jwsznqv7k888wb05m5whpyndqrf-pipewire-1.6.2' from 'https://cache.nixos.org'...
copying path '/nix/store/l5ax073f4k5f6mbnl9fdpfiwldyxli7a-clippy-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/157hw9f81x6523chpb4fis99b3x2zq27-rust-analyzer-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/9993qmj4n54mz6mnmzzc72px36mirqa5-rustfmt-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/ahfz4q9z487796nf71bmgsdl3703ksj7-openal-soft-1.24.3' from 'https://cache.nixos.org'...
copying path '/nix/store/hb2bs5fg5wkm04x565737qd5nh2hy5nk-gcc-wrapper-15.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/gvq9hvvnmkvrk27mba0jjjppj068z55x-stdenv-linux' from 'https://cache.nixos.org'...
copying path '/nix/store/v5qy1399hlrnk8z6mhlzg5jz08rw3l0j-gst-plugins-bad-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/8l7m6nswqrmfx6bxblsci8sgmgwrh5w6-rust-default-1.94.1' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/hjp25ksf3axb4czp7sllvzl1bkpfwsyg-gtk4-4.20.3' from 'https://cache.nixos.org'...
copying path '/nix/store/hal3i0mcgsrkpharzpdjz6m10hxnxnvr-clang-21.1.8-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/b25d7klxqlzl5scnq1lygjk88fg8j8fi-logout-deps-0.4.3' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/5n58fciczf6bld98mzpgawkvs7jzwbqy-wasm-bindgen-cli-0.2.117' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/3rvfqwn4g23599vpl66lk533d9y3db8w-ungoogled-chromium-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/i1k0ay79xdxmn9qvnyfqmvk3ih0ch2d3-google-chrome' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/jh6qssswq7assbhby478d8gli8ksnf2p-maestro-2.3.0' from 'https://cache.nixos.org'...
copying path '/nix/store/zb8py6p8qq01nygnnf8jrnkps9nna189-clang-21.1.8' from 'https://cache.nixos.org'...
copying path '/nix/store/hh6y3s72d21whp6q98h4dh0valxiaw69-clang-wrapper-21.1.8' from 'https://cache.nixos.org'...
building '/nix/store/vs3s5dn85lcwf20hcks7bj3jgcc364cx-logout-server-0.4.3.drv'...
building '/nix/store/rk0cyjgc6n84rr411n6xddyw39wq2fbk-logout-web-e2e-test-0.4.3.drv'...
2026-04-06T19:56:02.698042Z  WARN dioxus_server::config: No index.html found in public directory, using default index.html
Anonymous analytics enabled. To opt out, set MAESTRO_CLI_NO_ANALYTICS environment variable to any value before running Maestro.


Web support is in Beta. We would appreciate your feedback!


Waiting for flows to complete...
[Passed] 03_navigate_to_credits (4s)
[Passed] 06_navigate_to_exercise_list (3s)
[Passed] 04_clean_state_credits (3s)
[Failed] 11_edit_cloned_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 07_clean_state_exercise_list (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 20_be_astonished_by_progress (19s) (Assertion is false: "Today" is visible)
[Failed] 01_start (18s) (Assertion is false: "No past sessions yet" is visible)
[Failed] 16_cancel_empty_session (18s) (Assertion is false: "No past sessions yet" is visible)
[Passed] 05_change_exercises_database (15s)
[Failed] 17_repeat_session (19s) (Assertion is false: "Today" is visible)
[Failed] 18_delete_past_session (19s) (Assertion is false: "Today" is visible)
[Passed] 12_navigate_to_analytics (3s)
[Failed] 02_allow_notifications (18s) (Assertion is false: "⚠️ Tap here to enable notifications" is visible)
[Failed] 09_learn_about_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Passed] 13_clean_state_analytics (3s)
[Passed] 14_navigate_back_to_home (4s)
[Failed] 08_search_exercises (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 10_add_custom_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 19_lookup_past_exercise (19s) (Assertion is false: "Today" is visible)
[Failed] 15_full_workout_session (20s) (Assertion is false: "⏱️ Active Session" is visible)

13/20 Flows Failed

📸 Screenshots

  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (2)
src/services/notifications.rs (2)

88-95: ⚠️ Potential issue | 🔴 Critical

Missing null-pointer guard before unsafe JNI conversions.

open_notification_settings() calls JavaVM::from_raw and JObject::from_raw without first checking if ctx.vm() or ctx.context() is null. This causes undefined behaviour if the Android context is unavailable, unlike check_android_notification_permission() which has proper guards at lines 42-44.

Proposed fix
     let result = (|| -> Result<(), String> {
         let ctx = android_context();
+        if ctx.vm().is_null() || ctx.context().is_null() {
+            return Err("Android context not available".into());
+        }
         let vm = unsafe { JavaVM::from_raw(ctx.vm().cast()) }
             .map_err(|e| format!("JavaVM::from_raw: {e}"))?;
         let mut env = vm
             .attach_current_thread()
             .map_err(|e| format!("attach_current_thread: {e}"))?;
         let activity = unsafe { JObject::from_raw(ctx.context() as jni::sys::jobject) };
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/services/notifications.rs` around lines 88 - 95, The code in the closure
used by open_notification_settings() unsafely calls JavaVM::from_raw and
JObject::from_raw without null checks on ctx.vm() and ctx.context(); add guards
like those in check_android_notification_permission() to verify ctx.vm() and
ctx.context() are non-null and return an Err (with a clear message) if either is
null before performing the unsafe conversions (references: android_context(),
JavaVM::from_raw, JObject::from_raw, and attach_current_thread()).

84-139: 🧹 Nitpick | 🔵 Trivial

Consider returning Result to allow caller to handle failures.

The function only logs on error (line 137), but the caller in src/main.rs (line 579-581) hides the permission toast before invoking this. If launching Settings fails, users lose both the prompt and the recovery action with no indication of failure.

Returning Result<(), String> would let the UI keep the toast visible or show a fallback message.

Proposed refactor
 /// Opens the system notification settings for the application.
 #[cfg(target_os = "android")]
-pub fn open_notification_settings() {
+pub fn open_notification_settings() -> Result<(), String> {
     use jni::{objects::JObject, JavaVM};
     use ndk_context::android_context;

-    let result = (|| -> Result<(), String> {
+    (|| -> Result<(), String> {
         let ctx = android_context();
+        if ctx.vm().is_null() || ctx.context().is_null() {
+            return Err("Android context not available".into());
+        }
         // ... rest of implementation unchanged ...
         Ok(())
-    })();
-
-    if let Err(e) = result {
-        log::error!("Failed to open Android notification settings: {e}");
-    }
+    })()
 }

Then update the caller in src/main.rs to handle the result appropriately.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/services/notifications.rs` around lines 84 - 139,
open_notification_settings currently swallows errors and only logs them; change
its signature from fn open_notification_settings() to pub fn
open_notification_settings() -> Result<(), String> and move the inner closure's
Result up to return Err(...) on failure instead of logging; remove the final
if-let Err logging and let the caller decide. Update the caller site that
invokes open_notification_settings (where the permission toast is hidden) to
handle the Result: on Ok() proceed as before, on Err(e) keep the toast visible
or show a fallback UI/error message and log the error. Ensure unique symbols:
modify the function open_notification_settings to return Result<(), String> and
adjust the invocation of open_notification_settings in the caller to match.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@Dioxus.toml`:
- Around line 38-39: The Dioxus.toml declares an unused permission entry "photos
= { access = \"read\", description = \"Custom exercises images\" }" which
triggers unnecessary photo library prompts; remove that "photos" permission
declaration from Dioxus.toml so the app no longer requests photo access (leave
other permission entries intact) since image handling uses std::fs::copy and
HTML file inputs instead.

---

Duplicate comments:
In `@src/services/notifications.rs`:
- Around line 88-95: The code in the closure used by
open_notification_settings() unsafely calls JavaVM::from_raw and
JObject::from_raw without null checks on ctx.vm() and ctx.context(); add guards
like those in check_android_notification_permission() to verify ctx.vm() and
ctx.context() are non-null and return an Err (with a clear message) if either is
null before performing the unsafe conversions (references: android_context(),
JavaVM::from_raw, JObject::from_raw, and attach_current_thread()).
- Around line 84-139: open_notification_settings currently swallows errors and
only logs them; change its signature from fn open_notification_settings() to pub
fn open_notification_settings() -> Result<(), String> and move the inner
closure's Result up to return Err(...) on failure instead of logging; remove the
final if-let Err logging and let the caller decide. Update the caller site that
invokes open_notification_settings (where the permission toast is hidden) to
handle the Result: on Ok() proceed as before, on Err(e) keep the toast visible
or show a fallback UI/error message and log the error. Ensure unique symbols:
modify the function open_notification_settings to return Result<(), String> and
adjust the invocation of open_notification_settings in the caller to match.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: aedf0561-bccd-4fda-8e38-417ef0d9e0ee

📥 Commits

Reviewing files that changed from the base of the PR and between 0d5c866 and 4817dac.

📒 Files selected for processing (3)
  • Dioxus.toml
  • src/services/exercise_db.rs
  • src/services/notifications.rs

@gfauredev gfauredev merged commit b465eaf into main Apr 6, 2026
4 of 5 checks passed
@gfauredev gfauredev deleted the fix/android-various-issues branch April 6, 2026 22:33
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

📊 Coverage Report

Lines: 3754/4971 (75.51800442566888%)

⏱️ Tests: 255 tests in 0.602s

FilenameFunction CoverageLine CoverageRegion CoverageBranch Coverage
main.rs
  22.45% (11/49)
  59.16% (155/262)
  60.89% (218/358)
- (0/0)
models/analytics.rs
   0.00% (0/6)
   0.00% (0/34)
   0.00% (0/46)
- (0/0)
models/enums.rs
 100.00% (28/28)
 100.00% (147/147)
 100.00% (337/337)
- (0/0)
models/exercise.rs
  92.00% (46/50)
  92.10% (548/595)
  91.01% (749/823)
- (0/0)
models/log.rs
 100.00% (12/12)
 100.00% (118/118)
 100.00% (144/144)
- (0/0)
models/mod.rs
 100.00% (11/11)
 100.00% (68/68)
 100.00% (98/98)
- (0/0)
models/session.rs
  72.22% (13/18)
  84.36% (151/179)
  83.33% (210/252)
- (0/0)
models/units.rs
 100.00% (28/28)
 100.00% (167/167)
  98.88% (353/357)
- (0/0)
services/app_state.rs
   1.89% (1/53)
   2.54% (11/433)
   2.32% (15/646)
- (0/0)
services/exercise_db.rs
  88.81% (127/143)
  90.30% (1210/1340)
  89.61% (1924/2147)
- (0/0)
services/exercise_loader.rs
   0.00% (0/14)
   0.00% (0/100)
   0.00% (0/135)
- (0/0)
services/native_queue.rs
   0.00% (0/15)
   0.00% (0/145)
   0.00% (0/197)
- (0/0)
services/notifications.rs
   0.00% (0/3)
   0.00% (0/9)
   0.00% (0/10)
- (0/0)
services/service_worker.rs
 100.00% (2/2)
 100.00% (6/6)
 100.00% (6/6)
- (0/0)
services/storage.rs
  63.77% (88/138)
  80.97% (766/946)
  83.53% (1187/1421)
- (0/0)
services/wake_lock.rs
 100.00% (2/2)
 100.00% (5/5)
 100.00% (5/5)
- (0/0)
utils.rs
  92.00% (69/75)
  96.40% (402/417)
  96.97% (640/660)
- (0/0)
Totals
  67.70% (438/647)
  75.52% (3754/4971)
  77.02% (5886/7642)
- (0/0)

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

❌ Maestro Web E2E Failures

📜 Maestro Console Output (Last 100 lines)
copying path '/nix/store/iqxriv7vl5xzsk86rjy7v72f3dgpaxb5-lilv-0.26.2' from 'https://cache.nixos.org'...
copying path '/nix/store/0w9wqd9awzhg2vm7j43mjz5i83ss81ij-wildmidi-0.4.6' from 'https://cache.nixos.org'...
copying path '/nix/store/kn9lwgvdaa94nl9nsxx5p198gry21n03-librsvg-2.61.4' from 'https://cache.nixos.org'...
copying path '/nix/store/q3xfaw0xw291byfii8784q43xvs3bd36-libsoup-3.6.6' from 'https://cache.nixos.org'...
copying path '/nix/store/3nk9r14756spfafgji1prgxf9qhixxf6-nss-3.112.3' from 'https://cache.nixos.org'...
copying path '/nix/store/pzdalg368npikvpq4ncz2saxnz19v53k-python3-3.13.12' from 'https://cache.nixos.org'...
copying path '/nix/store/g6mlwdvpg92rchq352ll7jbi0pz7h43r-xz-5.8.2-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/ik8a7b32nqv2q5p4g86hmp65jklmrp3g-systemd-259.3' from 'https://cache.nixos.org'...
copying path '/nix/store/4yb9bqdx98ycqajvkk13dmx9nz9ya80x-gssdp-1.6.4' from 'https://cache.nixos.org'...
copying path '/nix/store/8cc8cdqa54bahfi5n5glkm8d252zkkjn-zstd-1.5.7-bin' from 'https://cache.nixos.org'...
copying path '/nix/store/xv2cv8hv0blhlkqhcp4psblcqci9qfx6-chromedriver-unwrapped-146.0.7680.177' from 'https://cache.nixos.org'...
copying path '/nix/store/am1qqydxk0qnn66dfwa9k6dyrqhghkfi-zxing-cpp-2.3.0' from 'https://cache.nixos.org'...
copying path '/nix/store/s2grcjv8pklvkajk3mkh75aja5dppx6z-stdenv-linux' from 'https://cache.nixos.org'...
copying path '/nix/store/axzfvd6f655hnp92c3fv0n571avg1yb6-gupnp-1.6.9' from 'https://cache.nixos.org'...
copying path '/nix/store/q4v09bffjy5i0f2kdwnbbwmhqv6i3pjs-zstd-1.5.7-dev' from 'https://cache.nixos.org'...
copying path '/nix/store/mx745sg11i2na27igmmgnlf450h9dl65-dbus-1.16.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/67yaxggsvwhd5x7ffqj8bcq3hvs136ph-gupnp-igd-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/8nqw35icyjsvqk32n0i6132vk3l1x1qg-at-spi2-core-2.58.3' from 'https://cache.nixos.org'...
copying path '/nix/store/51z2kgz91wjy629fs3hcph0iajvm7s1w-avahi-0.8' from 'https://cache.nixos.org'...
copying path '/nix/store/5gln2rkcjx93cr5x0rr3wqrxjdmshd2f-dbus-1.16.2' from 'https://cache.nixos.org'...
copying path '/nix/store/h62im4mqizh3smv2n532jncaz47819w4-bluez-5.84' from 'https://cache.nixos.org'...
copying path '/nix/store/asmzi65xzpjdnjvlyn39xlarp2x6cpj3-libjack2-1.9.22' from 'https://cache.nixos.org'...
copying path '/nix/store/8qs5mhyg6abqy924s1g07wddyjjddxiv-libpulseaudio-17.0' from 'https://cache.nixos.org'...
copying path '/nix/store/p41sp77l8hv57iklz8gazdvr34bjvhd9-perl5.42.0-File-MimeInfo-0.33' from 'https://cache.nixos.org'...
copying path '/nix/store/ihbk8s7b58dd63z7x573zcp38hcvxfh2-perl5.42.0-X11-Protocol-0.56' from 'https://cache.nixos.org'...
copying path '/nix/store/qk1d0xniardydr9rkhnnivz2ccmznw2q-cups-2.4.16-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/xq5xj979jbifdbnck57nci15xjmx08ny-perl5.42.0-libwww-perl-6.72' from 'https://cache.nixos.org'...
copying path '/nix/store/1m4n4g1y9q24vi5bhy53k98rbxyfs2f5-tinysparql-3.10.1' from 'https://cache.nixos.org'...
copying path '/nix/store/7qzvqi0niqsgnxbc8w8pbfm0qqhfm14n-flite-2.2-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/i5ya73idqgmxpki1h0cq4j13jx9vl4kn-fluidsynth-2.5.3' from 'https://cache.nixos.org'...
copying path '/nix/store/2vfrbgr72f60dc66mf6bpyxmhglkgaby-libao-1.2.2' from 'https://cache.nixos.org'...
copying path '/nix/store/lpc21304lsg3mwr4bz84d2fnr947mmhz-mpg123-1.33.4' from 'https://cache.nixos.org'...
copying path '/nix/store/z01j5ypjq5lsl2xhbiw9yf2w0p16ygwk-perl5.42.0-XML-Parser-2.46' from 'https://cache.nixos.org'...
copying path '/nix/store/vz6zpxygfjy3vsjxs3ly32c5ynn10f2b-ungoogled-chromium-unwrapped-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/ca9p0l36x7zw9742ak8vy70phmsng1ns-cups-2.4.16' from 'https://cache.nixos.org'...
copying path '/nix/store/kdfxyngq84c0rbqd40jhgv5j4dmwv6l0-sox-unstable-2021-05-09-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/bbv0vprkcppy60mbpaqrxmid6xl6fqlv-perl5.42.0-XML-Twig-3.52' from 'https://cache.nixos.org'...
copying path '/nix/store/hh5xqz1aj82wp3p7ncr0ipjwl6ylb28v-libopenmpt-0.8.4' from 'https://cache.nixos.org'...
copying path '/nix/store/yl5yl395iqx88kd1m7lx7p7b65n0jfx9-gtk+3-3.24.51' from 'https://cache.nixos.org'...
copying path '/nix/store/z5p8cy7zsrz85hcf5i0pggx2gg5rcgg3-roc-toolkit-0.4.0' from 'https://cache.nixos.org'...
copying path '/nix/store/6296bwxad0yr896x9vqxjzy6s3yyjy7z-perl5.42.0-Net-DBus-1.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/m5c6wbkiqh753s3v6wnk9l0ad7sl9y1y-ffmpeg-headless-8.0.1-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/l6lwzgj70lwmhf1nkdbrcli7sn530lpg-xdg-utils-1.2.1' from 'https://cache.nixos.org'...
copying path '/nix/store/lccknd7yjw6bbnnmvz0vq5vra4w4z4dz-chromaprint-1.6.0' from 'https://cache.nixos.org'...
copying path '/nix/store/s8w14kgj50iqw1w0jdwn9s1m0k4plzgs-gstreamer-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/zyh3vyl2k8j9x1wbw02zk1glp5d5i963-gst-plugins-base-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/2q0snh31cxlr09nsb1qp2yna2ql29k4p-libcanberra-0.30' from 'https://cache.nixos.org'...
copying path '/nix/store/0pikx4f2448sc0cgikw9yvfxq6grxdpq-libnice-0.1.22' from 'https://cache.nixos.org'...
copying path '/nix/store/f3nqnwrza03hf9l4vndjg3r4lbknf4n4-libcamera-0.7.0' from 'https://cache.nixos.org'...
copying path '/nix/store/nn129jwsznqv7k888wb05m5whpyndqrf-pipewire-1.6.2' from 'https://cache.nixos.org'...
copying path '/nix/store/ahfz4q9z487796nf71bmgsdl3703ksj7-openal-soft-1.24.3' from 'https://cache.nixos.org'...
copying path '/nix/store/v5qy1399hlrnk8z6mhlzg5jz08rw3l0j-gst-plugins-bad-1.26.5' from 'https://cache.nixos.org'...
copying path '/nix/store/hb2bs5fg5wkm04x565737qd5nh2hy5nk-gcc-wrapper-15.2.0' from 'https://cache.nixos.org'...
copying path '/nix/store/hjp25ksf3axb4czp7sllvzl1bkpfwsyg-gtk4-4.20.3' from 'https://cache.nixos.org'...
copying path '/nix/store/gvq9hvvnmkvrk27mba0jjjppj068z55x-stdenv-linux' from 'https://cache.nixos.org'...
copying path '/nix/store/l5ax073f4k5f6mbnl9fdpfiwldyxli7a-clippy-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/157hw9f81x6523chpb4fis99b3x2zq27-rust-analyzer-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/9993qmj4n54mz6mnmzzc72px36mirqa5-rustfmt-preview-1.94.1-x86_64-unknown-linux-gnu' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/8l7m6nswqrmfx6bxblsci8sgmgwrh5w6-rust-default-1.94.1' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/hal3i0mcgsrkpharzpdjz6m10hxnxnvr-clang-21.1.8-lib' from 'https://cache.nixos.org'...
copying path '/nix/store/b25d7klxqlzl5scnq1lygjk88fg8j8fi-logout-deps-0.4.3' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/5n58fciczf6bld98mzpgawkvs7jzwbqy-wasm-bindgen-cli-0.2.117' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/3rvfqwn4g23599vpl66lk533d9y3db8w-ungoogled-chromium-146.0.7680.164' from 'https://cache.nixos.org'...
copying path '/nix/store/i1k0ay79xdxmn9qvnyfqmvk3ih0ch2d3-google-chrome' from 'https://gfauredev.cachix.org'...
copying path '/nix/store/jh6qssswq7assbhby478d8gli8ksnf2p-maestro-2.3.0' from 'https://cache.nixos.org'...
copying path '/nix/store/zb8py6p8qq01nygnnf8jrnkps9nna189-clang-21.1.8' from 'https://cache.nixos.org'...
copying path '/nix/store/hh6y3s72d21whp6q98h4dh0valxiaw69-clang-wrapper-21.1.8' from 'https://cache.nixos.org'...
building '/nix/store/8hq2q314r7m3malq4dz5pc43ycfq04k8-logout-server-0.4.3.drv'...
building '/nix/store/v2xln18ypg62ijkwrv98pcqg0hl8sc5p-logout-web-e2e-test-0.4.3.drv'...
2026-04-06T22:39:56.288228Z  WARN dioxus_server::config: No index.html found in public directory, using default index.html
Anonymous analytics enabled. To opt out, set MAESTRO_CLI_NO_ANALYTICS environment variable to any value before running Maestro.


Web support is in Beta. We would appreciate your feedback!


Waiting for flows to complete...
[Passed] 03_navigate_to_credits (4s)
[Passed] 06_navigate_to_exercise_list (3s)
[Passed] 04_clean_state_credits (3s)
[Failed] 11_edit_cloned_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 07_clean_state_exercise_list (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 20_be_astonished_by_progress (19s) (Assertion is false: "Today" is visible)
[Failed] 01_start (18s) (Assertion is false: "No past sessions yet" is visible)
[Failed] 16_cancel_empty_session (18s) (Assertion is false: "No past sessions yet" is visible)
[Passed] 05_change_exercises_database (15s)
[Failed] 17_repeat_session (19s) (Assertion is false: "Today" is visible)
[Failed] 18_delete_past_session (19s) (Assertion is false: "Today" is visible)
[Passed] 12_navigate_to_analytics (3s)
[Failed] 02_allow_notifications (18s) (Assertion is false: "⚠️ Tap here to enable notifications" is visible)
[Failed] 09_learn_about_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Passed] 13_clean_state_analytics (3s)
[Passed] 14_navigate_back_to_home (4s)
[Failed] 08_search_exercises (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 10_add_custom_exercise (20s) (Assertion is false: "Ring Dip" is visible)
[Failed] 19_lookup_past_exercise (19s) (Assertion is false: "Today" is visible)
[Failed] 15_full_workout_session (20s) (Assertion is false: "⏱️ Active Session" is visible)

13/20 Flows Failed

📸 Screenshots

  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot
  • Screenshot

@coderabbitai coderabbitai bot mentioned this pull request Apr 9, 2026
9 tasks
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