Fixes the update that left the extension enabled but stopped. install.sh disabled the extension and enabled it straight away. GNOME Shell disables asynchronously, and slower with more extensions enabled after this one, because it also disables and re-enables those. An enable that arrives meanwhile is dropped. install.sh now waits for the extension to be inactive before enabling it, then waits for it to be active again. If it doesn't come back, the script says so and prints the commands to start it.
Running install.sh again with nothing new used to print "Already installed; nothing changed" and stop, even if the extension wasn't running. Now it starts it ("Already installed, but it wasn't running: reloaded it."). That re-run also deleted the previous build, because it treated the current build as the one to keep twice. Old builds are now cleaned up only when the build actually changes.
The headless smoke test runs these in a private session. It updates with install.sh from a second checkout carrying one change, and expects the extension active and running the new build. It then stops the extension while leaving it enabled, and expects a second install.sh run to start it again with both builds still kept. Before this change, a repeat install deleted the previous build. That's reproduced with your exact commits.
🤖 Generated with Claude Code