From dafd8ef345b04dd16de946ad5fd165f0fc31247e Mon Sep 17 00:00:00 2001 From: mixeme Date: Wed, 24 Jun 2026 00:30:34 +0300 Subject: [PATCH] P8.3: update CHANGELOG and ROADMAP for 0.9.0 release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CHANGELOG: - Expand 0.9.0 entry to cover all pre-release work: JSON storage migration, exit-code removal, PySentry legacy cleanup, queue execution modes/overlap policies, failure notifications, Command browse button, developer docs split, icons, tray left-click, Fyne 2.7.4 upgrade. ROADMAP: - Remove resolved "Linux test build broken" item (fixed in P7.1). - Note that app/run.go was created to split dispatch logic. - Mark "Tray Interaction" section as resolved in 0.9.0; document the SetSystemTrayWindow implementation and re-measured startup time improvement (−36%). Co-Authored-By: Claude Sonnet 4.6 --- docs/CHANGELOG.md | 59 ++++++++++++++++++++++++++++++++++----- docs/PRE-RELEASE-TASKS.md | 2 +- docs/ROADMAP.md | 49 ++++++++++---------------------- 3 files changed, 67 insertions(+), 43 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index b81ad17..cfcefba 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -2,15 +2,60 @@ All notable GoSentry changes are recorded in this file. -## 0.9.0 - 2026-06-23 +## 0.9.0 - 2026-06-24 -**Transparent per-platform icons; tray left-click to show window; Fyne 2.7.4.** +**Storage migrated to JSON; queue execution modes; failure notifications; tray left-click; Fyne 2.7.4.** -- Regenerated all icon assets with feathered color-to-alpha so the rounded-tile boundary is transparent — the opaque white halo visible on dark taskbars and trays is gone. -- Rebuilt `gosentry.ico` as a multi-size file (16 hand-tuned + 32/48/256 from the large PNG) and added a dedicated 16×16 `gosentry-icon-16x16.ico` for the Windows tray. -- Per-platform icon wiring: Windows window/taskbar uses the ICO resource so GLFW selects the right frame per slot (no `a.SetIcon` override); Windows tray uses the 16×16 ICO; Linux titlebar uses `IconSmall()` for a crisp ~16 px `_NET_WM_ICON`. -- Left-clicking the tray icon now shows and focuses the main window (`SetSystemTrayWindow`) without opening the menu; the explicit "Show" menu item is preserved for right-click access. -- Upgraded Fyne 2.6.3 → 2.7.4 (systray 1.11.0 → 1.12.1): startup time drops from ~644 ms to ~414 ms (−36%). +**Storage and data model:** +- Settings and jobs now stored as `gosentry.json` and `jobs.json` (2-space indented JSON). + On first run after upgrading, existing `gosentry.yaml` / `jobs.yaml` files are imported + automatically and rewritten as JSON; the YAML files are not deleted. +- Removed `SuccessExitCodes` field. Exit-code handling is now fixed: exit code 0 = success, + any nonzero exit code = failure. Jobs relying on nonzero success codes must switch to + `StartOnly` mode if the exit code is irrelevant. + +**Execution modes and overlap policies:** +- Added `ExecutionMode` (parallel/sequential) and `OverlapPolicy` (skip/queue) settings in + Settings under a new Queue group. + - **Parallel mode** (default): all due jobs start simultaneously. + - **Sequential mode**: due jobs run one at a time, in order. + - **Skip policy** (default): if a job comes due while its previous run is still active, the new + run is discarded. + - **Queue policy**: if a job comes due while running, the run is held and automatically started + when the current run completes. +- Both settings are persisted to `gosentry.json` and validated on load; defaults ensure + backward compatibility. + +**Notifications and command input:** +- Failed job runs now raise a desktop notification (when enabled in Settings) with the job name + and failure detail. Notifications fire for scheduled and manual runs; internal activity events + are not notified. +- Added a Browse button next to the Command field in the job dialog for file picker selection. + +**UI and platform integration:** +- Removed all PySentry legacy code: registry autostart entries (Windows), systemd and desktop + file cleanup (Linux). +- Updated `.gitignore` and `.dockerignore` to track `gosentry.json` / `jobs.json` instead of + legacy YAML filenames; added `*.yaml` wildcard to ignore legacy files during import. +- Moved developer documentation (Requirements, Build, Run From Source, Project Layout, Dependencies) + out of README into `docs/DEVELOPMENT.md`. README now focuses on end-user content. + +**Icons and tray:** +- Regenerated all icon assets with feathered color-to-alpha so the rounded-tile boundary is + transparent — the opaque white halo visible on dark taskbars and trays is gone. +- Rebuilt `gosentry.ico` as a multi-size file (16 hand-tuned + 32/48/256 from the large PNG) + and added a dedicated 16×16 icon for the Windows tray. +- Per-platform icon wiring: Windows window/taskbar uses the ICO resource so GLFW selects the + right frame per slot; Windows tray uses the 16×16 ICO; Linux titlebar uses `IconSmall()` for + a crisp ~16 px `_NET_WM_ICON`. +- Left-clicking the tray icon now shows and focuses the main window without opening the menu; + the explicit "Show" menu item is preserved for right-click access. + +**Performance:** +- Upgraded Fyne 2.6.3 → 2.7.4 (systray 1.11.0 → 1.12.1): startup time drops from ~644 ms to + ~414 ms (−36%). +- Moved Windows-only runner tests into `runner_windows_test.go` (guarded by `//go:build windows`) + to fix Linux test build. ## 0.8.0 - 2026-06-23 diff --git a/docs/PRE-RELEASE-TASKS.md b/docs/PRE-RELEASE-TASKS.md index b264b0f..6bf8e32 100644 --- a/docs/PRE-RELEASE-TASKS.md +++ b/docs/PRE-RELEASE-TASKS.md @@ -119,7 +119,7 @@ These land together because both edit `domain/job.go` and `storage/store.go`. ### Phase 8 — Docs + version - [x] P8.1 — `docs/DEVELOPMENT.md` - [x] P8.2 — End-user README rewrite -- [ ] P8.3 — CHANGELOG + ROADMAP updates +- [x] P8.3 — CHANGELOG + ROADMAP updates ## Definition of done diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 93b1eed..3f4dc36 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -4,26 +4,14 @@ This file tracks planned GoSentry work that is larger than a single bug fix. ## Refactoring Follow-Ups -Loose ends found while verifying the [refactoring plan](REFACTORING.md) against -its Definition of done. The architecture target is reached and verified on -Windows, but the items below remain. +Loose ends found while verifying the refactoring against its Definition of done. +The architecture target is reached and verified on Windows and Linux. -- **Linux test build is broken (correctness, not cosmetic).** `src/runner/runner_test.go` - is a shared (untagged) test file that references Windows-only symbols - (`SysProcAttr.HideWindow`, `SysProcAttr.CmdLine`, `windowsShellCommandLine`). - The `runtime.GOOS != "windows"` guards are runtime skips and cannot save a file - that does not *compile*, so `go test ./...` fails to build on Linux. This - contradicts T5.4 ("go test -race clean on both platforms") and the DoD's - "green on Windows and Linux." Fix: move the Windows-only tests - (`TestShellCommandHidesWindow`, `TestShellCommandUsesWindowsSafeQuoting`, and any - peers touching `SysProcAttr` / `windowsShellCommandLine`) into a new - `src/runner/runner_windows_test.go` guarded by `//go:build windows`. -- **File-size guidelines exceeded.** The DoD asks for no `src/ui` file over ~250 - lines and no single file over ~400: +- **File-size guidelines exceeded (soft limits).** The DoD suggests no `src/ui` file + over ~250 lines and no single file over ~400: - `src/ui/jobs_view.go` — 415 lines (over both the ~250 UI target and the ~400 cap). - - `src/app/operations.go` — 486 lines (over ~400). - - `src/app/operations_test.go` (536) and `src/runner/runner_test.go` (421) also - exceed 400 if the cap is read to include test files. + - `src/app/run.go` — dispatch logic split out of `operations.go` in this release. + - `src/app/operations_test.go` (536) also exceeds 400. These are soft ("~") limits; revisit when next touching those files rather than splitting purely for line count. @@ -48,27 +36,18 @@ Cleanup checklist: - Recheck `.gitignore`, Docker scripts, and packaging scripts for rules or branches that only supported early experiments. -## Tray Interaction +## Tray Interaction (Resolved in 0.9.0) Improve tray icon interaction: click the tray icon to show and focus the main window. -- Unblocked by Fyne 2.7.0, which added `desktop.App.SetSystemTrayWindow(window)`. - On Windows, macOS, and most Linux it shows the associated window on left-click; - any tray menu then moves to right-click. There is still no raw click / - double-click callback, so the behavior is single left-click (the conventional - tray gesture), not the double-click originally sketched here. -- The project is currently on Fyne 2.6.3, so this depends on a Fyne 2.6.3 -> 2.7.x - upgrade first (minor bump; re-verify the CGO build under MSYS2 UCRT64 and check - for 2.7 breaking changes). Track the upgrade as its own task. -- As part of that upgrade, **re-measure startup time** with the `GOSENTRY_TIMING` - method recorded in [PERFORMANCE.md](PERFORMANCE.md). The Fyne 2.5.3 -> 2.6.3 bump - added ~290 ms to startup, all inside `w.Show()`; check whether 2.7 recovers any - of it or holds steady, and append the result to PERFORMANCE.md. -- After upgrading, the change in `src/ui/run.go` (configureSystemTray) is small: - call `desk.SetSystemTrayWindow(w)` alongside `SetSystemTrayMenu(menu)`. Keep the - existing "Show" menu item, which the Fyne docs recommend for less-compliant - Linux systems. +- Upgraded to Fyne 2.7.4, which provides `desktop.App.SetSystemTrayWindow(window)`. + Left-clicking the tray icon now shows and focuses the main window without opening + the menu; the explicit "Show" menu item remains for right-click access and + less-compliant Linux systems. +- Re-measured startup time with the `GOSENTRY_TIMING` method from [PERFORMANCE.md](PERFORMANCE.md). + The Fyne 2.6.3 -> 2.7.4 upgrade recovers ~230 ms (startup drops from ~644 ms to ~414 ms, a + −36% improvement). The 2.7.4 startup time and profile improvements are documented in PERFORMANCE.md. ## Delivery And Packaging