Added

  • Enhanced notes: custom blocks (tabs, timeline, split-view) now have ↑/↓ buttons in their header so they can be reordered without drag-and-drop.
  • Backup: “Export (plain)” button downloads a plain .tar archive even when the server is configured with a public key, making it easy to get an unencrypted backup without managing RSA keys. The existing “Export backup” button continues to produce an encrypted archive when a key is configured.
  • Backup: GET /api/backup/export?plain=true query param added to the export endpoint to bypass encryption on demand.

Fixed

  • Sidenav fullscreen toggle: the toggle button was throwing NotFoundError: The object can not be found here when opening sidepanels where the close button is nested inside a flex container (e.g. C4 diagram sidenav). Fixed by inserting relative to closeBtn.parentElement instead of the header element directly.
  • Task sidenav: _populateSidenavSelects is not a function error thrown when the project field changed. The method was renamed to populateSelects in a previous refactor but the event listener was not updated.
  • Task sidenav: the “Time Entries” section was always hidden because the sidenav never showed it or loaded data when opening a task. The section is now revealed automatically for existing tasks, time entries are loaded from the API, and App.editingTask is kept in sync so saving and deleting entries works correctly.
  • Fuzzy autocomplete: clicking an empty project/category field showed no suggestions. The dropdown now opens on focus regardless of whether the field has a value, showing all available options immediately.