@mmmbuto/nexuscrew 0.8.35 → 0.8.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,39 @@
2
2
 
3
3
  All notable changes to NexusCrew are tracked here.
4
4
 
5
+ ## 0.8.36 — 2026-07-24 — "Clean Relaunch"
6
+
7
+ - Makes macOS service and Fleet LaunchAgent reinstalls wait until `launchd`
8
+ has actually removed the previous job before bootstrapping the replacement,
9
+ preventing intermittent unload/bootstrap races during upgrades.
10
+ - Bounds the unload check to five seconds and fails closed instead of leaving a
11
+ partially applied activation when a successfully stopped job never
12
+ disappears.
13
+ - Keeps Settings service regeneration non-activating on every platform: the
14
+ unit is rewritten atomically, but applying it still requires the explicit
15
+ service restart already shown by the UI.
16
+ - Adds opt-in, browser-local spoken alerts for new live PWA notifications.
17
+ Enabling the setting runs an honest native delivery test and speech remains
18
+ gated on a successful test for the current page session; unsupported, silent
19
+ or failing engines degrade without affecting the visual toast or SSE channel.
20
+ - Speaks only from the visible, focused NexusCrew window and cancels on blur,
21
+ background, opt-out or unmount. Duplicate reconnect frames are suppressed
22
+ for 60 seconds, the normal queue keeps at most the two newest pending alerts,
23
+ high urgency preempts it, and a 30-second watchdog advances past a stuck
24
+ browser utterance.
25
+ - Leaves Web Push unchanged as the best-effort hidden/closed-app path. Speech
26
+ uses the device voice and current UI language without a server audio route;
27
+ credential-shaped values and private home paths are redacted first. The
28
+ preference is off by default, works under server READONLY and is synchronized
29
+ across windows for the same browser origin.
30
+ - Documents the one-speaker boundary: focus prevents duplicate speech across
31
+ windows on one device, while separately opted-in devices can each speak by
32
+ design. Persisted questions are never replayed; only new live notification
33
+ frames enter the speech manager.
34
+ - Gate: **1,059 isolated Node tests** (1,058 pass / 1 platform skip),
35
+ **293/293 frontend tests**, production PWA build (168 modules) and zero
36
+ production dependency vulnerabilities in both dependency trees.
37
+
5
38
  ## 0.8.35 — 2026-07-23 — "Contained Fleet"
6
39
 
7
40
  - Keeps Fleet rows inside the Settings panel on phones and narrow windows.
package/README.md CHANGED
@@ -271,6 +271,34 @@ draft, size preference and bounded prompt history in the current browser, includ
271
271
  ArrowUp/ArrowDown recall at textarea boundaries. This browser-local state is not federated or
272
272
  included in Fleet backups and can be cleared from Settings → System.
273
273
 
274
+ ## Notifications and optional spoken alerts
275
+
276
+ Live cell notifications appear as in-app toasts and can also use Web Push when that browser and
277
+ operating system support it. Push delivery remains best-effort and requires the browser permission;
278
+ on iOS it also requires an installed PWA. The service worker cannot synthesize speech, so a hidden
279
+ or closed PWA uses only its normal system-notification path.
280
+
281
+ **Settings → System → Read notifications aloud** adds browser-local speech for new live
282
+ notifications. It is off by default, remains editable when server settings are read-only, uses the
283
+ device's system voice in the current UI language, and sends no notification text to a speech
284
+ service. Enabling it runs an audible test. NexusCrew reports success only after the browser emits
285
+ both speech start and end; if the native engine stays silent or errors, the UI reports that voice
286
+ is unavailable. Credential-shaped values and private home paths are redacted before speech. The
287
+ test must succeed once per page session, including after a reload.
288
+
289
+ Speech runs only while that document is visible and has operating-system focus. Blur, background,
290
+ opt-out and unmount cancel the current utterance and clear pending work; skipped notifications are
291
+ not replayed when focus returns. Duplicate live frames are suppressed for 60 seconds, at most two
292
+ normal alerts remain pending, and a high-urgency alert interrupts the current queue. A 30-second
293
+ watchdog cancels a stuck browser utterance and advances to the next alert.
294
+
295
+ Focus provides one speaker among NexusCrew windows on the same device. Two separately opted-in
296
+ devices may both speak when each PWA is visible and focused; this is intentional for a per-device
297
+ preference. Spoken alerts are optional and do not replace the toast's accessibility status, so
298
+ screen-reader users can leave speech disabled if their assistive technology already announces it.
299
+ Depending on the operating system, an enabled Web Push notification may still coexist with the
300
+ visible toast and spoken alert.
301
+
274
302
  ## Connect nodes through SSH
275
303
 
276
304
  Every installation starts as a local node. A node joins another NexusCrew installation with a
@@ -545,7 +573,7 @@ See [CHANGELOG.md](CHANGELOG.md) for released changes.
545
573
 
546
574
  ## Status
547
575
 
548
- The current stable release is **v0.8.35** on npm and GitHub.
576
+ The current stable release is **v0.8.36** on npm and GitHub.
549
577
 
550
578
  ## License
551
579