Files
gosentry/docs/PRE-RELEASE-TASKS.md
T
mixeme 94a8dcc62a P3.4: Add Queue group to settings view
Add Execution mode and Overlap policy widget.Select controls in
ui/settings_view.go under a new Queue section group, between the
Application and Storage sections. Both selects are primed from the
current config on open and their selected values are written back into
the config struct on save, passing through the existing UpdateSettings
validation path.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-23 07:57:51 +03:00

8.3 KiB

Pre-Release Milestone — Task List

Execution checklist for PRE-RELEASE-PLAN.md. Each task names the recommended model and thinking depth. Model: haiku / sonnet / opus. Thinking: low / medium / high. Section numbers (§) reference the plan.

Build/test note: the GUI needs CGO + MSYS2 UCRT64; the default Bash env has CGO off. Use scripts\test.bat / scripts\build-windows.bat on Windows.

Phase 1 — Storage JSON + exit-code removal (§1, §10)

These land together because both edit domain/job.go and storage/store.go.

Task Description Model Thinking
P1.1 domain/job.go, domain/config.go, domain.JobsFile: swap yaml:"…" tags for json:"…", keep omitempty. sonnet low
P1.2 storage/store.go: replace writeYAML with writeJSON (json.MarshalIndent 2-space); switch the two Unmarshal calls to json. opus high
P1.3 storage/paths.go: rename files to gosentry.json / jobs.json; remove LegacyConfigFileName; add legacyYAMLConfigFileName / legacyYAMLJobsFileName. sonnet medium
P1.4 One-time YAML import in store.go: read gosentry.yaml / jobs.yaml via private yaml-tagged shadow structs when JSON is absent; rely on existing SaveConfig/SaveJobs to rewrite as JSON. opus high
P1.5 Drop SuccessExitCodes field; delete runner/exitcodes.go; simplify runStateDetail (0 = OK, non-zero = Failed); strip the field from runner/logfile.go, app/format.go, app/operations.go (runningOutput, normalizeJob), storage/store.go (normalizeJobs). sonnet medium
P1.6 Update tests/docs: storage/store_test.go (JSON write helper + YAML-import test, drop pysentry-migration test), remove exit-code tests in runner/runner_test.go + app/format_test.go, update docs/TESTS.md. sonnet medium

Phase 2 — PySentry legacy removal (§7)

Task Description Model Thinking
P2.1 autostart_windows.go: remove legacyAutostartName, cleanupLegacyRegistryAutostart, legacyRegistryAutostartExists, parseRegistryRunValue, and their use in Set/Status; drop readShortcutTarget if unused. sonnet medium
P2.2 autostart_linux.go: remove legacy systemd + desktop cleanup functions and their Set/Status calls. sonnet medium
P2.3 Delete the legacy tests in autostart_windows_test.go / autostart_linux_test.go. haiku low
P2.4 .gitignore / .dockerignore: drop pysentry.yaml; add gosentry.json / jobs.json; keep *.yaml ignores for the import window. haiku low

Phase 3 — Task-queue model + settings (§2, §9 split)

Task Description Model Thinking
P3.1 domain/config.go: add ExecutionMode / OverlapPolicy (+ JSON tags) and exported constants; defaults (parallel / skip) in loadOrCreateConfig and validateConfig. domain/runtime.go: add Pending bool. sonnet medium
P3.2 Create src/app/run.go; move RunDue, RunNow, startRunLocked, executeRun and helpers out of operations.go. sonnet medium
P3.3 Rework dispatch: startRunLocked advances NextDue instead of zeroing it; RunDue scans all due jobs and applies execution mode (parallel/sequential) + overlap policy (skip/queue); executeRun re-runs a Pending job; add anyRunningLocked; sequential guard in RunNow. opus high
P3.4 ui/settings_view.go: add a Queue group with widget.Select for execution mode and overlap policy, wired into the saved config. sonnet medium
P3.5 Extend app/operations_test.go (or new run_test.go): parallel multi-start, sequential serialization, skip drops overlap, queue re-runs after finish. Reuse fake-runJob + StartWith(fakeClock). opus high

Phase 4 — Notifications + Command browse (§4, §3)

Task Description Model Thinking
P4.1 Add Service.ShouldNotifyOnFailure() (reads config under mu); in ui/mainwindow.go listener, SendNotification on a failed real-run when enabled. Update Settings wording. sonnet medium
P4.2 ui/job_dialog.go: wrap Command entry with a Browse button; add chooseFile helper (dialog.NewFileOpen) in settings_view.go. sonnet low

