v1.0.3 — Hotfixes & module stabilization
What's new
Maintenance release with five fixes from the first real-world run of v1.0.2. Most concern stability and visibility: logging was hidden by the new diagnostic infrastructure, the module subsystem had several drift bugs, and the version display was stuck on 1.0.0.
Changes in detail
Logging visible again
The reportable() callback in bootstrap/app.php swallowed all exceptions because it always returned false. On a fresh install with no active diagnostic reporter, nothing reached storage/logs/laravel.log. It now returns null (so the default logger keeps writing) when no reporter handled the error.
Creating a site works again
notify_recipients had drifted between the migration (NOT NULL, default 'customer'), validation (nullable, max:1000), form (free text), and consumers (enum customer|object|both). Result: a 500 when creating any new customer site without an explicitly set recipient. All layers now follow the enum truth; the form uses a <select>.
Version display reads from the VERSION file
Footer, settings, and dashboard kept showing 1.0.0 after every release because config/app.php had the version hardcoded. Config now reads dynamically from the VERSION file — the single source of truth for the version display.
Module catalog renders correctly
Two combined bugs in the module area:
- The first call to the module page returned a 500 from
htmlspecialcharson the i18n dict (categorywas an array, not a string) - Follow-up calls were empty because a 304 response incorrectly fell back to
state['installed']
SchneespurModuleClient::normalizeModule() now maps the server schema (current_version, image_url, i18n category) to the internal schema. The catalog body is cached in state, and a 304 returns the cached body.
Modules unpack correctly
SchneespurModuleInstaller now detects a common top-level folder in module ZIPs and strips it on extraction. Module ZIPs with or without a wrapper folder now land correctly under modules/<slug>/ — instead of under modules/<slug>/<slug>/ as before.
Upgrading from v1.0.2 (or older)
- 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— otherwise the footer still shows the old version (config cache) - Done — no DB migration needed
Or via auto-update: offered automatically on the next update check.
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/