You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Release-candidate hardening from final bug sweep
Auto-update robustness (could otherwise leave the app dead/broken):
- App: when relaunched with --updated after a silent update, wait (up to
10s, or take an abandoned mutex) for the previous instance to release the
single-instance mutex instead of exiting immediately.
- Installer: silent relaunch passes --updated; PrepareToInstall now settles
~1.5s after taskkill so the exe handle is released before files are copied
(a still-locked exe was silently aborting the update).
- TrayApp: guard the async update handlers (check/install) so an exception
can't crash the tray; re-enable the menu item via finally.
Concurrency / lifecycle:
- WebcamCapture.Dispose now tears down the reader off the UI thread (no
bounded .Wait), so close/refresh/camera-switch never freeze the UI; the
reader is stopped before disposal. OS releases the camera on process exit.
- Reset the frame gate on DispatcherOperation.Aborted so a dispatcher
shutdown mid-frame can't wedge the preview.
- TrayApp: use DispatcherTimer instead of WinForms Timer (correct WPF
primitive; removes message-pump ambiguity).
UI:
- Wheel-scaling clamps by screen height too, so a portrait source can't grow
the window taller than the display.
CI:
- Bump actions to Node 24-native majors (checkout@v6, setup-dotnet@v5,
upload-artifact@v7, action-gh-release@v3); drop the FORCE_NODE24 env.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>