## Change log

- Version 1.20
  - Allow task args to be an array of arrays to run subsequent programs (and break if one fails).
  - `requirements.txt` added.
- Version 1.21
  - Removed push monitoring in favor of `/telemetry.json` endpoint.
- Version 1.22
  - Require user auth for telemetry endpoint.
- Version 2.0.0
  - Remove `ini` file in favour of command line arguments.
  - Make installable.
  - Version scheme change to be compatible with pip.
- Version 2.0.1/2.0.2
  - Fixed base dir for installed app.
  - Fixed package data for templates/static files.
- Version 2.1.0
  - Remove `psutils` dependency;
  - therefore remove `/top` and memory overview in `/manage/`.
- Version 2.2.0
  - Redesign & Licencing infos.
  - `config.toml`, command line options.
- Version 2.2.1
  - Also log outputs with invalid UTF-8 chars
- Version 2.2.2
  - Recursively kill child processes when stopping a task.
- Version 2.3.0
  - Send POST message body of webhooks to STDIN.
- Version 2.3.1/2.3.2
  - Set cycle default to `5` seconds.
  - Design updates (i.e. allow to start/stop task from task log).
- Version 2.3.3
  - Add `shell` setting.
- Version 2.3.4
  - Add suvi specific ENV variables `SUVI_TASK_NAME` and `SUVI_EXEC_UUID`.
  - Fix exec type to ondemand for unknown types.
- Version 2.4.0
  - Refactoring of task internals.
- Version 2.4.1
  - Python 3.6 compatibility.
- Version 2.4.2
  - View global and tasks logs in plain text.
  - Set log queues to 1000 lines (from 500).
  - Add action buttons in task log list.
- Version 2.4.3
  - Set task queues to 1000 lines (from 500).
- Version 2.4.4
  - Fix token handling regression.
- Version 2.4.5
  - Fix task listing for ondemand talend tasks.
- Version 2.4.6
  - Fix talend infos in task list for non-running ondemand tasks.
- Version 2.4.7/2.4.8
  - Fix suvi no more loading tasks after first parsing error.
  - Refactor `"shell": "true"` field to `"exec": "shell"`.
  - Print missing file/directory on File Not Found errors in suvi log.
- Version 2.5.8
  - Update to Bootstrap 5.3, htmx 1.92. and JQuery 3.7.0
- Version 2.5.9
  - Update minium Python version to 3.9.
  - Fix stop tasks bug.
- Version 2.6.0
  - Switch Markdown parser to `python-markdown`.
- Version 2.6.1
  - Windows service stops will try to stop tasks before shutdown.
  - Terminate frontend process on shutdown.
  - Admin interface shutdown will shutdown suvi (service) itself.
  - Change Windows service temp path to be consistent between starts.
- Version 2.6.2/2.6.3
  - Update HTMX to 2.0.4.
  - Allow filtering configured tasks, running tasks and task logs list.
- Version 2.6.4
  - Upgrade to Pyton >= 3.12
- Version 2.7.0
  - Open Source release
  - Cleanups
  - Remove build targets for old closed source edition
- Version 2.7.1
  - Change to GPLv3
- Version 2.7.2
  - Update iconset
  - Visual updates
- Version 2.7.3
  - Updated colouring in ECMind 2025 style
  - Remove spinners in search boxes
- Version 2.7.4
  - Remove linting errors
  - Code formatting
  - Visual cleanups
  - Navbar indicators
- Version 2.7.5
  - Fix file log handler writing all task logs only to `suvi.log`
- Version 2.7.6
  - Allow more complex schedules with slash and dash elements like `*/2` and `1-3,5-9`.
- Version 2.7.7
  - Catch UnicodeDecodeError in task parser
- Version 2.7.8
  - Tasklist with lesser updates, based on `cycle_wait`/2.
  - Tasklist does not reload (and clear the filter) when selecting reload for ondemand tasks or schedules.
- Version 2.7.9
  - Auto-reload pauses while text is selected to make copying text possible.
- Version 2.8.0
  - Login with `/login` (+ `/logout`) with a signed session cookie.
  - New options `--secret-key` and `--session-days`.
- Version 2.8.1
  - Manually resolve relative executables of `system` tasks against `cwd` on Windows.
  - Log the missing executable and `cwd` on file not found errors.
- Version 2.8.2
  - Fix stop, remove and reload buttons for task names with special characters like `#`.
  - Encode the task name in the redirect after starting a task.
  - Fix task config files with a dot in their name never being loaded.
- Version 2.9.0
  - Allow suvi to be served below a sub path by a reverse proxy.
  - New options `--url-prefix`, `--url-scheme` and `--trusted-proxy`.
  - Build all static file links relative to the sub path.
  - Scope the session cookie to the sub path and mark it `Secure` for `https`.
  - Render the task, process and task log lists on the server again instead of
    leaving the page empty until htmx has fetched them.
  - Remove stray `</main>` and `</body>` tags from the task log list partial.
  - Let browsers cache static files and stamp their links with the file date,
    so a page change no longer reloads the stylesheets.
  - Compress text responses, which shrinks a full log page from 270 KB to 5 KB.
    Uncompressed, such a page delayed its own stylesheets and showed up unstyled.
  - New option `--threads`, raising the default from waitress' 4 to 8.
- Version 2.9.1
  - Expand the five schedule fields once while loading a task, so that matching a
    schedule can no longer fail at runtime.
  - Fix a single malformed schedule killing the scheduler thread, which silently
    stopped every scheduled task until the next restart.
  - Support ranges with a step like `1-23/2`, which raised an error before.
  - Support english month and weekday names like `jan`, `january`, `mon` or `mon-fri`.
  - Accept numbers with a leading zero like `01`.
  - Log unusable schedule elements as a warning instead of ignoring them silently.
  - Document the two places where suvi deviates from vixie cron, namely `*/n` steps
    in the day, month and weekday field and a schedule that restricts the day of
    month and the weekday at once. Existing schedules keep firing unchanged.
- Version 2.9.2
  - Fix `/tasks.json` answering with a 500 since version 2.4.0, where the task files
    became `Task` objects that `jsonify` cannot serialize.
  - Build the endpoint from the new `Task.as_dict()`, which writes the fields of the
    task config file plus the runtime data, i. e. whether a keepalive task is running.
  - Leave the webhook tokens of a task out of that output.
