- replace any preloaded PySide6 modules with local stubs before importing updater_gui
- prevent headless linux failures from libGL dependency during unit tests
- stub PySide6 in test_updater_gui to run on linux runner without libGL
- close main app immediately after launching updater, without blocking OK dialog
- added retry-based file copy, rollback restart, and version marker validation in updater GUI
- added build step to write dist/version.txt for post-update validation
- added unit tests for updater helpers