8c93f354aa
- Bump version: 0.3.6 → 0.4.0 (minor version for architectural milestone). - Update CHANGELOG with Phase 5 completion summary and follow-up items. - Add ROADMAP section for refactoring follow-ups (Linux test build, file sizes). The refactoring target is now reached: - Service layer owns all state as sole writer - UI is thin Fyne view (uses fyne.Do for thread safety) - Core engines are stateless and injectable - Domain types are pure (no yaml:"-" noise) - All tests pass with -race on Windows - Full module builds and vets clean Known post-release work: 1. Linux test build broken (runner_test.go needs //go:build windows tag) 2. File-size guidelines exceeded in operations.go and jobs_view.go Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
9.3 KiB
9.3 KiB
Changelog
All notable GoSentry changes are recorded in this file.
0.4.0 - 2026-06-22
Architectural milestone: completed refactoring and reached target architecture.
- Completed Phase 5 refactoring: hardening, testing, and documentation.
- Surface all save/cleanup errors from service and storage; no more silently swallowed
_ = ...on persistence. - Introduced
platform/autostart.Managerinterface with per-platform implementations (Windows, Linux, other); inject into service instead of calling package functions. - Filled test gaps: folder filtering, log cleanup (count and age), settings persistence and migration, concurrent run prevention.
- Verified
go test -race ./...passes on Windows; no data races in the refactored codebase. - Updated
docs/ARCHITECTURE.md,docs/TESTS.md, and README with final package structure and build/test instructions.
- Surface all save/cleanup errors from service and storage; no more silently swallowed
- Refactoring target reached: Service layer owns all state and is the sole writer; UI is a thin view marshaling updates via
fyne.Do; core engines are stateless and injectable; domain layer is pure with no test noise. - Known follow-ups recorded in
ROADMAP.md:- Linux test build is currently broken (Windows-only test symbols need
//go:build windows); will fix separately. - File-size soft limits exceeded in a few places; revisit when next editing those files.
- Linux test build is currently broken (Windows-only test symbols need
- No observable behavior changes.
0.3.6 - 2026-06-22
- Completed Phase 4 refactoring: carved up the GUI into focused, testable components.
- Renamed
src/gui→src/uiand split monolithicapp.gointorun.go(lifecycle) andmainwindow.go(view construction). - Extracted view components into separate files:
jobs_view.go,job_dialog.go,history_view.go,settings_view.go. - Extracted platform wiring into separate files:
tray.go,singleinstance.go,layout.go. - Removed forbidden platform imports (autostart, desktop, paths) from
src/ui; all platform concerns now flow throughapp.Service. - Upgraded Fyne from v2.5.3 to v2.6.3 to enable
fyne.Dofor cross-thread widget marshaling (resolves concurrency issue #4).
- Renamed
- Added
docs/PERFORMANCE.mdwith measured startup-time analysis: the ~290ms increase from Phase 4 is entirely the Fyne 2.6.3 upgrade'sw.Show()cost, not the restructuring. - Added
docs/PERFORMANCE.mdand wired post-Fyne-2.7.x re-check intoROADMAP.md. - No observable behavior changes; continued internal refactoring toward separated concerns and testability.
0.3.5 - 2026-06-19
- Completed Phase 3 refactoring: application service and state management.
- Added
app.Serviceas the single owner of application state (job registry, settings, run history). - Implemented event-driven observer dispatch: Services can emit events (JobAdded, JobChanged, etc.) to decouple state changes from UI updates.
- Added
app.Clockinterface for testable time-dependent behavior in scheduler and run tracking. - Converted scheduler to drive app.Service instead of directly managing domain state.
- Created
app.Formathelpers for display rendering (job names, schedule summaries, run times). - Added comprehensive unit tests for app.Service and supporting types.
- Added
- No observable behavior changes; continued internal refactoring toward separated concerns and testability.
0.3.4 - 2026-06-19
- Completed Phase 2 refactoring: domain cleanup and value object extraction.
- Split durable job configuration (
domain.Job) from transient execution state (domain.JobRuntime), keyed by job ID. - Added
domain.Schedulevalue object withParse,Validate, andNext(time.Time)methods for cron/interval parsing. - Migrated scheduler to parse schedules once at load/edit instead of per tick, removing duplicated parsing.
- Made
RunJobpure: runner no longer mutates jobs, returning onlyRunRecordfor the caller to fold into runtime state. - Simplified
storage.normalizeJobsto touch only durable configuration; runtime initialization moved todomain.NewRuntime.
- Split durable job configuration (
- No observable behavior changes; continued internal refactoring toward separated concerns.
0.3.3 - 2026-06-18
- Completed Phase 1 refactoring: split the flat
src/corepackage into specialized, focused packages:src/domainfor pure types (Job, RunRecord, Config)src/storagefor persistence (Load/Save, Paths, YAML helpers)src/runnerfor job execution (RunJob orchestration, logging, exit codes)src/schedulerfor timing loopsrc/platform/winprocfor cross-platform hidden window configurationsrc/platform/autostartfor system autostart integrationsrc/platform/desktopfor desktop environment integrationsrc/appfor application-level code (Version, future Service layer)
- No observable behavior changes; internal structure improvements only.
0.3.1 - 2026-06-17
- Changed startup timing in History to measure until the main window is actually shown instead of stopping during UI construction.
- Added a separate startup History message for autostart launches that begin hidden in the tray.
0.3.0 - 2026-06-17
- Renamed the project from PySentry to GoSentry across the GUI, module path, build scripts, generated artifacts, desktop integration, and documentation.
- Renamed the command package to
cmd/gosentryand Windows resource script topackaging/windows/gosentry.rc. - Renamed portable application settings from
pysentry.yamltogosentry.yaml, while keeping one-time read compatibility for existingpysentry.yamlfiles. - Renamed build artifacts from
pysentry-*togosentry-*. - Updated autostart and Linux desktop integration to use GoSentry names while cleaning up older PySentry autostart entries.
0.2.5 - 2026-06-16
- Stabilized the Jobs details panel so long selected-job fields do not resize the right pane or application window.
- Switched Windows autostart from
HKCU Runentries to a Startup folder shortcut, fixing executable paths that contain spaces. - Added
--start-in-trayautostart launches for Windows and Linux so sign-in startup does not open the main window. - Added Windows shortcut tests and Linux autostart desktop-entry tests for the new startup-in-tray behavior.
- Updated autostart documentation and architecture notes for the Startup shortcut and XDG desktop-entry behavior.
- Documented the Windows VirtualBox/RDP OpenGL startup failure and the Mesa software OpenGL workaround.
0.2.4 - 2026-06-16
- Prevented repeated application launches by forwarding a second start attempt to the already running instance.
- A second instance now asks the first instance to show and focus the existing window, then exits.
0.2.3 - 2026-06-15
- Changed History to use chronological ordering with new records appended at the bottom.
- Replaced the History list with a compact table.
- Added Time column sorting in both ascending and descending directions.
- Made History table columns user-resizable through the native Fyne table header.
- Shortened the Log column display to file names instead of full paths.
- Unified UI event timestamps with command run timestamps.
0.2.2 - 2026-06-15
- Added Linux desktop integration that installs a user-level
.desktopfile and icon so taskbars can match the running window to the GoSentry icon. - Added the installed icon path to Linux autostart desktop entries when available.
- Added
ARCHITECTURE.mdwith a component interaction diagram and moved project documentation underdocs/. - Adjusted the Mermaid architecture diagram to avoid line-break syntax that breaks rendering in Gitea.
- Stabilized the Jobs tab pane layout so switching jobs does not move the divider.
- Added startup timing to the History tab.
0.2.1 - 2026-06-15
- Fixed Docker release scripts so container builds keep Go in
PATH. - Disabled Go VCS stamping for Docker release builds to avoid failures when
.gitmetadata is unavailable inside the container. - Made Docker release builds write
dist/artifacts with the current user's UID/GID instead of root ownership. - Added
ROADMAP.mdwith planned delivery formats and packaging priorities. - Cleaned
.gitignorefor the current Go/Fyne project and kept the local_gsdata_/rule. - Added README links to official Go/Fyne sites and source repositories useful for dependency mirroring.
- Documented Windows dependency installation steps for Go and MSYS2 UCRT64 GCC.
0.2.0 - 2026-06-15
- Added working autostart support with status diagnostics in Settings.
- Switched Linux autostart to XDG Autostart
.desktopfiles and clean up the legacy user systemd unit. - Fixed Windows autostart status detection by parsing
HKCU Runvalues and comparing executable paths reliably. - Added background job execution so the GUI does not block while commands run.
- Suppressed Windows console windows for scheduled and manual command runs.
- Added application version display in the window title, Settings, and build artifact names.
- Moved release artifact commands from
Dockerfileintoscripts/build-release-linux.shwith interactive target selection. - Added release build targets for Linux amd64, Linux arm64, and Windows amd64.
- Added README dependency installation notes and official Go/Fyne links.
0.1.0 - 2026-06-14
- Added the initial Fyne desktop GUI.
- Added YAML settings and single-file YAML job storage.
- Added
@everyand standard 5-field cron schedules. - Added manual and scheduled command runs with per-run log files.
- Added job folders, history, global pause, and Windows tray support.
- Added Windows and Linux build helpers.