diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index c900aa5..410a0f4 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -5,6 +5,37 @@ Completed work is recorded in [CHANGELOG.md](CHANGELOG.md), not here. ## Open Items +### Update check from GitHub releases + +Releases are published as GitHub Releases (tags like `v0.12.0`, built by +`.github/workflows/release.yml`), but the app never tells the user a newer +version exists — they have to check the releases page by hand. + +Add an update check that queries the GitHub Releases API +(`GET /repos///releases/latest`) for the latest published tag, +strips the leading `v`, and compares it against `app.Version`. When a newer +version is available, surface it non-intrusively — an "Update available" +line in Settings (next to the existing version/build info) with a hyperlink +to the release page, not a modal on launch. + +Design notes / open questions: + +- *Opt-in and offline-safe.* The check makes a network request, so it must be + off by default (or clearly consented) and never block startup. Failures + (offline, rate-limited, API change) should be silent — no error dialogs for a + best-effort convenience feature. +- *Version comparison.* Compare semantic versions, not strings, so `0.12.0` + reads as newer than `0.9.0`. A tiny semver comparator in `app` (or a small + dependency) avoids lexical bugs. +- *Where the check lives.* Keep it in the `app` layer behind the Service so the + UI only renders the result, and cache the last check so opening Settings + repeatedly does not spam the API (unauthenticated GitHub allows 60 req/h). +- *Repo coordinates.* The primary remote is Gitea; the GitHub owner/repo used + for releases must be wired in explicitly (constant or build-time value) rather + than derived from `origin`. +- *No auto-download.* Scope is detection and notification only; installing the + update stays a manual click-through to the release page. + ### Window size persistence *(frozen)* Window size is currently **not** saved on quit or close. Saving was disabled