The entrypoint handed /data to the node user only when the folder itself
belonged to someone else. Files copied in from another machine, or made by
running Haven once outside the container, could belong to another user inside
a folder that looked fine, so the database could not be opened and the
container restarted in a loop with a bare SQLITE_CANTOPEN. It now checks the
database, its WAL files, .env, the certificates and uploads too, and says so
when it cannot fix them. The server's own error names the folder and the
command that fixes it. The guide has a short Podman section (SELinux :Z,
ports below 1024, file owners).
- Add FORCE_HTTP=true env option to skip built-in SSL (for Caddy/nginx/Traefik)
- Update startup scripts (bash, bat, Docker) to respect FORCE_HTTP
- Disable HSTS header when FORCE_HTTP is active
- Add auto_assign column to roles table with DB migration
- Default 'User' role is auto-assigned on registration
- Admin UI: toggle auto-assign per role, visual indicator
- join-channel auto-assigns flagged roles to new members
- Fix window.app reference for desktop voice hook
- Relocated voice controls panel from left sidebar to right sidebar
- Buttons are now icon-only circles with hover tooltips (Mute, Deafen, Share, Music)
- Added Voice Settings gear button that toggles a slide-up panel with NS slider
- Right sidebar restructured: Voice section (pinned top) > Online Users (scrollable) > Settings (pinned bottom)
- Voice section takes priority; user list scrolls independently below
- Mobile: header voice indicator opens right sidebar instead of left
- Includes all prior changes: admin self-nerf prevention, Channel Roles tags rework, Docker audit