Stable releases of October 11, 2026¶
Everything that shipped on the stable channel on October 11, 2026 — v2.10.18 through v2.10.19, newest first. v2.10.19 is what you install; the versions below it are how you get there.
Stable v2.10.19¶
- docs: add missing v2026.10.11.02 pill to testing changelog index
- feat(sites-ui): expose Site.WWWRedirect in the shared edit modal
- fix(nginx): block www_redirect when the app already redirects the other way
- feat(nginx): www<->bare-domain canonicalization redirect
Stable v2.10.18¶
- feat(ssl): one reachability check with three states, wired into the renewal worker
- fix(nginx): redirect vhost aliases use sitebuild's redirect-aware list
- feat(ui): Object-Lock-Status, Produkttext und Purge-Fehlermeldungen für in 15 Sprachen
- feat(api): echte Object-Lock-Erkennung für operator-eigene S3-Backup-Ziele
- fix(backup): S3-Purge erkennt jetzt Object Lock und bloße Versionierung statt sie zu übersehen
- fix(nginx): renderPanelNginx now rolls back on a failed test or reload
- fix(delete): anchor agentGone's 502 check on the literal "HTTP 404:" marker
- fix(delete): agentGone reads the agent's typed HTTP status, not error text
- fix(domain): shadow www/alias rows no longer default to mail_enabled=true
- fix(sitebuild): ClaimedLineages now reads a server's own panel_url too
- fix(mail): a failed postmap -F no longer vanishes silently
- fix(nginx): remove unconditional HTTP/3 Alt-Svc duplicate, add HSTS to panel vhost
- fix(backup): local repo purge now deletes config last, detects orphans
- fix(backup): a bare FTP reconnect no longer proves a failed listing meant empty
- feat(ui): Zugangsdaten-Re-Entry-Dialog für Remote-Repository-Purge
- feat(api): Remote-Repository-Purge — Betreiber-Globals vs. Kunden-Re-Entry
- feat(agent): Repository-Purge für s3/ftp/sftp mit sicherer Löschreihenfolge
- fix: use explicit php8.4-opcache instead of unresolvable generic name
- fix: restore php8.4-imap after disputed measurement proved wrong
- i18n: translate the ghost-site recreate label and error in all 15 languages
- feat: render a second button for the ghost-site recreate action
- feat: add an endpoint to recreate a ghost site on its server
- fix: generate install_script.go's role packages from the shared list
- refactor: read role_setup.go's package list from shared/rolepackages
- feat: add shared rolepackages module as the single role-package source
- feat: add an "empty completely" action to the operator's key store
- feat: empty a deleted schedule's local backup repository through the panel
- fix(i18n): the server-wide config warning uses the panel's em dash in every language
- fix: make apache2/dovecot/pdns restarts conditional on real change
- fix: confirm roles only on a real success, add the lock timeout this call site was missing
- fix: drop redis-server from bootstrap, reconcile unretried ApplyRoles
- fix(dashboard): a customer site whose diagnosis call fails is named, not dropped
- chore: ignore Playwright's test-results/ run artifacts
- fix(backup): encrypt restore_report at rest — it can now carry a password
- feat(backup): a restore gives a deleted database, mailbox or FTP account its panel record back, with a new password shown in the report
- fix(backup): server-wide schedules can no longer land on scope=config
- fix(audit): name the actor even when a JWT carries no email claim
- fix(a11y): 404 on an API GET during a scan is NOT TESTED, not a pass
- fix(backup): a canceled run stops logging as ERROR, and a restore's file total can't be smaller than restored+skipped