From c0007c291dcc999fd5a6cf3b99f2119b7d95ad29 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Wed, 5 Nov 2025 15:50:00 -0600 Subject: [PATCH 1/3] =?UTF-8?q?=F0=9F=93=9D=20Add=20AGENTS.md=20with=20com?= =?UTF-8?q?prehensive=20guidelines=20for=20coding=20agents?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..2f54c9d --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,33 @@ +# Agent Guidelines for my-log + +## Build/Test/Lint Commands +- Build: `make build` or `go build -o my-log` +- Test all: `make test` (runs fmt + test with race + coverage) +- Test single: `go test ./path/to/package -run TestName` +- Format: `make fmt` or `go fmt ./...` +- Coverage report: `make report` (generates cover.html) + +## Code Style +- **Module**: `codeberg.org/danjones000/my-log` +- **Go version**: 1.21.5 +- **Imports**: Standard library first, then external packages, then local packages. Use short aliases for common imports (e.g., `fp` for `path/filepath`, `mapst` for `mitchellh/mapstructure`) +- **Formatting**: Always run `go fmt` before commits (included in test target) +- **Types**: Use explicit types (e.g., `int64`, `float64`). Convert numbers appropriately when unmarshaling JSON +- **Naming**: PascalCase for exported, camelCase for unexported. Use descriptive names +- **Error handling**: Return wrapped errors with context. Define custom errors in models/errors.go. Use `ErrorIs` for error checking +- **Testing**: Use testify/assert. Table-driven tests with helper functions. Test both marshal/unmarshal for encoding types +- **Concurrency**: Use channels and goroutines with WaitGroups for parallel processing (see entry.go patterns) +- **Comments**: Include license header on cmd files. Document exported functions and types + +## Git Commit Guidelines +- **Format**: Prepend commit messages with a gitmoji emoji (see https://gitmoji.dev) +- **Style**: Write detailed commit messages that explain what changed and why +- **Examples**: `✨ Add JSON export functionality for log entries`, `🐛 Fix date parsing for RFC3339 timestamps`, `📝 Update README with configuration examples` + +## Project Structure +- `cmd/`: Cobra commands (root, drop, config) +- `models/`: Core types (Entry, Log, Meta) with marshal/unmarshal implementations +- `config/`: TOML-based configuration with env overrides +- `formatters/`: Output formatters (plain, json, null) +- `files/`: File operations (append) +- `tools/`: Utilities (date parsing, string parsing, write buffers) From ad7eba9b03621dc1cc3ea592808400742b555d68 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Wed, 5 Nov 2025 16:00:55 -0600 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=9A=9A=20Refactor=20project=20structu?= =?UTF-8?q?re=20to=20follow=20standard=20Go=20layout=20conventions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- AGENTS.md | 3 ++- Makefile | 2 +- main.go => cmd/my-log/main.go | 2 +- {cmd => internal/cmd}/config.go | 0 {cmd => internal/cmd}/drop.go | 0 {cmd => internal/cmd}/root.go | 0 7 files changed, 5 insertions(+), 4 deletions(-) rename main.go => cmd/my-log/main.go (93%) rename {cmd => internal/cmd}/config.go (100%) rename {cmd => internal/cmd}/drop.go (100%) rename {cmd => internal/cmd}/root.go (100%) diff --git a/.gitignore b/.gitignore index 3a550dc..5a806ae 100644 --- a/.gitignore +++ b/.gitignore @@ -122,6 +122,6 @@ Temporary Items *.icloud # End of https://www.toptal.com/developers/gitignore/api/go,linux,emacs,macos -my-log +/my-log cover.html cmd/test.go diff --git a/AGENTS.md b/AGENTS.md index 2f54c9d..50a1aca 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -25,7 +25,8 @@ - **Examples**: `✨ Add JSON export functionality for log entries`, `🐛 Fix date parsing for RFC3339 timestamps`, `📝 Update README with configuration examples` ## Project Structure -- `cmd/`: Cobra commands (root, drop, config) +- `cmd/my-log/`: Main application entrypoint +- `internal/cmd/`: Cobra commands (root, drop, config) - `models/`: Core types (Entry, Log, Meta) with marshal/unmarshal implementations - `config/`: TOML-based configuration with env overrides - `formatters/`: Output formatters (plain, json, null) diff --git a/Makefile b/Makefile index a3d8581..aaf684f 100644 --- a/Makefile +++ b/Makefile @@ -47,4 +47,4 @@ open-report: $(COVERHTML) ## Open the coverage report in the default browser build: $(OUT) ## Builds the application $(OUT): $(SOURCES) fmt - go build -o $@ + go build -o $@ ./cmd/my-log diff --git a/main.go b/cmd/my-log/main.go similarity index 93% rename from main.go rename to cmd/my-log/main.go index a23ee3c..c7f2435 100644 --- a/main.go +++ b/cmd/my-log/main.go @@ -16,7 +16,7 @@ along with this program. If not, see . */ package main -import "codeberg.org/danjones000/my-log/cmd" +import "codeberg.org/danjones000/my-log/internal/cmd" func main() { cmd.Execute() diff --git a/cmd/config.go b/internal/cmd/config.go similarity index 100% rename from cmd/config.go rename to internal/cmd/config.go diff --git a/cmd/drop.go b/internal/cmd/drop.go similarity index 100% rename from cmd/drop.go rename to internal/cmd/drop.go diff --git a/cmd/root.go b/internal/cmd/root.go similarity index 100% rename from cmd/root.go rename to internal/cmd/root.go From f0ee52b3ef5be10d43dedc18fe0a53f9107fffe9 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Wed, 5 Nov 2025 16:21:14 -0600 Subject: [PATCH 3/3] =?UTF-8?q?=F0=9F=93=9D=20Add=20Git=20Flow=20Workflow?= =?UTF-8?q?=20guidelines=20to=20AGENTS.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 50a1aca..e2e6343 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -24,6 +24,18 @@ - **Style**: Write detailed commit messages that explain what changed and why - **Examples**: `✨ Add JSON export functionality for log entries`, `🐛 Fix date parsing for RFC3339 timestamps`, `📝 Update README with configuration examples` +## Git Flow Workflow +- **Main branches**: `stable` (production-ready), `develop` (integration branch) +- **Development**: Always commit new features/fixes to `develop` branch or appropriate feature branches +- **Branch prefixes**: + - `feat/feature-name` - New features, merge to `develop` when complete + - `bug/bug-name` - Bug fixes (non-urgent), merge to `develop` when complete + - `hot/version` - Hotfixes for production issues, merge to **both** `stable` and `develop` + - `rel/version` - Release preparation branches +- **Version tags**: Prefix all version tags with `v` (e.g., `v1.0.2`, `v0.0.6`) +- **Never commit directly to**: `stable` branch (only merge from `rel/` or `hot/` branches) +- **Before starting work**: Ensure you're on `develop` branch or create an appropriate feature branch from it + ## Project Structure - `cmd/my-log/`: Main application entrypoint - `internal/cmd/`: Cobra commands (root, drop, config)