Repository navigation
Releases: sugoHQ/sugo
Release list
Sugo v1.0.2
macOS (13 or later, Apple Silicon or Intel): open Sugo-1.0.2-macOS-universal.dmg and drag Sugo to Applications. Sugo is not notarized by Apple, so macOS blocks the first launch: on macOS 15, open System Settings → Privacy & Security and click "Open Anyway" next to the message about Sugo (on macOS 13 and 14, Control-click Sugo in Applications and choose Open), or run xattr -dr com.apple.quarantine /Applications/Sugo.app in Terminal. Sugo for macOS installs its updates by itself when it is in a folder it can write to (Applications for an administrator).
What's Changed
- fix(nightly): publish a nightly built again from the same commit by @MineraleYT in https://github.com/MineraleYT/sugo/pull/8
- fix(release): install Qt Multimedia for the release's test build by @MineraleYT in https://github.com/MineraleYT/sugo/pull/9
- fix(timer, presets): fresh set after a late stop, timers within their limits by @MineraleYT in https://github.com/MineraleYT/sugo/pull/10
- fix(stats): keep the current period and its comparison up to date by @MineraleYT in https://github.com/MineraleYT/sugo/pull/11
- fix(update): drop the old channel's update, consistent pre-release order by @MineraleYT in https://github.com/MineraleYT/sugo/pull/12
- fix(dbus): register objects before the bus name, signal and KRunner fixes by @MineraleYT in https://github.com/MineraleYT/sugo/pull/13
- fix(calendar): keyring prompts off the session path, discovery fixes, Nextcloud user id by @MineraleYT in https://github.com/MineraleYT/sugo/pull/14
- fix(data): restore with the WAL, no restore while a timer runs, notes for missing sessions by @MineraleYT in https://github.com/MineraleYT/sugo/pull/15
- fix: diagnostics at exit and redaction, private settings file, sound volumes by @MineraleYT in https://github.com/MineraleYT/sugo/pull/16
- fix(tray): confirm Quit during a phase, destroy the icon before its menu by @MineraleYT in https://github.com/MineraleYT/sugo/pull/17
- fix(ui): timer, preset editor and window fixes by @MineraleYT in https://github.com/MineraleYT/sugo/pull/18
- fix(settings, welcome): show refused calendar addresses and autostart errors by @MineraleYT in https://github.com/MineraleYT/sugo/pull/19
- fix: timer menu while a phase runs, macOS login agent and packaging checks by @MineraleYT in https://github.com/MineraleYT/sugo/pull/20
- test: catch Theme offsets, QML warnings at quit, a hung shutdown by @MineraleYT in https://github.com/MineraleYT/sugo/pull/21
- fix(macos): packaging script path, alert-style notifications, JIT entitlement by @MineraleYT in https://github.com/MineraleYT/sugo/pull/22
- fix(stats): keep today after month navigation, fewer chart rebuilds, page fixes by @MineraleYT in https://github.com/MineraleYT/sugo/pull/23
- test: keep tests off the developer's data, stricter colour check, script and metadata hygiene by @MineraleYT in https://github.com/MineraleYT/sugo/pull/24
- fix(timer, presets, silence): pending 0 break, removal order, announce before silencing by @MineraleYT in https://github.com/MineraleYT/sugo/pull/25
- fix(ui): cycle track, 0-minute breaks, Duplicate, long sets in the timer page and editor by @MineraleYT in https://github.com/MineraleYT/sugo/pull/26
- fix(platform): screensaver cookie 0, GNOME screen lock, KRunner keyword, inhibit replies, 2 s introspection by @MineraleYT in https://github.com/MineraleYT/sugo/pull/27
- fix(update, release): read-only AppImage, refreshed updates, feed never missing, GCC warnings as errors by @MineraleYT in https://github.com/MineraleYT/sugo/pull/28
- fix(calendar, keyring): buttons use the typed fields, 403 is not a login failure, colours, prompts by @MineraleYT in https://github.com/MineraleYT/sugo/pull/29
- fix(ui): search empty state, top bar and sidebar in small windows, stale dialogs, restore maximised, Cmd+Q when hidden by @MineraleYT in https://github.com/MineraleYT/sugo/pull/30
- fix(data, settings): report a database moved aside, damaged backups, failed exports, settings defaults by @MineraleYT in https://github.com/MineraleYT/sugo/pull/31
- Sugo Sync, fase 3: client di rete (accesso, chiave, ciclo di sync) by @MineraleYT in https://github.com/MineraleYT/sugo/pull/34
- build(macos): libsodium and Keychain groundwork for Sugo Sync by @MineraleYT in https://github.com/MineraleYT/sugo/pull/3
- Sugo Sync, phase 1: timer times, tombstones, sync format and encryption by @MineraleYT in https://github.com/MineraleYT/sugo/pull/4
- Sugo Sync, fase 4: scheda Sync, dialoghi e notifica by @MineraleYT in https://github.com/MineraleYT/sugo/pull/35
- docs: a short README for everyone, installation and macOS in the user guide by @MineraleYT in https://github.com/MineraleYT/sugo/pull/36
- fix(update): let only the disk image's Sugo.app replace itself by @MineraleYT in https://github.com/MineraleYT/sugo/pull/37
- fix(sync): find a device waiting for approval within 5 minutes by @MineraleYT in https://github.com/MineraleYT/sugo/pull/38
- Sugo Sync: fixes before the first nightly by @MineraleYT in https://github.com/MineraleYT/sugo/pull/39
- Sugo Sync: running timer and timer editor, before the nightly by @MineraleYT in https://github.com/MineraleYT/sugo/pull/40
- About: point the project website link to sugo.stream by @MineraleYT in https://github.com/MineraleYT/sugo/pull/49
- fix(macos): retry a Focus "off" shortcut that timed out by @MineraleYT in https://github.com/MineraleYT/sugo/pull/41
- fix(keychain): do not lose the stored secret when replacing it fails (macOS) by @MineraleYT in https://github.com/MineraleYT/sugo/pull/43
- fix(caldav): keep queued events when the calendar is gone or locked by @MineraleYT in https://github.com/MineraleYT/sugo/pull/44
- fix(update): never leave macOS without Sugo.app after a failed bundle swap by @MineraleYT in https://github.com/MineraleYT/sugo/pull/51
- fix(autostart): keep the Background portal's answer when it comes late by @MineraleYT in https://github.com/MineraleYT/sugo/pull/45
- fix(inhibitor): keep the cookie of a slow Inhibit reply by @MineraleYT in https://github.com/MineraleYT/sugo/pull/42
- fix(db): fail a read that a damaged page ends early by @MineraleYT in https://github.com/MineraleYT/sugo/pull/53
- fix(macos): don't let grep -q close the pipe in build.sh's checks by @MineraleYT in https://github.com/MineraleYT/sugo/pull/46
- fix(macos): show a refused notification from the menu bar icon by @MineraleYT in https://github.com/MineraleYT/sugo/pull/48
- fix(single-instance): wait only once for a primary that hangs by @MineraleYT in https://github.com/MineraleYT/sugo/pull/50
- fix(sync): clamp Retry-After so a rate-limited sync is not retried at once by @MineraleYT in https://github.com/MineraleYT/sugo/pull/56
- fix(screenlock): forget a lock when the screen locker leaves the bus by @MineraleYT in https://github.com/MineraleYT/sugo/pull/54
- fix(caldav): a test connection refused with 403 does not pause sending by @MineraleYT in https://github.com/MineraleYT/sugo/pull/47
- fix(db): keep the databases of Sugo 1.0.0 instead of moving them aside by @MineraleYT in https://github.com/MineraleYT/sugo/pull/55
- fix(db): take back the data of Sugo 1.0.0 only once, and say so by @MineraleYT in https://github.com/MineraleYT/sugo/pull/59
- Screen lock follow-ups: deterministic D-Bus tests, GetActive on a new locker; redaction placeholders by @MineraleYT in https://github.com/MineraleYT/sugo/pull/57
- fix(caldav): 403 follow-ups: pause after repeated 403s, honest messages by @MineraleYT in https://github.com/MineraleYT/sugo/pull/58
- Sugo Sync: small fixes to the Sync tab by @MineraleYT in https://github.com/MineraleYT/sugo/pull/52
- fix(sync): make the device-approval code too long to grind by @MineraleYT in https://github.com/MineraleYT/sugo/pull/61
- fix(diagnostics): redact prefixed secret keys and bare Bearer tokens by @MineraleYT in https://github.com/MineraleYT/sugo/pull/62
- fix(sync): keep the ETag when a downloaded merge cannot be saved by @MineraleYT in https://github.com/MineraleYT/sugo/pull/63
- fix(data): a restore keeps this database's 1.0.0 recovery mark by @MineraleYT in https://github.com/MineraleYT/sugo/pull/68
- fix(tray): ask before Stop or Skip from the tray or Dock menu cuts work short by @MineraleYT in https://github.com/MineraleYT/sugo/pull/64
- fix(notifications): release a stale Inhibit cookie, fall back to the tray without a server by @MineraleYT in https://github.com/MineraleYT/sugo/pull/67
- fix(focus): release with the paired off shortcut; no retry of a failing on per refresh by @MineraleYT in https://github.com/MineraleYT/sugo/pull/60
- fix(secrets): a locked second copy no longer hides the readable one by @MineraleYT in https://github.com/MineraleYT/sugo/pull/66
- fix(screenlock): notice locks through logind and on Xfce, Cinnamon and MATE by @MineraleYT in https://github.com/MineraleYT/sugo/pull/70
- fix(macos): forget and remove the banners a new notification replaces by @MineraleYT in https://github.com/MineraleYT/sugo/pull/65
- fix(nightly): version order and CI gate of manual runs by @MineraleYT in https://github.com/MineraleYT/sugo/pull/69
- docs: bring the new README and user guide to main by @MineraleYT in https://github.com/MineraleYT/sugo/pull/71
- fix(macos): Quit from the Dock asks first while a phase runs by @MineraleYT in https://github.com/MineraleYT/sugo/pull/72
- Keep "&" in timer names shown in menus by @MineraleYT in https://github.com/MineraleYT/sugo/pull/73
- fix(focus): wait for the whole Focus release when quitting by @MineraleYT in https://github.com/MineraleYT/sugo/pull/74
- KRunner: don't throw away a running phase when another preset is chosen by @MineraleYT in https://github.com/MineraleYT/sugo/pull/76
- Move on to the next sound player when one exits at once by @MineraleYT in https://github.com/MineraleYT/sugo/pull/78
- test(sync): wait for sync state instead of fixed delays by @MineraleYT in https://github.com/MineraleYT/sugo/pull/79
- test(power): wait for the client, no...
Sugo Nightly 1.0.2-nightly.20261105.34 (4238837b75ef)
v1.0.2-nightly.20261105.34 · 3 changes from 1 contributor
The branch testing at 4238837, built automatically. It may have bugs; the stable releases are tested.
Download Sugo-x86_64.AppImage, make it executable and start it. In Settings → Updates, the Nightly channel keeps it up to date by itself.
On macOS 13 or later (Apple Silicon or Intel), open Sugo-macOS-universal.dmg and drag Sugo to Applications. Sugo is not notarized by Apple, so macOS blocks the first launch: on macOS 15, open System Settings → Privacy & Security and click "Open Anyway" next to the message about Sugo (on macOS 13 and 14, Control-click Sugo in Applications and choose Open), or run xattr -dr com.apple.quarantine /Applications/Sugo.app in Terminal. Sugo for macOS installs its updates by itself too (the Nightly channel in Settings → Updates) when it is in a folder it can write to (Applications for an administrator).
Fixes
- fix(settings): the Timers page starts at the same height as the others
- fix(calendar): every calendar gets a colour, as in Nextcloud
- fix(calendar): an address typed without https:// is an https one
Full changelog: https://github.com/MineraleYT/sugo/compare/6076d7e8fe42aa77ca3cd11c9b6510dbd28e17ed...4238837b75efb300e724c45ff44bf8a41c195011
Sugo Nightly 1.0.2-nightly.20261105.33 (6076d7e8fe42)
v1.0.2-nightly.20261105.33 · 3 changes from 1 contributor
The branch testing at 6076d7e, built automatically. It may have bugs; the stable releases are tested.
Download Sugo-1.0.2-nightly.20261105.33-x86_64.AppImage, make it executable and start it. In Settings → Updates, the Nightly channel keeps it up to date by itself.
On macOS 13 or later (Apple Silicon or Intel), open Sugo-1.0.2-nightly.20261105.33-macOS-universal.dmg and drag Sugo to Applications. Sugo is not notarized by Apple, so macOS blocks the first launch: on macOS 15, open System Settings → Privacy & Security and click "Open Anyway" next to the message about Sugo (on macOS 13 and 14, Control-click Sugo in Applications and choose Open), or run xattr -dr com.apple.quarantine /Applications/Sugo.app in Terminal. Sugo for macOS installs its updates by itself too (the Nightly channel in Settings → Updates) when it is in a folder it can write to (Applications for an administrator).
Highlights
- ci(macos): build the disk image on the xcode-27 image
- docs(checklist): the update is an icon in the title bar
- ci(release): name every file after its version
Full changelog: https://github.com/MineraleYT/sugo/compare/5aaef37270aa55febae4f08d67cf497df9d2e62b...6076d7e8fe42aa77ca3cd11c9b6510dbd28e17ed
Sugo Nightly 1.0.2-nightly.20261105.30 (5aaef37270aa)
v1.0.2-nightly.20261105.30 · 1 change from 1 contributor
The branch testing at 5aaef37, built automatically. It may have bugs; the stable releases are tested.
Download Sugo-x86_64.AppImage, make it executable and start it. In Settings → Updates, the Nightly channel keeps it up to date by itself.
On macOS 13 or later (Apple Silicon or Intel), open Sugo-macOS-universal.dmg and drag Sugo to Applications. Sugo is not notarized by Apple, so macOS blocks the first launch: on macOS 15, open System Settings → Privacy & Security and click "Open Anyway" next to the message about Sugo (on macOS 13 and 14, Control-click Sugo in Applications and choose Open), or run xattr -dr com.apple.quarantine /Applications/Sugo.app in Terminal. Sugo for macOS installs its updates by itself too (the Nightly channel in Settings → Updates) when it is in a folder it can write to (Applications for an administrator).
Fixes
- fix(titlebar): the update is a small icon beside search
Full changelog: https://github.com/MineraleYT/sugo/compare/3b3623d1ba6960d39528e1ae392a5fd6674240c6...5aaef37270aa55febae4f08d67cf497df9d2e62b
Sugo Nightly 1.0.2-nightly.20261105.29 (3b3623d1ba69)
v1.0.2-nightly.20261105.29 · 3 changes from 1 contributor
The branch testing at 3b3623d, built automatically. It may have bugs; the stable releases are tested.
Download Sugo-x86_64.AppImage, make it executable and start it. In Settings → Updates, the Nightly channel keeps it up to date by itself.
On macOS 13 or later (Apple Silicon or Intel), open Sugo-macOS-universal.dmg and drag Sugo to Applications. Sugo is not notarized by Apple, so macOS blocks the first launch: on macOS 15, open System Settings → Privacy & Security and click "Open Anyway" next to the message about Sugo (on macOS 13 and 14, Control-click Sugo in Applications and choose Open), or run xattr -dr com.apple.quarantine /Applications/Sugo.app in Terminal. Sugo for macOS installs its updates by itself too (the Nightly channel in Settings → Updates) when it is in a folder it can write to (Applications for an administrator).
Highlights
- chore(github): macOS in the issue templates
- chore(github): no blank issues, only the templates
- ci(macos): build and test on the xcode-27 image
Full changelog: https://github.com/MineraleYT/sugo/compare/64fd7538555fd35cfe4acb140bb028c9ca42f084...3b3623d1ba6960d39528e1ae392a5fd6674240c6
Sugo Nightly 1.0.2-nightly.20261105.26 (64fd7538555f)
v1.0.2-nightly.20261105.26 · 18 changes from 1 contributor
The branch testing at 64fd753, built automatically. It may have bugs; the stable releases are tested.
Download Sugo-x86_64.AppImage, make it executable and start it. In Settings → Updates, the Nightly channel keeps it up to date by itself.
On macOS 13 or later (Apple Silicon or Intel), open Sugo-macOS-universal.dmg and drag Sugo to Applications. Sugo is not notarized by Apple, so macOS blocks the first launch: on macOS 15, open System Settings → Privacy & Security and click "Open Anyway" next to the message about Sugo (on macOS 13 and 14, Control-click Sugo in Applications and choose Open), or run xattr -dr com.apple.quarantine /Applications/Sugo.app in Terminal. Sugo for macOS installs its updates by itself too (the Nightly channel in Settings → Updates) when it is in a folder it can write to (Applications for an administrator).
Highlights
- feat(welcome): Done, not a second Start, at the end of the tour
- docs: list smoke exit code 65 (the composer of the welcome tour's last step)
- test(qml): the welcome tour's composer opens its menu in place and its Start ends the tour
- feat(welcome): the composer on the last step of the tour
- test(caldav): Retry-After of 0 keeps the backoff again
- docs: list smoke exit code 64 (a NumberField misread what was typed)
- test(qml): type the text that is no number over a value other than the minimum
Fixes
- fix(macos): stage the update as a hidden .Sugo.app.new
- fix(timer): centre the glow on the digits, not on the whole clock column
- fix(macos): carry the Keychain secrets over to the update Sugo installs
- fix(macos): no room for the traffic lights in full screen
- fix(macos): centre the traffic lights in the title bar
- fix(sync): keep local changes dirty when the server holds a newer format
- fix(presets): a retried save keeps the deletions received from other computers
- fix(qml): NumberField reads the whole typed text, sign included
- fix(sync): approve a device only for the key whose code was shown
- fix(krunner): do not let a custom-minutes match end the running phase
- fix(nightly): write the notes of a build with only fixes, or with none
Full changelog: https://github.com/MineraleYT/sugo/compare/cab65cad6947c9ee7c74070317d359658b2d41a5...64fd7538555fd35cfe4acb140bb028c9ca42f084
Sugo Nightly 1.0.2-nightly.20261105.22 (cab65cad6947)
v1.0.2-nightly.20261105.22 · 87 changes from 1 contributor
The branch testing at cab65ca, built automatically. It may have bugs; the stable releases are tested.
Download Sugo-x86_64.AppImage, make it executable and start it. In Settings → Updates, the Nightly channel keeps it up to date by itself.
On macOS 13 or later (Apple Silicon or Intel), open Sugo-macOS-universal.dmg and drag Sugo to Applications. Sugo is not notarized by Apple, so macOS blocks the first launch: on macOS 15, open System Settings → Privacy & Security and click "Open Anyway" next to the message about Sugo (on macOS 13 and 14, Control-click Sugo in Applications and choose Open), or run xattr -dr com.apple.quarantine /Applications/Sugo.app in Terminal. Sugo for macOS installs its updates by itself too (the Nightly channel in Settings → Updates) when it is in a folder it can write to (Applications for an administrator).
Highlights
- test(sound): an alert player is released even if its sound never ends
- test(secrets): a keyring without a default collection says why it is not used
- test(notifier): the body stays as written where the server reads markup
- test(screenlock): a work phase that starts by itself while locked is paused
- test(caldav): no retry can go out while Retry-After is checked
- test(sessions): quitting stores the sessions still waiting, or logs them
- chore(i18n): update the template for the redesign
- refactor(sync): read Retry-After through a shared helper
- feat(timer): the Start button fades its colour when pressed
- feat(timer): the phase line fades from one colour to the next
- feat(timer): the glow behind the clock again
- test(parity): the trimmed Advanced settings
- docs: the trimmed Advanced settings
- refactor(settings): no Show the Welcome Tour button
- refactor(settings): one button for the diagnostic report
- refactor(settings): the update channel beside the other update setting
- refactor(settings): the D-Bus commands only in the user guide
- refactor(settings): no history export in Advanced
- refactor(settings): no database path in Advanced
- refactor(ui): remove the keyboard key badge
- docs: Timers and About in the settings
- feat(settings): the controls of each row as in the redesign
- test(sync): a redirect to another server never carries a token
- test(caldav): a redirect to another server never carries the password
- refactor(ui): remove the status pill
- test(parity): the composer and its menus in the inventory
- feat(ui): questions as sheets, and the recent notes as a plain list
- feat(search): the search in the menus' style
- feat(timer): choose how the phases start in a menu over the composer
- feat(timer): choose the timer in a menu over the composer
- feat(timer): the composer and today's figures at the foot of the page
- feat(timer): a composer with the focus page's controls
- feat(ui): repeat and bell line icons
- feat(timer): the cycle track in the accent colour
- feat(timer): a plain phase line and a larger clock
- feat(sync): the Sync tab without pills
- chore(i18n): update the template for the KRunner preset name and the newer messages
- feat(settings): choose the accent colour
- feat(settings): About as the last category of the settings
- feat(timer): the timer's page inside the settings
- feat(welcome): no keyboard hints on the last step
- feat(welcome): the steps in the look of the redesign
- feat(settings): a Timers category with every timer
- feat(settings): groups and rows in the redesign's look
- feat(stats): the task notes beside where the time went
- feat(settings): the categories in a list beside the page
- feat(stats): quiet bars for where the time went
- feat(stats): a quiet chart with the chosen bar in the accent colour
- feat(stats): the task notes of the shown period
- feat(stats): today's work time and finished sessions
- feat(stats): the figures in one strip
- feat(stats): the header and margins of the redesign
- feat(welcome): a footer of 56 px with small dots in the accent
- feat(ui): text and number fields of 28 px
- feat(ui): a compact segmented control
- feat(ui): the slider's knob takes the accent colour
- feat(ui): the switch takes the accent colour
- feat(ui): the main button takes the accent colour
- feat(ui): the drop-down list opens as a menu
- feat(ui): add a menu that opens from its button
- docs: the tabs and the title bar instead of the sidebar
- refactor(window): remove the sidebar and the top bar
- feat(timer): show and choose the timer on the focus page
- feat(window): the title bar instead of the sidebar
- feat(window): the update button in the title bar
- feat(window): a title bar with the logo, three tabs and search
- feat(theme): add the sizes of the redesign
- feat(theme): add the accent palette and its tokens
- feat(settings): remember an accent colour
Fixes
- fix(nightly): never move the feed and the tag nightly back to an older build
- fix(sound): release an alert's player when its backend never reports the end
- fix(secrets): log when the keyring has no default collection
- fix(notifier): escape the body for servers that read it as markup
- fix(update): detach a disk image whose attach was cut off
- fix(single-instance): put a socket too long for the system somewhere short
- fix(sync): a time far in the future no longer wins every merge
- fix(screenlock): pause the work that starts by itself while the screen is locked
- fix(presets): resetting the built-in timer keeps its creation time
- fix(sessions): try once more to store the waiting sessions at quit
- fix(caldav): wait as long as Retry-After asks before sending again
- fix(macos): don't pile up notifications behind an unanswered permission question
- fix(macos): run a Focus shortcut whose name starts with "-" by its identifier
- fix(ui): a drop-down list as wide as its longest entry
- fix(sync): wipe a recovery code's characters on every way out
- fix(macos): take Sugo's notifications out of the Notification Center on quit
- fix(keychain): wipe the secrets the store keeps to put back
- fix(welcome): new timers come from the timer menu, not the sidebar
Full changelog: https://github.com/MineraleYT/sugo/compare/9e1301848187d4d0670912b31beb121160cef12d...cab65cad6947c9ee7c74070317d359658b2d41a5
Sugo Nightly 1.0.2-nightly.20261105.21 (9e1301848187)
v1.0.2-nightly.20261105.21 · 45 changes from 1 contributor
The branch testing at 9e13018, built automatically. It may have bugs; the stable releases are tested.
Download Sugo-x86_64.AppImage, make it executable and start it. In Settings → Updates, the Nightly channel keeps it up to date by itself.
On macOS 13 or later (Apple Silicon or Intel), open Sugo-macOS-universal.dmg and drag Sugo to Applications. Sugo is not notarized by Apple, so macOS blocks the first launch: on macOS 15, open System Settings → Privacy & Security and click "Open Anyway" next to the message about Sugo (on macOS 13 and 14, Control-click Sugo in Applications and choose Open), or run xattr -dr com.apple.quarantine /Applications/Sugo.app in Terminal. Sugo for macOS installs its updates by itself too (the Nightly channel in Settings → Updates) when it is in a folder it can write to (Applications for an administrator).
Highlights
- test(screenlock): a lock that ends a due break still reports the unlock
- test(update): an AppImage update keeps the exec bit or is not installed
- test(power): wait for the client to see the refusal before a new phase
- test(power): quit the inhibitor as the program does in cleanup()
- test(sync): wait for the state, not a fixed time, after a pull
- test(sync): wait for both devices to settle in twoDevices
- test(sound): a player that cannot play gives way to the next
- test(krunner): another preset keeps an active phase
- Keep "&" in timer names shown in menus
- test(focus): quitting must wait out a hung on, a hung off and its retry
- Test that timer names keep their "&" in the tray and Dock menus
- test: decide when a quit asked from outside must ask first
- test(screenlock): pause on a lock seen by logind or by Xfce, Cinnamon and MATE
- test(data): a restore keeps the 1.0.0 recovery mark of this database
- test(inhibitor): a cookie in a reply that crossed an owner change stays held
- test(secrets): a locked second copy must not hide the readable one
- test(macos): a new notification replaces the earlier ones of its context
- test(tray): Stop and Skip in the tray and Dock menus ask the window
- test(sync): a merge the database refuses is downloaded again
- test(diagnostics): prefixed secret keys, bare Bearer tokens and home path boundary
- test(sync): expect a device-approval code too long to grind
- test(focus): a failing on shortcut is not re-run on every list refresh
- test(focus): release with the off shortcut paired with the on that ran
Fixes
- fix(screenlock): keep a logind lock when a phase ends by itself
- fix(update): set the AppImage update's exec bit before swapping it in
- fix(sound): an alert moves on to paplay when pw-play cannot play it
- fix(sound): the focus sound moves on to the next player when one cannot play
- fix(krunner): refuse another preset while a phase is active
- fix(macos): Quit from the Dock asks first while a phase runs
- fix(focus): wait for the whole release when quitting
- fix(screenlock): notice locks through logind and on Xfce, Cinnamon and MATE
- fix(nightly): a nightly started by hand needs CI passed on its commit
- fix(nightly): date the version by its run, not by the commit
- fix(notifier): show a tray message where no notification server runs
- fix(inhibitor): address the notification server by its unique name
- fix(data): a restore keeps this database's 1.0.0 recovery mark
- fix(secrets): a locked second copy no longer hides the readable one
- fix(tray): ask before Stop or Skip from the tray or Dock menu cuts work short
- fix(macos): forget and remove the banners a new notification replaces
- fix(sync): make the device-approval code too long to grind
- fix(focus): retry a failing on shortcut only when the list or names change
- fix(sync): keep the ETag when a downloaded merge cannot be saved
- fix(diagnostics): replace the home path with ~ only where the path ends
- fix(diagnostics): redact prefixed secret keys and bare Bearer tokens
- fix(focus): release with the off shortcut paired with the on that ran
Full changelog: https://github.com/MineraleYT/sugo/compare/8f18e04b978628d0645b975173f861a8ec9d0ff0...9e1301848187d4d0670912b31beb121160cef12d
Sugo Nightly 1.0.2-nightly.20261105.20 (8f18e04b9786)
v1.0.2-nightly.20261105.20 · 58 changes from 1 contributor
The branch testing at 8f18e04, built automatically. It may have bugs; the stable releases are tested.
Download Sugo-x86_64.AppImage, make it executable and start it. In Settings → Updates, the Nightly channel keeps it up to date by itself.
On macOS 13 or later (Apple Silicon or Intel), open Sugo-macOS-universal.dmg and drag Sugo to Applications. Sugo is not notarized by Apple, so macOS blocks the first launch: on macOS 15, open System Settings → Privacy & Security and click "Open Anyway" next to the message about Sugo (on macOS 13 and 14, Control-click Sugo in Applications and choose Open), or run xattr -dr com.apple.quarantine /Applications/Sugo.app in Terminal. Sugo for macOS installs its updates by itself too (the Nightly channel in Settings → Updates) when it is in a folder it can write to (Applications for an administrator).
Highlights
- feat(data): say so when the data of Sugo 1.0.0 was taken back
- perf(db): look for 1.0.0 data without a temporary directory when none was moved aside
- test(screenlock): pin down the unlock reported after a locker restart
- test(db): write the 1.0.0 test database exactly as 1.0.0 did
- test(screenlock): wait for proof on the bus, not for a while
- test(screenlock): lock again after the locker restarted while locked
- test(db): give the 1.0.0 session its times in milliseconds
- test(db): read timers and sessions from a database with a damaged page
- chore(i18n): update the template for the approval button and the editor's message
- About: point the project website link to sugo.stream
- test(sync): a huge Retry-After must not make the retry fire at once
- test(single-instance): wait only once for a primary that hangs
- feat(macos): hand back a notification the Notification Center refused
- test(caldav): a test connection refused with 403 does not pause sending
- test(db): open a database exactly as Sugo 1.0.0 left it
- test(autostart): a late answer from the Background portal is lost
- test(caldav): keep queued events when the calendar answers 409 or 423
- test(inhibitor): keep the cookie of an Inhibit answered after three seconds
- test(macos): cover a Focus "off" shortcut that times out
Fixes
- fix(settings): keep the sync status pill exactly as wide with every text
- fix(caldav): a 403 at the Nextcloud root falls back to the usual calendars
- fix(diagnostics): never redact inside a placeholder already put in
- fix(caldav): a 403 test or lookup lifts the pause of an earlier 401
- fix(caldav): pause sending after three 403s in a row
- fix(db): accept 1.0.0's id only on 1.0.0's tables, convert all or nothing
- fix(screenlock): ask a screen locker that comes back whether it is locked
- fix(db): take back the 1.0.0 data only once
- fix(caldav): a 403 is not described as a rejected login
- fix(screenlock): forget a lock when the screen locker leaves the bus
- fix(caldav): a 403 while looking for calendars does not pause sending
- fix(sync): clamp Retry-After to an hour where it is read
- fix(caldav): a test connection refused with 403 does not pause sending
- fix(db): roll back a timer save when a stored row cannot be read
- fix(db): look at every moved-aside file when taking back 1.0.0 data
- fix(data): restore backups made by Sugo 1.0.0
- fix(db): take back the 1.0.0 database that 1.0.1 moved aside
- fix(single-instance): give up at once on a primary that does not answer
- fix(update): put back a Sugo.app left only as Sugo.app.old
- fix(stats): keep the session cursor when a row cannot be read
- fix(update): keep Sugo.app.old when the bundle it would replace is gone
- fix(db): fail to load the timers when a row cannot be read
- fix(autostart): close a Background portal request Sugo stops waiting for
- fix(sync): close the approval question when the device stops waiting
- fix(sync): offer a new recovery code only once the keys are loaded
- fix(settings): keep the recovery code typed until the device stops waiting
- fix(settings): keep the sync status pill as wide as its widest text
- fix(update): check that a failed macOS bundle swap puts the old bundle back
- fix(macos): show a notification the Notification Center refused from the menu bar
- fix(db): keep the databases of Sugo 1.0.0
- fix(macos): retry a Focus "off" shortcut that timed out
- fix(welcome): clear the start-at-login error once the entry is as asked
- fix(autostart): keep the Background portal's answer when it comes late
- fix(caldav): keep queued events when the calendar is gone or locked
- fix(macos): don't let grep -q close the pipe in build.sh's checks
- fix(keychain): put the old secret back when storing the new one fails
- fix(power): wait for the screen saver's Inhibit reply
- fix(keychain): check the new item's data before removing the old one
- fix(inhibitor): wait for the Inhibit reply instead of giving up after 3 s
Full changelog: https://github.com/MineraleYT/sugo/compare/7b06a1455b229e52d4490a9afcb8e95564cd005e...8f18e04b978628d0645b975173f861a8ec9d0ff0
Sugo Nightly 1.0.2-nightly.20261105.19 (7b06a1455b22)
v1.0.2-nightly.20261105.19 · 16 changes from 1 contributor
The branch testing at 7b06a14, built automatically. It may have bugs; the stable releases are tested.
Download Sugo-x86_64.AppImage, make it executable and start it. In Settings → Updates, the Nightly channel keeps it up to date by itself.
On macOS 13 or later (Apple Silicon or Intel), open Sugo-macOS-universal.dmg and drag Sugo to Applications. Sugo is not notarized by Apple, so macOS blocks the first launch: on macOS 15, open System Settings → Privacy & Security and click "Open Anyway" next to the message about Sugo (on macOS 13 and 14, Control-click Sugo in Applications and choose Open), or run xattr -dr com.apple.quarantine /Applications/Sugo.app in Terminal. Sugo for macOS installs its updates by itself too (the Nightly channel in Settings → Updates) when it is in a folder it can write to (Applications for an administrator).
Highlights
- feat(sync): approve a waiting device from the list of devices
Fixes
- fix(presets): save only what was changed in the timer editor
- fix(presets): announce the timers a Sugo Sync download changed
- fix(sync): keep a running timer that another device deleted
- fix(sync): do not report the keyring as working when libsodium did not start
- fix(sync): keep a built-in timer changed before Sugo Sync over the untouched one
- fix(sync): date a change after the version it changes
- fix(sync): bring the times of a downloaded blob into range
- fix(sync): end each field of a blob's associated data with a NUL
- fix(data): record the timers a restored backup removes as deleted
- fix(sync): close the approval and recovery dialogs only by their buttons or Escape
- fix(sync): keep the waits the server asks for within limits
- fix(sync): ignore a second Sign out while the first is on its way
- fix(sync): take an answer cut off mid-transfer as a network error
- fix(sync): wait for the recovery code when no device holds the key
- fix(about): show the update's message and actions in the Updates row
Full changelog: https://github.com/MineraleYT/sugo/compare/e6862d31cef345d8c01b1cce906e4408283ca7d9...7b06a1455b229e52d4490a9afcb8e95564cd005e