HostingSignal Handoff
Date: 2026-03-15 Scope: 2086 daemon panel reliability fixes, database flow fixes, phpMyAdmin access, and button wiring stabilization.
1) Fixes Implemented
A. Database create and DB user create failures fixed
- Root cause: MySQL statements were executed through shell-interpreted command strings, so SQL backticks were interpreted by shell substitution.
- Fix:
- Reworked SQL execution to argument-list process execution with
IPC::Open3. - Added safer stdout/stderr capture and return handling.
- Reworked SQL execution to argument-list process execution with
- File:
usr/local/hspanel/perl/HS/Database.pm
B. DB user password change implemented
- Added backend function:
change_user_password(username, password)in database module.
- Wired UI button to real form submission and prompt-driven flow.
- Files:
usr/local/hspanel/perl/HS/Database.pmusr/local/hspanel/templates/ui/databases.tmpl
C. phpMyAdmin button routing fixed
- Root cause: database page linked to
/phpmyadmin, but daemon route logic expects software redirect path for panel flow. - Fix:
- Updated link to
/software/phpmyadmin.
- Updated link to
- File:
usr/local/hspanel/templates/ui/databases.tmpl
D. Domain creation failed on OpenLiteSpeed reload
- Root cause: wrapper operation could fail on runtime mismatch/stale binary support.
- Fix:
- Added fallback reload attempts in sequence:
/usr/local/lsws/bin/lswsctrl restartsystemctl reload lswssystemctl restart lshttpdsystemctl restart openlitespeed
- Added fallback reload attempts in sequence:
- File:
usr/local/hspanel/perl/HS/Web.pm
E. Mail subsystem operation resilience improved
- Root cause:
postmappath assumptions and wrapper-only reload path could fail on some hosts. - Fix:
- Added postmap path fallback list (
/usr/sbin/postmap,/sbin/postmap,postmap). - Added postfix/dovecot reload fallback list via wrapper and direct
systemctl.
- Added postmap path fallback list (
- File:
usr/local/hspanel/perl/HS/Mail.pm
F. Email action buttons wired to working actions
- Webmail button now opens
/webmail/. - Mail password change button now submits to backend (
/api/mail/change_password). - File:
usr/local/hspanel/templates/ui/email.tmpl
2) Runtime Deployment Performed
Deployed updated workspace files into live WSL runtime path:
/usr/local/hspanel/perl/HS/Database.pm/usr/local/hspanel/perl/HS/Web.pm/usr/local/hspanel/perl/HS/Mail.pm/usr/local/hspanel/templates/ui/databases.tmpl/usr/local/hspanel/templates/ui/email.tmpl
Service action performed:
systemctl restart hostingsignal-daemon
3) Validation Results
Validated with direct HTTP requests against running daemon:
- DB create:
- POST
/api/database/create->302to/databases?ok=1
- POST
- DB user create:
- POST
/api/database/create_user->302to/databases?ok=1
- POST
- DB user password change:
- POST
/api/database/change_user_password->302to/databases?ok=1
- POST
- Mail password change:
- POST
/api/mail/change_password->302to/email?ok=1
- POST
- Domain create:
- POST
/api/web/create_vhost->302to/domains?ok=1
- POST
- phpMyAdmin route:
- GET
/software/phpmyadminwith panel cookie ->302to/phpmyadmin/
- GET
Daemon API log confirms successful operation entries for the above flows.
4) Current Known Issues
High Priority
- Some panel pages still have placeholder action buttons without backend wiring
- Affected templates include (at minimum):
usr/local/hspanel/templates/ui/cron.tmpl(edit/delete placeholders)usr/local/hspanel/templates/ui/backups.tmpl(download/restore/delete placeholders)usr/local/hspanel/templates/ui/ssl.tmpl(force renew/delete placeholders)usr/local/hspanel/templates/ui/dns_editor.tmpl(edit/delete placeholders)
- Affected templates include (at minimum):
- phpMyAdmin still depends on external webserver path
- Panel now redirects correctly, but actual phpMyAdmin availability depends on web stack configuration at
/phpmyadmin/.
- Panel now redirects correctly, but actual phpMyAdmin availability depends on web stack configuration at
Medium Priority
- Wrapper binary feature drift risk remains
- Source file advertises operations like
reload_lsws,reload_postfix,reload_dovecot, but deployed binary may lag source. - Current mitigations exist in Perl modules via fallbacks; wrapper binary should still be rebuilt/redeployed to align fully.
- Source file advertises operations like
- Mail module warning to clean up
- Perl warning seen:
Name "maildir::userdb_quota_rule" used only once. - This does not block function, but should be cleaned for code hygiene.
- Perl warning seen:
5) Recommended Next Implementation Pass
- Wire all remaining placeholder action buttons to real APIs in cron/backups/ssl/dns templates.
- Add/confirm missing backend methods in:
HS::CronHS::BackupHS::SSLHS::DNS
- Rebuild/redeploy
wrap_sysopfromusr/local/hspanel/bin/wrap_sysop.cand revalidate wrapper operations. - Add a deterministic regression script that exercises all panel action routes and checks redirect success states.
6) Operational Notes
- The critical production blocker (database actions failing due to shell execution) is now fixed and verified live.
- The most user-visible core action failures reported in this cycle are resolved.
- Remaining failures are primarily unimplemented placeholder actions rather than core transport/auth breakage.
7) Local Services Installer Continuation (2026-03-15)
Implemented in this continuation
- Fixed compose rendering stability in
scripts/local_installer.pyby emitting deterministic YAML. - Fixed local stack path resolution so binds/build contexts target repo roots (
../../services,../../data) fromruntime/local-stack/docker-compose.yml. - Added cache data dir scaffolding (
data/cache/redis) during layout creation. - Cleaned root installer entrypoint:
install.shnow only wraps toscripts/local_installer.py.
- Updated compose manager behavior:
core/service-manager/service_manager.pynow injects configured compose profiles by default.- Added compose command compatibility detection for both
docker composeanddocker-compose.
- Added installer-side compose command compatibility detection in
scripts/local_installer.py.
Current validation results
- Local installer generation path works:
--non-interactive --web apache --db mariadb --skip-startwrites validconfigs/install-config.json,.env, compose file, and service workspace assets.
- Compose validation works when a compose command exists:
python core/service-manager/service_manager.py validatereturns parsed config successfully in PowerShell context.
Current blockers (environment/runtime)
- Windows host Docker daemon is unavailable in current session:
docker infofails with missingdockerDesktopLinuxEnginepipe.
- WSL distro currently has Docker CLI but no compose command available:
docker composeis unsupported.docker-composecommand is missing.- Docker Desktop WSL integration appears disabled or unavailable for this distro.
Unblock checklist for next operator
- Start Docker Desktop (or ensure Linux Docker daemon is running) on host.
- Enable WSL integration for the target distro in Docker Desktop settings.
- Confirm one compose interface exists inside WSL:
docker compose versionordocker-compose --version
- Re-run:
bash ./install.sh --non-interactive --web apache --db mariadb
- Validate and smoke-test:
python core/service-manager/service_manager.py statuspython scripts/test_local_stack.py
Scope status summary
- Installer architecture and local service scaffolding: implemented.
- Compose/service-manager integration: implemented.
- Runtime bring-up and smoke-tests: blocked by Docker runtime availability on current machine.