Skip to content

v1.0.3 — Hotfixes & module stabilization

Choose a tag to compare

@noschmarrn noschmarrn released this 19 May 13:26
Immutable release. Only release title and notes can be modified.

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 htmlspecialchars on the i18n dict (category was 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)

  1. Download the ZIP
  2. Copy the contents over the existing installation via FTP (overwrite files)
  3. Do not overwrite .env and storage/app/installed.lock
  4. If available: php artisan view:clear && php artisan config:clear — otherwise the footer still shows the old version (config cache)
  5. 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/ and bootstrap/cache/