Commit Graph

166 Commits

Author SHA1 Message Date
mixeme 2ab5f07c7c docs: remove implemented per-job timeout plan
The per-job command timeout is now shipped (0.12.0); its ROADMAP entry is
gone, so the implementation plan is no longer needed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-25 23:38:59 +03:00
mixeme 48faddb3bd feat: per-job command timeout with global default
Add an optional per-job run timeout following the overlap_policy inherit
pattern: Job.TimeoutSeconds (0 = inherit) resolves against a new
Config.DefaultTimeoutSeconds (default 30s), replacing the hard-coded 30s
guard in runner.RunJob.

- domain/storage: new fields, default 30, load-time normalization
- runner: RunJob takes an explicit timeout; StartOnly stays untimed so it
  keeps measuring launch latency only
- app: effectiveTimeout resolves under mu into runEnv, threaded to runJob;
  seam signature and validation updated; DisplayTimeout helper
- ui: Timeout entry in the job dialog, Default timeout in Settings, and a
  Timeout row in the details panel
- tests + docs (ARCHITECTURE, STANDARDS, ROADMAP, CHANGELOG) updated;
  version bumped to 0.12.0

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-25 23:24:50 +03:00
mixeme f4221f6ce4 docs: clarify supported platforms (Windows/Linux; macOS unsupported)
Add a Platforms section to the README stating that autostart and desktop
integration are implemented only on Windows and Linux; macOS may build the
GUI but those features are stubbed. Avoids over-promising ahead of 1.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-25 23:12:34 +03:00
mixeme b3eb429fa6 docs: add per-job timeout implementation plan
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-25 23:05:29 +03:00
mixeme 40b609a7d4 docs: add logo to README header
Theme-aware <picture> swaps the dark wordmark variant under
prefers-color-scheme: dark so it stays legible on GitHub's dark theme.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 23:59:05 +03:00
mixeme 3a68c705c6 assets: add GoSentry wordmark logo (clock-dial variant)
Recommended variant from gosentry-logo.html: Space Grotesk SemiBold with
an amber "G", a clock-dial "o" (ring + hands), and petrol "Sentry". Ships
self-contained SVGs (glyphs outlined to paths, no font dependency) in
light/dark/mono plus transparent PNGs at 256-2048px, with a README and the
gen_logo.py/raster.py generators for reproducibility.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 23:51:38 +03:00
mixeme 5d662c7fd5 ci: trigger release build on published release instead of tag push
Both workflows now run on `release: published` and attach the built
archives to the release the user creates, rather than pushing a tag and
having the workflow create the release. Tag comes from the release event;
GitHub no longer regenerates release notes. Docs updated accordingly.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 15:39:59 +03:00
mix d4ca38b45a Create gosentry-logo.html 2026-07-18 14:28:20 +03:00
mixeme 48622a99c2 ci: install Node.js in Codeberg container before JS actions
The golang:1.22-bookworm container has no node binary and Codeberg's
runner does not inject one, so checkout/forgejo-release failed with
'node: not found'. Add a pre-checkout run step (which executes via the
container shell and needs no node itself) to apt-install nodejs before
the JS-based actions run.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 08:58:40 +03:00
mixeme 9866673bab ci: use codeberg-medium-lazy runner tag for Forgejo release build
Codeberg's hosted runners are tagged codeberg-tiny/small/medium (+ -lazy),
not 'docker', so the job was never picked up ('No active runner with tag
docker'). The three CGO cross-compiles exceed the non-lazy 10 min cap, so
use the medium -lazy runner, which relaxes the wall-clock limit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 08:50:38 +03:00
mixeme 2f965166ba ci: add GitHub and Codeberg release build workflows
Add tag-triggered CI that builds and publishes the linux/amd64,
linux/arm64, and windows/amd64 release binaries on both forges.

- scripts/ci-build-release.sh: shared, Docker-free build+package for all
  three targets (Windows cross-compiled via MinGW), reused by both
  workflows so the build logic lives in one place.
- .github/workflows/release.yml: GitHub Actions, publishes via
  softprops/action-gh-release using the built-in token.
- .forgejo/workflows/release.yml: Forgejo Actions for Codeberg, publishes
  via forgejo-release using a RELEASE_TOKEN secret.
- .gitattributes: force LF on workflow YAML so bash run: blocks don't
  break on Linux runners.
- docs/DEVELOPMENT.md: document the tag -> release flow and token setup.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 08:32:07 +03:00
mixeme e9ec48bf15 docs: remove <br/> from mermaid labels to fix Gitea rendering
The prior fix switched \n to <br/> in node labels, but Gitea's mermaid
renderer still emits unclosed <br> tags in the generated SVG regardless
of source syntax. Use single-line labels instead to avoid <br> entirely.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-08 08:09:22 +03:00
mixeme 2c38941f6e docs: fix mermaid diagram XML parse error in Gitea rendering
Gitea's SVG renderer requires well-formed XML; mermaid's \n line
breaks produce unclosed <br> tags in foreignObject labels. Use
explicit <br/> instead.
2026-07-08 07:49:22 +03:00
mixeme effd740e45 docs: add descriptions and missing docs to README documentation list 2026-07-08 07:43:07 +03:00
mixeme 8bd50d0431 docs: credit Claude Code in development assistance note 2026-07-01 23:24:40 +03:00
mixeme 5c89d5ccf1 Update ROADMAP.md 2026-07-01 23:20:13 +03:00
mixeme 9216f01bf6 release: bump version to 0.11.5
Replace interim FUTURE_WORK.md with slim STANDARDS.md and update doc links.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 23:16:24 +03:00
mixeme aed83b91b9 docs: add FUTURE_WORK quality standard and close polish gaps
Replace CODE_REVIEW.md with a living maturity checklist, document
session-only History, inject Service into newMainView for testability,
add UI and scheduler regression tests, and fix RunNow error surfacing
plus empty jobs view handling.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 23:14:09 +03:00
mixeme eba7bff17a release: bump version to 0.11.4
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 00:05:47 +03:00
mixeme 6ea6578acb feat: record launch latency in statistics for start-only jobs
StartOnly jobs previously forced DurationMS to 0 because GoSentry does
not wait for the process to exit, leaving the Statistics line stuck at
"last 0 ms, avg 0 ms". The runner already measures launch latency (time
to spawn the process) for the History detail; this now returns that
value as the run duration so the existing duration-driven stats pipeline
folds it into last/avg/max.

Sub-millisecond launches still round to 0 and are excluded from the
average, matching prior behavior.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 00:05:17 +03:00
mixeme 00991f24a5 release: bump version to 0.11.3
Document the code-review reliability fixes in CHANGELOG.md.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 21:56:38 +03:00
mixeme 29d2ffed8f fix: complete code review follow-ups for queue, stats, and docs
Replace overlap Pending flag with PendingRuns counter, match seed stats
by job_id, align average duration with TimedRunCount, and tidy docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 21:54:44 +03:00
mixeme e9fc9eaba0 fix: harden run persistence and error surfacing from code review
Snapshot store paths under lock before async runs, roll back failed
start/save state, emit UI events only after successful persistence,
surface log write failures, and sync stale YAML docs to JSON.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 21:33:50 +03:00
mixeme 09c5edc993 docs: document disadvantages of platform-specific maximized detection
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 23:28:40 +03:00
mixeme 76c8ac92d1 freeze window size persistence until maximized detection is available
Saving w.Canvas().Size() when the window is maximized persists the maximized
dimensions, corrupting the stored size for the next launch. Commented out the
save calls until per-OS maximized detection (IsZoomed / _NET_WM_STATE /
NSWindow.isZoomed) is implemented. Roadmap entry updated to reflect frozen
status.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 23:26:35 +03:00
mixeme dccb598b8c docs: add roadmap item for window size not saved when maximized
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 23:22:22 +03:00
mixeme 0c1ab8dd7e Update README.md 2026-06-25 23:00:58 +03:00
mixeme dda128ff85 Update README.md 2026-06-25 22:59:29 +03:00
mixeme 7ef00a1139 Update README.md 2026-06-25 22:58:14 +03:00
mixeme 34a702bc42 docs: add screenshots to README
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 22:56:04 +03:00
mixeme 74e9e93bd7 Add screenshots 2026-06-25 22:55:06 +03:00
mixeme 882fcfe65d chore: release 0.11.2 with window persistence, appID update, and doc fixes
- Persist window size on quit/close and restore it on next launch
- Update appID from ru.mixdep.gosentry.desktop to ru.mixeme.gosentry.desktop
- Use markdown headers for Build sections in DEVELOPMENT.md
- Remove stale go.yaml.in/yaml/v4 dependency from DEVELOPMENT.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 22:50:28 +03:00
mixeme 8cfa16a2bd docs: add History column filters to roadmap (pending Fyne support)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 22:36:03 +03:00
mixeme 5f36c7a0e1 feat(ui): rename pause/resume all to Disable/Enable auto with pause icon
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 22:30:30 +03:00
mixeme fb2f9b6e30 fix(ui): restore History column sort after Fyne 2.7 header-tap change
Fyne 2.7.4 made Table.Select() reject cells with Row < 0, so OnSelected
was never fired for header clicks and the Time sort toggle stopped working.
Replace the plain Label header with a custom historyHeader widget that
implements fyne.Tappable; UpdateHeader wires OnTapped for col 0 directly.
Also swap "asc"/"desc" text for ▲/▼ glyphs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 22:24:59 +03:00
mixeme 0e258979d9 chore: release 0.11.1 with settings spacing, label, and Save-button fixes
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 08:50:10 +03:00
mixeme f53447d3e8 feat(ui): align settings spacing, fix label clipping, gate Save button
- Give the Queue selects the same default spacing as the Storage fields
- Widen the settings caption column so "Default overlap policy" fits
- Disable Save until a field differs from the saved config, re-enabling on
  change and re-disabling after a successful save

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 08:49:03 +03:00
mixeme 24a8140e26 chore: release 0.11.0 with paused manual runs and two-column layouts
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 07:52:10 +03:00
mixeme 9ecb8b61f8 feat(ui): two-column settings/details, compact job list, manual run while paused
- Allow manual "Run now" while the scheduler is paused: pause now stops only
  automatic scheduled runs (RunDue), not the user's explicit action. Drop the
  paused guard in Service.RunNow and the UI pause dialog; update tests.
- Cap the details metadata caption width via a new captionValueLayout so a wider
  window feeds extra space to the value column instead of the short caption.
- Reorganize the Settings tab into two columns (Application+Queue / Storage+About)
  with Save spanning the full width; move the Autostart status onto its own line.
- Condense the Jobs list rows with compactVBoxLayout to fit more jobs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 07:51:03 +03:00
mixeme 43809e5076 fix(ui): refresh activity panel when switching selected job
The "Selected job activity" list kept showing the previous job's entries
when a different job was selected. dp.update() reassigned the backing
slice but never refreshed the widget.List, and only the refreshView path
appended an explicit refresh. Move d.logs.Refresh() into update()/clear()
so every caller redraws the panel.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 07:34:19 +03:00
mixeme 8b81180c92 chore: release 0.10.2 with condensed panels and settings spacing fix
Bump version to 0.10.2 and document the UI density/resizing work in the
changelog. Also restructure the settings form into sections so separators
and the editable Storage fields keep normal spacing (dividers no longer
crowd the row above, entry boxes stay visibly separated) while the
label-only sections remain condensed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 01:41:02 +03:00
mixeme 21d78ea010 feat(ui): condense panels and let the window shrink to 720p
Make the job details and settings views more compact and remove the tall
minimum that prevented resizing the window shorter:

- Lay job metadata out in two columns and stack rows with a negative-gap
  compactVBoxLayout, roughly halving the block height.
- Wrap the settings form in a vertical scroll so it no longer dictates
  the window minimum (AppTabs sizes to the tallest tab), and tighten its
  rows with the same compact layout.
- Shrink the command-output scroll minimum height so the details pane can
  get shorter; long output still scrolls.
- Size the "Selected job activity" panel to exactly maxJobActivityRows
  using widget.List's own content-height formula, so all three rows show
  without a scrollbar regardless of theme or DPI.

Together these drop the minimum window height from ~891px to ~570px.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 01:34:47 +03:00
mixeme 5cdb9414b2 docs: update changelog for 0.10.1 build script improvements
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-24 23:05:22 +03:00
mixeme 9394bd66b8 chore: add informative messages to Windows build script
Add echo statements at key build steps to indicate progress:
- Build start and version info
- Output path
- Environment setup
- Icon resource embedding (or warning if windres not found)
- Go compilation
- Success completion message

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-24 23:04:42 +03:00
mixeme ec19ab3884 chore: bump version to 0.10.1 and update changelog
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-24 23:02:45 +03:00
mixeme 999ccb7300 refactor: unify icon asset naming to use size-based scheme
Rename icon files from mixed naming (big/16x16) to consistent size-based
names (large/small) for clarity. Update Go functions and variables to
reference the new asset names. This makes the icon pipeline easier to
understand and maintain.

File changes:
- gosentry-icon-big.png → gosentry-icon-large.png
- gosentry-icon-16x16.png → gosentry-icon-small.png
- gosentry-icon-16x16.ico → gosentry-icon-small.ico
- Embedded variable: iconBytes → iconLargeBytes for clarity

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-24 23:02:06 +03:00
mixeme 88989b143b docs/CHANGELOG: complete the 0.10.0 entry
Document the shipped work missing from the entry: per-job overlap
policy, persisted global pause, 720p-safe window sizing, portable
packaging helpers, and the internal cleanup (jobs_view split, dropped
YAML migration, planning-doc removal).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 22:59:00 +03:00
mixeme 03cba5b5aa docs: drop completed release-milestone docs; trim roadmap
Remove RELEASE-0.10-PLAN.md and RELEASE-0.10-TASKS.md now that the
0.10.0 milestone work is finished (history preserved in git). Trim
ROADMAP.md to open items only; completed work lives in CHANGELOG.md.
Version stays 0.10.0 — this release is not yet tagged/shipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 22:57:15 +03:00
mixeme 74cd7485ee docs: mark Release 0.10.0 complete; update roadmap (T8.1)
ROADMAP.md now documents that T6.1 (jobs_view split), T6.2 (cleanup),
and T7.1–T7.2 (Windows zip + Linux tar.gz packaging) are complete.
Version 0.10.0 and CHANGELOG.md were already finalized.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 22:51:03 +03:00
mixeme 1085667d7b scripts: add portable packaging helpers for Windows and Linux (T7.1-T7.2)
package-windows.bat builds gosentry.exe then bundles it with README and
CHANGELOG into a versioned .zip via PowerShell Compress-Archive.
package-linux.sh does the same for linux-amd64 and linux-arm64 (arm64
cross-compiles via aarch64-linux-gnu-gcc; skips gracefully if absent),
producing .tar.gz archives with files at the archive root.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-24 22:50:06 +03:00