Phase 5 — Icons (§5)

Task Description Model Thinking
P5.1 assets/assets.go: embed gosentry-icon-16x16.png; add IconSmall(); keep Icon()/IconBytes() (large). haiku low
P5.2 ui/tray.go: desk.SetSystemTrayIcon(assets.IconSmall()); confirm window/app icon stays large in run.go. Verify gosentry.ico carries both sizes. sonnet low

Phase 6 — Fyne 2.7 upgrade + tray click (§6)

Task Description Model Thinking
P6.1 go.mod: bump fyne.io/fyne/v2 to 2.7.x (go get + go mod tidy); rebuild under MSYS2 UCRT64; review 2.7 changelog for breaking changes. opus high
P6.2 ui/tray.go: add desk.SetSystemTrayWindow(w) for left-click-to-show; keep the "Show" menu item. sonnet low
P6.3 Re-measure startup via the History "Started … in Xms" event; append the result to docs/PERFORMANCE.md. haiku low

Phase 7 — Roadmap follow-ups (§9)

Task Description Model Thinking
P7.1 Move Windows-only runner tests (TestShellCommandHidesWindow, TestShellCommandUsesWindowsSafeQuoting, peers touching SysProcAttr/windowsShellCommandLine) into runner/runner_windows_test.go guarded by //go:build windows; confirm Linux test build compiles. sonnet medium

Phase 8 — Docs + version (§8, §7)

Task Description Model Thinking
P8.1 New docs/DEVELOPMENT.md: move Requirements, Build, Run From Source, Project Layout, Dependencies/mirroring out of README. sonnet medium
P8.2 Rewrite README.md for end users: Features, Storage (JSON), Schedules, Using the App, Queue settings, notifications, Autostart, Troubleshooting; add a Documentation link list; fix 0.3.0 → current version. sonnet medium
P8.3 Update docs/CHANGELOG.md; mark the addressed docs/ROADMAP.md items done. haiku low

Completion checklist

Phase 1 — Storage JSON + exit-code removal

  • P1.1 — JSON struct tags
  • P1.2 — writeJSON + JSON unmarshal
  • P1.3 — gosentry.json / jobs.json paths; drop pysentry name
  • P1.4 — One-time YAML import
  • P1.5 — Remove SuccessExitCodes across code
  • P1.6 — Update storage/runner/format tests + TESTS.md

Phase 2 — PySentry legacy removal

  • P2.1 — Windows autostart legacy code
  • P2.2 — Linux autostart legacy code
  • P2.3 — Delete legacy autostart tests
  • P2.4 — .gitignore / .dockerignore

Phase 3 — Task-queue model + settings

  • P3.1 — Config/runtime fields + defaults
  • P3.2 — Split dispatch into app/run.go
  • P3.3 — Rework RunDue/executeRun for mode + overlap policy
  • P3.4 — Settings Queue selects
  • P3.5 — Queue tests

Phase 4 — Notifications + Command browse

  • P4.1 — Failure notifications
  • P4.2 — Command Browse button

Phase 5 — Icons

  • P5.1 — Embed small icon + IconSmall()
  • P5.2 — Tray uses small icon; verify .ico

Phase 6 — Fyne 2.7 upgrade + tray click

  • P6.1 — Bump Fyne to 2.7.x; rebuild
  • P6.2 — SetSystemTrayWindow left-click-to-show
  • P6.3 — Re-measure startup → PERFORMANCE.md

Phase 7 — Roadmap follow-ups

  • P7.1 — Linux test build fix (build-tagged Windows tests)

Phase 8 — Docs + version

  • P8.1 — docs/DEVELOPMENT.md
  • P8.2 — End-user README rewrite
  • P8.3 — CHANGELOG + ROADMAP updates

Definition of done

  • go vet ./... clean; go test ./... green on Windows and Linux (CGO on).
  • Storage reads/writes JSON; an existing *.yaml install imports once into JSON.
  • Queue execution mode + overlap policy are configurable and exercised by tests.
  • A failed real run raises a desktop notification when enabled.
  • Tray left-click shows the window; tray uses the small icon, window/taskbar the large one.
  • No PySentry legacy code remains; README is end-user-focused with dev docs split into docs/DEVELOPMENT.md.