Three static checks over files already in the repository, so they cost nothing at runtime: * every HELPDESK_/QUEUE_ name an example configuration assigns is a name src/helpdesk reads. HELPDESK_PUBLIC_ENABLED failed this for years. * every environment variable the docs/standalone.rst tables promise is read from os.environ by standalone/config/settings.py. HELPDESK_KANBAN_ENABLED failed this. The check looks at the environment reads rather than the file text, so a name hardcoded in the configuration does not satisfy it while ignoring what the operator puts in docker.env. * every key of a HELPDESK_DEFAULT_SETTINGS dict is a field on UserSettings. DEFAULT_USER_SETTINGS.update() merges whatever it is handed, so an unknown key is absorbed in silence. Each check was verified to fail when its own regression is reintroduced, and the third needed a cleanup to pass: "preset_replies" was in the standalone and demo configurations and "email_on_ticket_apichange" in the demo one, neither is a UserSettings field, and neither has ever been read. The name preset_replies does exist elsewhere as a template context variable holding PreSetReply rows, which is unrelated and probably how it got there. HELPDESK_PRESET_REPLIES goes from the standalone documentation table with it, since the key it fed is gone. The checks are tripwires rather than proofs: a name appearing only in a comment counts as used, which is the right trade for catching a whole setting falling out of use. They skip when run against an installed distribution, since they need the repository layout. Filed in #1416.
Django-helpdesk standalone
This is a standalone installation of Django-helpdesk allowing you to run django-helpdesk as a production standalone application in docker.
For installation instructions see the documentation
For development and testing purposes, the docker-compose-dev.yml file will build the standalone docker images from source.