Migrated to jmylchreest/gha-extract-git-version@v1 with semver-compliant versioning,
test gate, gh release create, concurrency control, deployment summary, and consistent
archive naming. See .github/workflows/build-release.yml.
Completed items
- Version extraction via
gha-extract-git-version@v1(format:X.Y.Z-dev.N+hash) - Tag-safe format for snapshots (
vX.Y.Z-dev.N-hash) - Duplicate build detection (
should_skip) - Concurrency control (cancel-in-progress)
- Test gate with race detector before builds
-
fail-fast: falseon all matrix strategies - Upgraded to
actions/checkout@v6,upload-artifact@v6,download-artifact@v7,setup-go@v6 - Switched from
softprops/action-gh-release@v2togh release create - Deployment summary via
$GITHUB_STEP_SUMMARY - Explicit
permissions: contents: write - SBOM generation retained
- Consistent archive naming (no
vprefix on tray archives) -
github-actions[bot]identity for AUR/Homebrew publishing - Snapshot cleanup matches all prereleases
Deferred:
- Go build caching via
actions/cache@v5(Go setup action handles this adequately) - Source-build AUR package (low priority)
- Lint job with golangci-lint (separate concern)
- Additional binary architectures (low demand)
Migrated to Chi + Huma with typed request/response structs, auto-generated OpenAPI spec,
Chi middleware ecosystem, and full backward compatibility. See internal/http/.
Completed items
- All 13 routes preserved with exact backward compatibility
- Typed Huma handlers with input/output structs
- 204 No Content for DELETE endpoints
- 207 Multi-Status for group state (partial failure)
- Lights returned as map (not array)
- Comma-separated group IDs supported
- Both auth header formats (
Authorization: BearerandX-API-Key) - Auth middleware at Huma level (typed routes) and Chi level (raw 207/WebSocket routes)
- Rate limiting via
go-chi/httprate - Comprehensive test coverage (handlers + HTTP client)
Integrated slog-logfilter with hot-reload, validation, and runtime filter management.
Completed items
-
slog-logfilterintegration withlogfilter.SetDefault() - Config-driven filters with validation
- Hot-reload on config file changes
- Filter validation (type, pattern, level, expiry)
- Invalid filters logged at WARN, existing filters preserved
- HTTP API for filter management (
/api/v1/logging/)
Completed items
- Slider fill visualization with accent-color linear-gradient
- Temperature gradient (warm-amber to cool-blue)
- On/off card states (green-tinted on, reduced opacity off)
- Collapsible sections (CSS max-height transition)
- Hidden empty sections (groups auto-hides when empty)
- Footer removed (version only in Settings > About)
- Master toggle (power icon in header, green when any on)
- Settings panel slide animation (translateX, 250ms)
go.mod pins fyne.io/systray to commit 4856ac3adc3c (Aug 12, 2025) via a replace directive
for SetOnTapped/SetOnSecondaryTapped support. As of Feb 2026, v1.12.0 has not been released.
- Monitor for
fyne.io/systrayv1.12.0+ release - When released:
go mod edit -dropreplace fyne.io/systray && go get fyne.io/systray@v1.12.0
CI installs Wails CLI with @latest, which may diverge from the v2.11.0 library in go.mod.
- Pin Wails CLI install to
@v2.11.0in CI - Monitor Wails v3 stable release status (currently alpha)