aboutsummaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-09-05 15:26:25 +0200
committerChristophe Besson <cbesson@gmail.com>2026-09-05 15:26:25 +0200
commitbd299df3468822e7b545a90bf55ffbc1bac87f58 (patch)
treec2175e3675355148ae3eb1969983d0fa7a337dac /docs
parentc11dd22b593358ef7932deec53c8200f5f14ed8b (diff)
downloadmeshbay-bd299df3468822e7b545a90bf55ffbc1bac87f58.tar.gz
feat(client): system tray on Windows, and a clearer tray icon
The tray's Start/Stop already drove nodeService.status/stop/restart, which had full win32 branches for both startup modes from the Node page work -- so enabling it on Windows is widening two platform gates (the `tray` capability in preload.js, the window:minimize-to-tray handler in main.js), not new logic. Replaced the tray icon: the previous white chevron-in-a-box read as an envelope at tray size. New icon is a small "M" drawn as mesh nodes and edges, echoing the app icon's own motif, in the brand blue instead of plain white so it stays legible on both light and dark taskbars/panels. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Diffstat (limited to 'docs')
-rw-r--r--docs/WINDOWS-PORT.md32
1 files changed, 29 insertions, 3 deletions
diff --git a/docs/WINDOWS-PORT.md b/docs/WINDOWS-PORT.md
index 8fc169b..e33b6f5 100644
--- a/docs/WINDOWS-PORT.md
+++ b/docs/WINDOWS-PORT.md
@@ -295,14 +295,25 @@ same no-admin-by-default reason service mode below needs one prompt.
#### Service mode (one admin confirmation)
-A Scheduled Task via **S4U** (Service For User) logon —
-`schtasks /create ... /sc onstart /ru <user> /rp ""`, no `/it` — not a real
-Windows Service (`pywin32`/NSSM), because a Service runs under
+A Scheduled Task via **S4U** (Service For User) logon — not a real Windows
+Service (`pywin32`/NSSM), because a Service runs under
LocalSystem/NetworkService, accounts with no normal user profile, so
`%LOCALAPPDATA%\meshbay\` would not exist for it. S4U starts at boot with no
sign-in and no stored password, and — the whole reason S4U and not
LocalSystem — loads the signed-in user's own profile, so nothing in
`platform.py` needed to change to support it.
+
+Registered via `Register-ScheduledTask -LogonType S4U` (the `ScheduledTasks`
+PowerShell module), **not** `schtasks /create`: schtasks has no flag naming
+the logon type, only inference from whether `/rp` is present, and both
+readings broke live on a blank-password account (common on a personal PC,
+confirmed 2026-09-05) — `/rp ""` fails schtasks' own credential validation
+under Windows' default blank-password policy, and omitting `/rp` registers
+"Interactive only" instead of S4U, which installs cleanly but never actually
+launches the process, at boot or on demand. `-LogonType S4U` names it
+explicitly. Verified live end-to-end after the fix: install, manual start,
+and unattended boot-time start (the process already running on next login,
+no manual action taken).
`packaging/win/service.ps1` + `service-mode.ps1` (one elevation, folds the
firewall rules into the same UAC prompt) +
`meshbay_node.platform.service_install/_remove/_status/_run/_end` + CLI
@@ -554,6 +565,21 @@ alone — Task Scheduler owns that process's creation flags and its own stop
semantics are a separate, unverified surface, not something `service.ps1`
controls.
+### 5.10 System tray (2026-09-05)
+
+**Scope:** `preload.js` + `src/main.js` (two lines) + `test_desktop_shell.py`
+
+The GNOME tray (minimise-to-indicator, Start/Stop menu) was built against
+`nodeService.status()/stop()/restart()` — the same abstraction the Node
+page's own Stop/Restart buttons use, which already had full win32 branches
+(§5.3) covering both startup modes. So the tray needed no new logic for
+Windows, only its two platform gates widened from Linux-only to
+Linux-or-win32: the `tray` capability in `preload.js`, and the
+`window:minimize-to-tray` IPC handler in `main.js`. Reuses the existing
+`tray-icon.png`/`@2x.png` (already packaged for every OS via `package.json`'s
+`files`, no separate Windows list). `test_desktop_shell.py` now pins that
+both gates name the same platform set — nothing did before.
+
---
## 6. Execution order