v1.0.4 — Self-updater hotfixes
What's new
Emergency maintenance release after v1.0.3. The self-updater had two critical bugs that only surfaced in real-world use of v1.0.3. If you already installed v1.0.3: apply this update without fail, otherwise future auto-updates won't work correctly either.
Changes
The updater now unpacks wrapper ZIPs correctly
The release ZIPs contain a top-level versioned wrapper folder (e.g. schneespur-1.0.3/). The previous self-updater staged that wrapper as-is and then copied blindly — so the new files landed under <install>/schneespur-X.Y.Z/ instead of overwriting the live files. The state file reported success while the live code stayed on the old version.
Fixed with defensive common-prefix stripping in SchneespurUpdater::extractAndStage, mirroring the module-installer logic from v1.0.3. ZIPs with or without a wrapper folder are now both unpacked correctly.
Rollback guard no longer fires after a successful update
The rollback-protection check (counter <= last_counter) ran before same-version detection. As a result, after a successful install the next "check" against the same manifest threw a "rollback attempt" exception instead of cleanly saying "up to date".
The order is reversed — the same-version check runs first and returns null cleanly. The counter check only fires on a real manifest change.
Build packed flat
build.sh now produces ZIPs without a wrapper folder. This way the v1.0.4 update works even on v1.0.3 installs that still have the buggy old updater — the ZIPs unpack flat and overlay the live files correctly.
Recovery for v1.0.3 installs with stranded files
If a schneespur-1.0.3/ subfolder ended up on your test/live server (see bug above), clean up via FTP:
- Delete the
schneespur-1.0.3/subfolder in the install root (those are the never-activated v1.0.3 files). - Delete
bootstrap/cache/config.php(it still holds the old version; it's rebuilt on the next request). - Open
storage/app/schneespur_update_state.json, resetcurrent_versionto"1.0.2"andlast_counterto the v1.0.2 value (typically3) — otherwise the updater thinks you're already on 1.0.3 and won't offer v1.0.4. - Click "Check for updates" in the admin — v1.0.4 should be offered and this time install cleanly.
Upgrading from v1.0.2 (clean, no history)
- Download the ZIP
- Copy the contents over the existing installation via FTP (overwrite files)
- Do not overwrite
.envandstorage/app/installed.lock - If available:
php artisan view:clear && php artisan config:clear - Done — no DB migration needed
Or via auto-update — now works correctly too.
Requirements
- PHP 8.3+ with
ext-sodium,ext-pdo_mysql - MySQL/MariaDB 10.6+ or PostgreSQL 13+
- Web hosting with write access to
storage/andbootstrap/cache/