4d014e2f45
Reviewing the project used to mean re-stating what to look at every time. docs/REVIEW.md now holds that agenda once — nine areas, each anchored to this codebase — and both entry points point at it rather than copying it: the /review-project command in .claude/commands, and a section in CLAUDE.md so a plain-language review request lands in the same place. STANDARDS.md gains a "Config file compatibility" section. The project has applied the same rule three times (Theme, JobListView, TimeoutSeconds) without ever writing it down: a new Config field is omitempty and its zero value means the previous behavior, a meaningful zero is never backfilled on load, and an unrecognised enum value reads as the default through one shared helper. With no migration step and hand-editable files, that is what keeps older configs working. Also removes docs/PLAN-compact-job-list.md, implemented in edabc57 — everything but the version bump, which now waits for the release along with the rest of the Unreleased section. .claude/settings.local.json is ignored so the shared command can be tracked without per-developer permissions. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
60 lines
2.3 KiB
Markdown
60 lines
2.3 KiB
Markdown
# GoSentry — instructions for Claude Code
|
|
|
|
Cross-platform desktop scheduler (Go + Fyne GUI). Single process: GUI,
|
|
application service, scheduler, storage, and command runner in one binary.
|
|
|
|
## Read before changing code
|
|
|
|
- [docs/STANDARDS.md](docs/STANDARDS.md) — **required.** Code-quality rules and
|
|
the list of intentional behavior. Do not "fix" anything listed there as
|
|
intentional; if a change contradicts it, update the document in the same commit.
|
|
- [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) — package contracts and event flow.
|
|
- [docs/TESTS.md](docs/TESTS.md) — test layout and conventions.
|
|
- [docs/ROADMAP.md](docs/ROADMAP.md) — deliberately out of scope.
|
|
|
|
## Reviewing the project
|
|
|
|
When the user asks for a review of the project (rather than of a specific
|
|
diff), follow [docs/REVIEW.md](docs/REVIEW.md) — it is the agenda, and the
|
|
`/review-project` command runs the same thing. Do not improvise a checklist.
|
|
|
|
## Key rules (full list in STANDARDS.md)
|
|
|
|
- `src/app.Service` is the sole owner of job and runtime state; the UI reads it
|
|
through typed events, never through shared mutable state.
|
|
- User-facing errors go to `dialog.ShowError` or a History event — never a silent
|
|
`return`.
|
|
- Pure helpers get a unit test in the same package; fixes of severity ≥ medium get
|
|
a regression test.
|
|
- UI view constructors accept an injected `*app.Service`; `app.Open()` is called
|
|
only from `run.go`.
|
|
- Off-main-thread widget updates must go through `fyne.Do` (Fyne v2.7.4).
|
|
|
|
## Build and test
|
|
|
|
CGO is required — the Fyne GUI links native libraries. On Windows the toolchain
|
|
is MSYS2 UCRT64; the default shell environment here has CGO off, so set it
|
|
explicitly:
|
|
|
|
```powershell
|
|
$env:Path = 'C:\msys64\ucrt64\bin;' + $env:Path; $env:CGO_ENABLED = '1'
|
|
```
|
|
|
|
Then:
|
|
|
|
```powershell
|
|
scripts\test.bat
|
|
```
|
|
|
|
which runs `go vet ./...` and `go test -race ./...`. Release binaries come from
|
|
`scripts\build-windows.bat` / `scripts/build-linux.sh` — see
|
|
[docs/DEVELOPMENT.md](docs/DEVELOPMENT.md).
|
|
|
|
## Repository conventions
|
|
|
|
- Commit directly to `main`; do not create feature branches.
|
|
- Notable changes get a [docs/CHANGELOG.md](docs/CHANGELOG.md) entry under the
|
|
current version.
|
|
- The window/taskbar icon comes from the `gosentry.ico` PE resource — regenerate
|
|
it from the PNGs whenever an icon changes, not just the embedded asset.
|