- scripts/update-app.sh: detached updater (setsid, survives app exit):
git pull atitlan master -> gradle createDistributable -> only then
kill app+engine and relaunch the fresh binary. Pull or build failure
leaves the running app alone. Log: ~/.config/shonar-desktop/logs/update.log.
- Settings → About & updates: 'Install update' button appears when the
check finds a newer remote commit; hands off to the script and tells
the user the app will relaunch itself.
- Desktop entry (~/.local/share/applications/shonar-desktop.desktop,
outside the repo): launches the packaged distributable via
launch-desktop.sh; SHONAR_REPO fallback already resolves the tree,
so the packaged app spawns the engine and sees the updater script.
Gate: :app:compileKotlin + :app:test green; desktop-file-validate clean;
launcher verified (app window from the menu path); updater fail-safe
verified (dirty-tree pull refused, app survived).