P8.3: update CHANGELOG and ROADMAP for 0.9.0 release

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 <noreply@anthropic.com>
This commit is contained in:
mixeme
2026-06-24 00:30:34 +03:00
parent 2e54d088bf
commit dafd8ef345
3 changed files with 67 additions and 43 deletions
+52 -7
View File
@@ -2,15 +2,60 @@
All notable GoSentry changes are recorded in this file. 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. **Storage and data model:**
- 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. - Settings and jobs now stored as `gosentry.json` and `jobs.json` (2-space indented JSON).
- 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`. On first run after upgrading, existing `gosentry.yaml` / `jobs.yaml` files are imported
- 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. automatically and rewritten as JSON; the YAML files are not deleted.
- 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%). - 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 ## 0.8.0 - 2026-06-23
+1 -1
View File
@@ -119,7 +119,7 @@ These land together because both edit `domain/job.go` and `storage/store.go`.
### Phase 8 — Docs + version ### Phase 8 — Docs + version
- [x] P8.1 — `docs/DEVELOPMENT.md` - [x] P8.1 — `docs/DEVELOPMENT.md`
- [x] P8.2 — End-user README rewrite - [x] P8.2 — End-user README rewrite
- [ ] P8.3 — CHANGELOG + ROADMAP updates - [x] P8.3 — CHANGELOG + ROADMAP updates
## Definition of done ## Definition of done
+14 -35
View File
@@ -4,26 +4,14 @@ This file tracks planned GoSentry work that is larger than a single bug fix.
## Refactoring Follow-Ups ## Refactoring Follow-Ups
Loose ends found while verifying the [refactoring plan](REFACTORING.md) against Loose ends found while verifying the refactoring against its Definition of done.
its Definition of done. The architecture target is reached and verified on The architecture target is reached and verified on Windows and Linux.
Windows, but the items below remain.
- **Linux test build is broken (correctness, not cosmetic).** `src/runner/runner_test.go` - **File-size guidelines exceeded (soft limits).** The DoD suggests no `src/ui` file
is a shared (untagged) test file that references Windows-only symbols over ~250 lines and no single file over ~400:
(`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:
- `src/ui/jobs_view.go` — 415 lines (over both the ~250 UI target and the ~400 cap). - `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/run.go` — dispatch logic split out of `operations.go` in this release.
- `src/app/operations_test.go` (536) and `src/runner/runner_test.go` (421) also - `src/app/operations_test.go` (536) also exceeds 400.
exceed 400 if the cap is read to include test files.
These are soft ("~") limits; revisit when next touching those files rather than These are soft ("~") limits; revisit when next touching those files rather than
splitting purely for line count. splitting purely for line count.
@@ -48,27 +36,18 @@ Cleanup checklist:
- Recheck `.gitignore`, Docker scripts, and packaging scripts for rules or - Recheck `.gitignore`, Docker scripts, and packaging scripts for rules or
branches that only supported early experiments. 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 Improve tray icon interaction: click the tray icon to show and focus the main
window. window.
- Unblocked by Fyne 2.7.0, which added `desktop.App.SetSystemTrayWindow(window)`. - Upgraded to Fyne 2.7.4, which provides `desktop.App.SetSystemTrayWindow(window)`.
On Windows, macOS, and most Linux it shows the associated window on left-click; Left-clicking the tray icon now shows and focuses the main window without opening
any tray menu then moves to right-click. There is still no raw click / the menu; the explicit "Show" menu item remains for right-click access and
double-click callback, so the behavior is single left-click (the conventional less-compliant Linux systems.
tray gesture), not the double-click originally sketched here. - Re-measured startup time with the `GOSENTRY_TIMING` method from [PERFORMANCE.md](PERFORMANCE.md).
- The project is currently on Fyne 2.6.3, so this depends on a Fyne 2.6.3 -> 2.7.x The Fyne 2.6.3 -> 2.7.4 upgrade recovers ~230 ms (startup drops from ~644 ms to ~414 ms, a
upgrade first (minor bump; re-verify the CGO build under MSYS2 UCRT64 and check 36% improvement). The 2.7.4 startup time and profile improvements are documented in PERFORMANCE.md.
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.
## Delivery And Packaging ## Delivery And Packaging