Skip to content

refactor(app): Phase 6 — tray adapter skeleton (Open / Quit) (#1409)#1421

Closed
shm11C3 wants to merge 1 commit into
developfrom
refactor/1409-phase-6-tray-adapter
Closed

refactor(app): Phase 6 — tray adapter skeleton (Open / Quit) (#1409)#1421
shm11C3 wants to merge 1 commit into
developfrom
refactor/1409-phase-6-tray-adapter

Conversation

@shm11C3

@shm11C3 shm11C3 commented Apr 30, 2026

Copy link
Copy Markdown
Owner

Closes #1409. Part of #1402 (Epic).

Summary

  • Add src-tauri/src/adapters/tray.rs with a minimal TrayAdapter (Open / Quit menu, left-click-restore).
  • Setup is gated behind lifecycle::should_close_to_background (HARDVIZ_CLOSE_TO_BACKGROUND=1), so user-visible behavior stays the same as Phase 5.
  • Tray icon failure (e.g. some Linux desktops) is logged; the app continues without a tray and Quit via the in-process command path keeps working.
  • Enable the tray-icon feature on tauri = "2.10.3".

User-visible behavior

Unchanged in default release builds. With HARDVIZ_CLOSE_TO_BACKGROUND=1:

  • Closing the window leaves the tray icon visible.
  • Tray menu Open (or left-click on Windows / macOS) restores the main window with state intact.
  • Tray menu Quit exits cleanly via Phase 5's lifecycle::request_quit (state machine → Stopped, archive flushed, app.exit(0)).

Path note

The #1409 issue body says src-tauri/src/app/adapters/tray.rs, but #1402's 2026-04-30 changelog supersedes it ("app::adaptersadapters"). Following the parent epic — src-tauri/src/adapters/tray.rs, next to the existing window.rs. Same path-resolution as Phase 5.

Visibility gate

Per discussion, the tray is gated by HARDVIZ_CLOSE_TO_BACKGROUND rather than always-on:

Layout

  • src-tauri/src/adapters/tray.rsTrayAdapter::setup(app) builds the menu, wires on_menu_event and on_tray_icon_event, and returns a struct that owns the TrayIcon handle.
  • src-tauri/src/workers/mod.rsWorkersState gains tray: Mutex<Option<TrayAdapter>> so the icon survives setup-closure scope.
  • src-tauri/src/lib.rs — registers the tray in setup when should_close_to_background() is true; logs and continues on failure.
  • src-tauri/Cargo.toml — adds tray-icon to the tauri features list.

Platform notes (in code comments)

  • Windows / macOS: left-click restores, right-click opens the menu. show_menu_on_left_click(false) keeps the click event reaching our handler.
  • Linux: AppIndicator-based environments forward all clicks to the menu and don't fire raw click events — left-click-restore may be silently inactive there; the menu still works. Environments without any indicator implementation fail tray registration; we log and continue.

Tests

  • Existing cargo test --workspace --lib --bins passes (140 + 153). No new tests — the tray adapter is mostly Tauri-runtime glue and the menu / tray event handlers are exercised through the tauri::App setup, which lives outside the unit-test boundary. The pure-Rust dispatch (handle_menu_event matches on MENU_OPEN_ID / MENU_QUIT_ID) is small enough to verify by inspection.
  • No new Tauri commands → src/rspc/bindings.ts unchanged.

Out of scope (per #1409)

Test plan

  • cargo tauri-fmt -- --check
  • cargo tauri-lint
  • cargo test --workspace --lib --bins -- --test-threads=1 (the adl_diagnostic example failure is pre-existing on develop)
  • npm run lint
  • npm run test
  • Manual (Windows): launch with HARDVIZ_CLOSE_TO_BACKGROUND=1, close the window, confirm the tray icon stays visible. Click Open and left-click the icon — both restore the window. Click Quit — the app exits with a final archive row written.
  • Manual (macOS): same as Windows, plus verify show_menu_on_left_click(false) actually reaches the click handler.
  • Manual (Linux): document which DE was tested. Note any AppIndicator quirks observed.
  • Manual: launch without the env var — confirm no tray is registered and close-to-quit still works.

Summary by CodeRabbit

  • New Features
    • System tray icon integration enabling the app to minimize to system tray (when configured)
    • Left-click tray icon to restore and bring the application window to focus
    • Context menu with "Open" and "Quit" options for easy app management from the tray

…only)

Closes #1409.

Add `src-tauri/src/adapters/tray.rs` so users have a way back to the
window once the close-to-background path is active. Phase 6 ships
only the bare entry-point: `Open` and `Quit` menu items plus a
left-click that restores the main window. Live metric rendering
belongs to #1401, and the Pause / Resume entry belongs to #1275.

Setup is gated behind `lifecycle::should_close_to_background` (the
`HARDVIZ_CLOSE_TO_BACKGROUND=1` env var introduced in Phase 5), so
the user-visible behavior stays unchanged from Phase 5: in default
release builds, no tray is registered. The persisted setting that
flips the close behavior — and the always-on tray that follows from
it — ships with #1275.

Layout
- `src-tauri/src/adapters/tray.rs` — `TrayAdapter::setup(app)` builds
  a two-item `tauri::menu::Menu`, attaches it to `TrayIconBuilder`,
  and wires `on_menu_event` / `on_tray_icon_event`. The handle is
  held in the adapter so dropping the value removes the icon.
- `src-tauri/src/workers/mod.rs` — `WorkersState` gains a
  `tray: Mutex<Option<TrayAdapter>>` slot keeping the icon alive for
  the process lifetime.
- `src-tauri/src/lib.rs` — registers the tray inside `setup` only
  when `should_close_to_background` is true; failures are logged and
  the app continues without a tray (the `Quit` command path is still
  reachable).
- `src-tauri/Cargo.toml` — enable the `tray-icon` feature on
  `tauri = "2.10.3"`.

Path note: the #1409 issue body says
`src-tauri/src/app/adapters/tray.rs`, but per the parent epic
(#1402, 2026-04-30 changelog) the App `app::adapters` namespace was
dropped — adapters live directly under `src-tauri/src/adapters/`,
next to the existing `window.rs`. Same path-resolution as Phase 5.

Platform notes
- Windows / macOS: left-click restores; right-click opens the menu.
  `show_menu_on_left_click(false)` overrides the macOS default of
  popping the menu on left-click so the click event reaches our
  handler.
- Linux: tray support depends on the desktop environment.
  AppIndicator-based environments (GNOME with the AppIndicator
  extension, KDE) typically forward all clicks to the menu and
  never raise a raw click event, so the left-click-restores path
  may be silently inactive — `Open` through the menu still works.
  Environments without an indicator implementation may fail to
  register the tray at all; the setup error is logged and the app
  continues without a tray rather than aborting.

Out of scope (per #1409): live metric values in the tray (#1401),
Pause / Resume entries (#1275), custom icons / theming.
Copilot AI review requested due to automatic review settings April 30, 2026 03:58
@coderabbitai

coderabbitai Bot commented Apr 30, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This pull request introduces tray icon functionality to the Tauri application. A new TrayAdapter is added to the adapters module with setup logic that creates a system tray icon featuring "Open" and "Quit" menu items. The tray is integrated into the app's startup lifecycle, gated behind the close-to-background policy, and stored in shared worker state for process-lifetime retention.

Changes

Cohort / File(s) Summary
Dependency Configuration
src-tauri/Cargo.toml
Tauri dependency updated to enable the tray-icon feature.
Tray Adapter Implementation
src-tauri/src/adapters/mod.rs, src-tauri/src/adapters/tray.rs
New TrayAdapter struct and module introduced. Setup builds a tray icon with default window icon and creates a menu with "Open" (restores main window) and "Quit" (triggers app shutdown) items. Left-click on tray icon also triggers window restore. Individual action failures are logged.
App Integration
src-tauri/src/lib.rs, src-tauri/src/workers/mod.rs
Tray initialization integrated into Tauri setup phase when close-to-background policy is active. TrayAdapter instance stored in WorkersState via new tray: Mutex<Option<TrayAdapter>> field. Setup failures emit warning but do not block startup.

Sequence Diagram

sequenceDiagram
    participant User
    participant Tray as System Tray
    participant TrayAdapter
    participant Window as Window Manager
    participant Lifecycle

    User->>Tray: Left-click tray icon
    Tray->>TrayAdapter: Emit "Up" event
    TrayAdapter->>Window: Locate "main" window
    TrayAdapter->>Window: Show & focus window

    User->>Tray: Click "Open" menu item
    Tray->>TrayAdapter: Menu event ("Open")
    TrayAdapter->>Window: Locate "main" window
    TrayAdapter->>Window: Show & focus window

    User->>Tray: Click "Quit" menu item
    Tray->>TrayAdapter: Menu event ("Quit")
    TrayAdapter->>Lifecycle: Spawn request_quit task
    Lifecycle->>Lifecycle: Trigger app shutdown
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

Possibly related PRs

Suggested labels

rust, frontend

Poem

🐇 A tray appears where close once dwelled,
With Open's call, the window's spelled,
Left-click, menu—ways to restore,
Quit ends the dance, exits the door! 🎪

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title directly reflects the main change: adding a minimal tray adapter with Open/Quit functionality as Phase 6 of the epic work.
Description check ✅ Passed The description covers all template sections: Summary, Related Issues, Type of Change, Test Plan with completed checklist items, and detailed implementation notes.
Linked Issues check ✅ Passed All coding requirements from #1409 are met: tray adapter with Open/Quit menu [#1409], left-click restore [#1409], platform support [#1409], graceful fallback [#1409], and gating by lifecycle flag [#1409].
Out of Scope Changes check ✅ Passed All changes are within scope: tray adapter implementation, WorkersState extension, setup registration, and feature flag addition align with #1409 objectives. Out-of-scope items (#1401, #1275) are explicitly excluded.
Docstring Coverage ✅ Passed Docstring coverage is 83.33% 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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/1409-phase-6-tray-adapter

Review rate limit: 4/5 reviews remaining, refill in 12 minutes.

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

@github-actions github-actions Bot added rust Pull requests that update Rust code configuration labels Apr 30, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src-tauri/src/workers/mod.rs (1)

29-39: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

terminate_all should also clear tray state.

WorkersState now owns tray (Line 17), but terminate_all does not take() it. If a shutdown path doesn’t immediately end the process, the tray handle can outlive worker teardown and keep the icon around unexpectedly.

Suggested patch
   pub async fn terminate_all(&self) {
@@
     let monitor = self.monitor.lock().unwrap().take();
     let window_adapter = self.window_adapter.lock().unwrap().take();
     let hw_archive = self.hw_archive.lock().unwrap().take();
+    let tray = self.tray.lock().unwrap().take();
@@
     if let Some(hw_archive) = hw_archive {
       hw_archive.terminate().await;
     }
+
+    // Drop the tray handle as part of teardown.
+    drop(tray);
   }
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src-tauri/src/workers/mod.rs` around lines 29 - 39, terminate_all currently
drops monitor, window_adapter and hw_archive but neglects to take and clear the
tray field on WorkersState, allowing the tray handle to outlive teardown; update
terminate_all to also lock and call take() on self.tray (similar to
monitor/window_adapter/hw_archive) so the tray handle is removed/dropped during
shutdown, using the same locking pattern and ensuring it happens before
returning from terminate_all.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@src-tauri/src/workers/mod.rs`:
- Around line 29-39: terminate_all currently drops monitor, window_adapter and
hw_archive but neglects to take and clear the tray field on WorkersState,
allowing the tray handle to outlive teardown; update terminate_all to also lock
and call take() on self.tray (similar to monitor/window_adapter/hw_archive) so
the tray handle is removed/dropped during shutdown, using the same locking
pattern and ensuring it happens before returning from terminate_all.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

Run ID: 887cde8e-6f96-48ab-bc6e-81a006651683

📥 Commits

Reviewing files that changed from the base of the PR and between 70cc71e and 02ae710.

📒 Files selected for processing (5)
  • src-tauri/Cargo.toml
  • src-tauri/src/adapters/mod.rs
  • src-tauri/src/adapters/tray.rs
  • src-tauri/src/lib.rs
  • src-tauri/src/workers/mod.rs

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds an App-layer system tray adapter skeleton (Phase 6 of the Core/App split epic) to support “Open” / “Quit” tray interactions when the close-to-background lifecycle path is enabled.

Changes:

  • Introduces TrayAdapter that builds a tray icon + menu (Open/Quit) and handles left-click restore + async quit.
  • Persists the tray handle in WorkersState so the OS tray icon lifetime matches the process lifetime.
  • Gates tray registration behind lifecycle::should_close_to_background() and enables Tauri’s tray-icon feature.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src-tauri/src/adapters/tray.rs New tray adapter with menu + click handlers and a minimal restore/quit implementation.
src-tauri/src/adapters/mod.rs Exposes the new tray adapter module.
src-tauri/src/workers/mod.rs Stores TrayAdapter in WorkersState to keep the tray icon alive.
src-tauri/src/lib.rs Registers the tray during app setup when close-to-background is active; logs and continues on failure.
src-tauri/Cargo.toml Enables Tauri tray-icon feature.

Comment thread src-tauri/src/lib.rs
Comment on lines +179 to +187
// Linux desktops without an indicator implementation, or
// any other tray failure: log and continue. `Quit` from
// the in-process command path still works, so the user is
// not stranded — just without a visible tray entry point.
log_warn!(
&format!("tray icon setup failed; continuing without tray: {e}"),
"lib::setup",
None::<&str>
);

Copilot AI Apr 30, 2026

Copy link

Choose a reason for hiding this comment

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

If should_close_to_background() is true but tray setup fails, the app will still hide the main window on close (see lifecycle::handle_close_request), leaving no guaranteed way to restore the window because no tray icon exists. Consider treating tray availability as part of the gate (e.g., only hide-on-close when a tray was successfully registered; otherwise fall back to quit-on-close or keep the window visible and log a warning).

Suggested change
// Linux desktops without an indicator implementation, or
// any other tray failure: log and continue. `Quit` from
// the in-process command path still works, so the user is
// not stranded — just without a visible tray entry point.
log_warn!(
&format!("tray icon setup failed; continuing without tray: {e}"),
"lib::setup",
None::<&str>
);
// Close-to-background requires a working tray entry point.
// If tray registration fails, continuing startup would allow
// the main window to be hidden on close with no guaranteed
// way to restore it.
log_warn!(
&format!(
"tray icon setup failed while close-to-background is enabled; aborting startup: {e}"
),
"lib::setup",
None::<&str>
);
return Err(e.into());

Copilot uses AI. Check for mistakes.
Comment on lines +25 to +26
//! when that happens [`TrayAdapter::setup`] logs and returns the
//! error to the caller, who falls back to running without a tray.

Copilot AI Apr 30, 2026

Copy link

Choose a reason for hiding this comment

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

The module-level docs say that when tray registration fails, TrayAdapter::setup “logs and returns the error to the caller”, but setup currently only returns the error; the logging happens in lib.rs. Please update the docs to match the actual behavior (or move the logging into setup if you want that responsibility there).

Suggested change
//! when that happens [`TrayAdapter::setup`] logs and returns the
//! error to the caller, who falls back to running without a tray.
//! when that happens [`TrayAdapter::setup`] returns the error to the
//! caller, who logs it and falls back to running without a tray.

Copilot uses AI. Check for mistakes.
@github-actions

Copy link
Copy Markdown
Contributor

Rust Backend Coverage Report

Coverage Details
Filename                                                   Regions    Missed Regions     Cover   Functions  Missed Functions  Executed       Lines      Missed Lines     Cover    Branches   Missed Branches     Cover
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
core/src/collector/history.rs                                  710               154    78.31%          47                15    68.09%         373                89    76.14%           0                 0         -
core/src/collector/sampling.rs                                 445               178    60.00%          45                20    55.56%         283               117    58.66%           0                 0         -
core/src/collector/system_monitor.rs                            72                72     0.00%           4                 4     0.00%          39                39     0.00%           0                 0         -
core/src/enums/hardware.rs                                      14                14     0.00%           2                 2     0.00%          12                12     0.00%           0                 0         -
core/src/event_bus.rs                                          167                 3    98.20%          19                 1    94.74%         108                 3    97.22%           0                 0         -
core/src/infrastructure/database/db.rs                          28                28     0.00%           4                 4     0.00%          22                22     0.00%           0                 0         -
core/src/infrastructure/database/gpu_archive.rs                 51                51     0.00%           4                 4     0.00%          18                18     0.00%           0                 0         -
core/src/infrastructure/database/hardware_archive.rs            41                41     0.00%           4                 4     0.00%          18                18     0.00%           0                 0         -
core/src/infrastructure/database/process_stats.rs               41                41     0.00%           4                 4     0.00%          27                27     0.00%           0                 0         -
core/src/infrastructure/providers/linux/dmidecode.rs           229                15    93.45%          16                 3    81.25%         319                14    95.61%           0                 0         -
core/src/infrastructure/providers/linux/drm_sys.rs             205               156    23.90%          21                14    33.33%         126                93    26.19%           0                 0         -
core/src/infrastructure/providers/linux/hwmon.rs               119                94    21.01%           8                 6    25.00%          68                56    17.65%           0                 0         -
core/src/infrastructure/providers/linux/kernel.rs              165                22    86.67%          19                 2    89.47%         161                 8    95.03%           0                 0         -
core/src/infrastructure/providers/linux/lspci.rs                83                20    75.90%           8                 2    75.00%          50                11    78.00%           0                 0         -
core/src/infrastructure/providers/linux/net_sys.rs             171               171     0.00%          13                13     0.00%          93                93     0.00%           0                 0         -
core/src/infrastructure/providers/linux/procfs.rs              261                24    90.80%          25                 3    88.00%         222                19    91.44%           0                 0         -
core/src/infrastructure/providers/sysinfo_provider.rs           54                54     0.00%           2                 2     0.00%          45                45     0.00%           0                 0         -
core/src/monitoring/state.rs                                   230                 0   100.00%          28                 0   100.00%         155                 0   100.00%           0                 0         -
core/src/persistence/archive.rs                                897               151    83.17%          61                 8    86.89%         581                89    84.68%           0                 0         -
core/src/persistence/preflight.rs                              297                 5    98.32%          27                 0   100.00%         190                 6    96.84%           0                 0         -
core/src/platform/factory.rs                                    18                18     0.00%           4                 4     0.00%          15                15     0.00%           0                 0         -
core/src/platform/linux/cache.rs                                53                53     0.00%           4                 4     0.00%          38                38     0.00%           0                 0         -
core/src/platform/linux/gpu.rs                                 137               137     0.00%          14                14     0.00%          98                98     0.00%           0                 0         -
core/src/platform/linux/memory.rs                               43                43     0.00%           6                 6     0.00%          41                41     0.00%           0                 0         -
core/src/platform/linux/mod.rs                                  33                33     0.00%          11                11     0.00%          69                69     0.00%           0                 0         -
core/src/platform/linux/network.rs                               4                 4     0.00%           1                 1     0.00%           4                 4     0.00%           0                 0         -
core/src/settings/hardware_archive.rs                           36                 0   100.00%           4                 0   100.00%          26                 0   100.00%           0                 0         -
core/src/settings/mod.rs                                       328                37    88.72%          26                 8    69.23%         168                19    88.69%           0                 0         -
core/src/utils/formatter.rs                                    195                 8    95.90%          16                 0   100.00%         160                12    92.50%           0                 0         -
core/src/utils/ip.rs                                            65                 0   100.00%           5                 0   100.00%          33                 0   100.00%           0                 0         -
core/src/utils/rounding.rs                                      68                 0   100.00%           7                 0   100.00%          41                 0   100.00%           0                 0         -
src-tauri/src/_tests/commands/background_image_test.rs          39                 0   100.00%           6                 0   100.00%          21                 0   100.00%           0                 0         -
src-tauri/src/_tests/commands/settings_test.rs                 219                 0   100.00%          18                 0   100.00%         162                 0   100.00%           0                 0         -
src-tauri/src/adapters/tray.rs                                  91                91     0.00%           7                 7     0.00%          60                60     0.00%           0                 0         -
src-tauri/src/adapters/window.rs                               254                69    72.83%          21                 8    61.90%         195                47    75.90%           0                 0         -
src-tauri/src/app/startup.rs                                   188                87    53.72%          10                 3    70.00%         114                58    49.12%           0                 0         -
src-tauri/src/commands/background_image.rs                      22                 7    68.18%          11                 5    54.55%          19                 7    63.16%           0                 0         -
src-tauri/src/commands/hardware.rs                              62                62     0.00%          20                20     0.00%          68                68     0.00%           0                 0         -
src-tauri/src/commands/settings.rs                             578               578     0.00%         102               102     0.00%         497               497     0.00%           0                 0         -
src-tauri/src/commands/system.rs                                12                12     0.00%           6                 6     0.00%          10                10     0.00%           0                 0         -
src-tauri/src/commands/ui.rs                                    17                17     0.00%           2                 2     0.00%          13                13     0.00%           0                 0         -
src-tauri/src/commands/updater.rs                               97                97     0.00%          15                15     0.00%          66                66     0.00%           0                 0         -
src-tauri/src/enums/error.rs                                   115                10    91.30%           9                 1    88.89%          99                10    89.90%           0                 0         -
src-tauri/src/enums/hardware.rs                                194                 7    96.39%          16                 1    93.75%         120                 6    95.00%           0                 0         -
src-tauri/src/enums/settings.rs                                425                16    96.24%          26                 2    92.31%         289                10    96.54%           0                 0         -
src-tauri/src/infrastructure/database/migration.rs              66                 1    98.48%          10                 0   100.00%          86                 0   100.00%           0                 0         -
src-tauri/src/lib.rs                                           202               202     0.00%           5                 5     0.00%         121               121     0.00%           0                 0         -
src-tauri/src/lifecycle.rs                                      94                45    52.13%          11                 7    36.36%          57                34    40.35%           0                 0         -
src-tauri/src/main.rs                                            3                 3     0.00%           1                 1     0.00%           3                 3     0.00%           0                 0         -
src-tauri/src/models/hardware.rs                               375                83    77.87%          31                12    61.29%         275               100    63.64%           0                 0         -
src-tauri/src/models/hardware_archive.rs                         8                 0   100.00%           2                 0   100.00%          10                 0   100.00%           0                 0         -
src-tauri/src/models/settings.rs                               283                 0   100.00%          16                 0   100.00%         246                 0   100.00%           0                 0         -
src-tauri/src/services/background_image_service.rs             165                96    41.82%          16                10    37.50%          93                59    36.56%           0                 0         -
src-tauri/src/services/gpu_service.rs                           56                56     0.00%          11                11     0.00%          43                43     0.00%           0                 0         -
src-tauri/src/services/hardware_service.rs                      85                85     0.00%           4                 4     0.00%          51                51     0.00%           0                 0         -
src-tauri/src/services/language_service.rs                     101                 0   100.00%          18                 0   100.00%          57                 0   100.00%           0                 0         -
src-tauri/src/services/memory_service.rs                        12                12     0.00%           3                 3     0.00%           7                 7     0.00%           0                 0         -
src-tauri/src/services/motherboard_service.rs                   12                12     0.00%           3                 3     0.00%           7                 7     0.00%           0                 0         -
src-tauri/src/services/network_service.rs                       14                14     0.00%           1                 1     0.00%           8                 8     0.00%           0                 0         -
src-tauri/src/services/settings_service.rs                     321               143    55.45%          31                13    58.06%         269               130    51.67%           0                 0         -
src-tauri/src/services/system_service.rs                        22                22     0.00%           2                 2     0.00%          12                12     0.00%           0                 0         -
src-tauri/src/services/ui_service.rs                            45                45     0.00%           8                 8     0.00%          36                36     0.00%           0                 0         -
src-tauri/src/utils/color.rs                                    66                 1    98.48%           4                 0   100.00%          26                 0   100.00%           0                 0         -
src-tauri/src/utils/file.rs                                    224                 5    97.77%          14                 0   100.00%         144                 4    97.22%           0                 0         -
src-tauri/src/utils/formatter.rs                                55                 0   100.00%           5                 0   100.00%          39                 0   100.00%           0                 0         -
src-tauri/src/utils/logger.rs                                   71                71     0.00%           1                 1     0.00%          38                38     0.00%           0                 0         -
src-tauri/src/utils/tauri.rs                                   138                 0   100.00%          17                 0   100.00%          82                 0   100.00%           0                 0         -
src-tauri/src/workers/mod.rs                                    32                32     0.00%           2                 2     0.00%          20                20     0.00%           0                 0         -
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL                                                        10023              3608    64.00%         944               414    56.14%        7066              2600    63.20%           0                 0         -

@shm11C3

shm11C3 commented Apr 30, 2026

Copy link
Copy Markdown
Owner Author

Closing without merging. The tray adapter has been rescoped out of the #1402 Core/App split Epic and into a standalone feature issue (#1422), which sits as a prerequisite for #1275. Reasoning: the Epic's acceptance criteria require no user-visible regression, and a tray icon — even a minimal one — is user-visible UX, not refactor work. The branch refactor/1409-phase-6-tray-adapter is being discarded; the implementation will be redone under #1422 when #1275 is ready to consume it.

@shm11C3

shm11C3 commented Apr 30, 2026

Copy link
Copy Markdown
Owner Author

Correction: the branch refactor/1409-phase-6-tray-adapter (commit 02ae710) is preserved, not discarded. See #1422 (comment) for what to reuse vs. rework when #1422 is picked up.

@shm11C3 shm11C3 deleted the refactor/1409-phase-6-tray-adapter branch May 5, 2026 03:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

configuration rust Pull requests that update Rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor(app): Phase 6 — add tray adapter skeleton (Open / Quit menu only)

2 participants