48faddb3bd
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>
1.3 KiB
1.3 KiB
GoSentry — Standards
Quality rules and intentional behavior for contributors. Package contracts live in ARCHITECTURE.md; test conventions in TESTS.md.
Code quality
- Follow package contracts in ARCHITECTURE.md.
- User-facing errors →
dialog.ShowErroror a History event, never a silentreturn. - Pure helpers → unit test in the same package.
- Fixes with severity ≥ medium → regression test.
- Documented intentional behavior → section below, not a backlog bug.
- UI view constructors accept
*app.Service; callapp.Open()only fromrun.go.
Intentional behavior (not bugs)
RunNowis allowed during global pause and for disabled jobs.- Sequential mode runs jobs FIFO by order in
jobs.json. - Scheduler tick is 1s — sub-second
@everyintervals are not supported. - Command timeout defaults to 30s globally and is overridable per job
(
Job.TimeoutSeconds, 0 = inheritConfig.DefaultTimeoutSeconds). - History tab is session-only.
JobRuntime.Logsexists only in memory for the current process. Log files on disk feed aggregate statistics viaSeedStatsonly. See ARCHITECTURE.md.
Out of scope
Larger or blocked work is tracked in ROADMAP.md (window size persistence, History column filters, CI coverage gate).