- Ignore AGENTS.md and .windsurf/* in .gitignore - Expand AGENTS.md with native lib and Zig CLI build commands
388 lines
No EOL
11 KiB
Markdown
388 lines
No EOL
11 KiB
Markdown
# AGENTS.md - Coding Agent Guidelines
|
|
|
|
This document provides essential information for agentic coding assistants working with the FetchML codebase.
|
|
|
|
## Build Commands
|
|
|
|
### Go Components
|
|
```bash
|
|
# Build all components (Go binaries + native libs + Zig CLI)
|
|
make build
|
|
|
|
# Build for development (faster compilation, no LTO)
|
|
make dev
|
|
|
|
# Build production-optimized binaries
|
|
make prod
|
|
|
|
# Build production with native C++ libraries
|
|
make prod-with-native
|
|
|
|
# Cross-platform build for Linux/macOS/Windows
|
|
make cross-platform
|
|
|
|
# Build native C++ libraries
|
|
make native-build
|
|
make native-release
|
|
make native-debug
|
|
```
|
|
|
|
### Zig CLI
|
|
```bash
|
|
# Build CLI with release-small optimization (smallest binary)
|
|
make build-cli
|
|
cd cli && make all
|
|
cd cli && zig build --release=small
|
|
|
|
# Build for production (fast, LTO)
|
|
cd cli && make prod
|
|
cd cli && zig build --release=fast
|
|
|
|
# Build for development (fast compilation)
|
|
cd cli && make dev
|
|
cd cli && zig build --release=fast
|
|
|
|
# Debug build (fastest compile, no optimizations)
|
|
cd cli && make debug
|
|
cd cli && zig build -Doptimize=Debug
|
|
|
|
# Run Zig tests
|
|
cd cli && make test
|
|
cd cli && zig build test
|
|
```
|
|
|
|
## Test Commands
|
|
|
|
### Running Tests
|
|
```bash
|
|
# Run all tests with Docker infrastructure
|
|
make test
|
|
|
|
# Run unit tests only
|
|
make test-unit
|
|
|
|
# Run integration tests only
|
|
make test-integration
|
|
|
|
# Run end-to-end tests only (Podman tests opt-in)
|
|
make test-e2e
|
|
FETCH_ML_E2E_PODMAN=1 go test ./tests/e2e/...
|
|
|
|
# Run with coverage report
|
|
make test-coverage
|
|
|
|
# Run a single test
|
|
go test -v ./path/to/package -run TestName
|
|
|
|
# Run tests with race detector
|
|
go test -race ./path/to/package/...
|
|
|
|
# Run specific test file
|
|
go test -v ./tests/unit/auth/keychain_test.go
|
|
|
|
# Run tests with logging
|
|
LOG_LEVEL=debug go test -v ./path/to/package
|
|
```
|
|
|
|
### Performance Testing
|
|
```bash
|
|
# Run performance benchmarks
|
|
make benchmark
|
|
make benchmark-local
|
|
make benchmark-native
|
|
|
|
# Run load testing suite
|
|
make load-test
|
|
|
|
# Run chaos engineering tests
|
|
make chaos-test
|
|
|
|
# Run complete technical excellence suite
|
|
make complete-suite
|
|
|
|
# Detect performance regressions
|
|
make detect-regressions
|
|
make profile-tools
|
|
|
|
# CPU profiling
|
|
make profile-load
|
|
make profile-ws-queue
|
|
```
|
|
|
|
## Lint Commands
|
|
|
|
```bash
|
|
# Run all linters and formatters
|
|
make lint
|
|
|
|
# Run Go linters with golangci-lint
|
|
golangci-lint run
|
|
golangci-lint run ./path/to/package
|
|
|
|
# Run Go formatters
|
|
gofmt -w ./cmd ./internal ./tests
|
|
goimports -w ./cmd ./internal ./tests
|
|
|
|
# Run Go vet
|
|
go vet ./...
|
|
|
|
# Format Zig code
|
|
cd cli && zig fmt .
|
|
cd cli && make dev # includes formatting
|
|
|
|
# Validate YAML configs against schema
|
|
make configlint
|
|
make worker-configlint
|
|
|
|
# Security scans
|
|
make security-scan
|
|
make gosec
|
|
make govulncheck
|
|
make check-unsafe
|
|
|
|
# OpenAPI validation
|
|
make openapi-validate
|
|
make openapi-generate
|
|
make openapi-generate-server
|
|
```
|
|
|
|
## Code Style Guidelines
|
|
|
|
### Go Code Style
|
|
|
|
1. **Formatting**:
|
|
- Use `gofmt` for formatting (configured in .golangci.yml)
|
|
- Line length: 100 characters
|
|
- Use `goimports` for import organization
|
|
- Run `make lint` to format all code
|
|
|
|
2. **Naming Conventions**:
|
|
- Use camelCase for variables and functions
|
|
- Use PascalCase for exported identifiers (types, interfaces, structs)
|
|
- Use clear, descriptive names
|
|
- Acronyms should be all caps (e.g., HTTP, URL, API, JSON)
|
|
- Interface names: typically end in "er" (e.g., Manager, Handler)
|
|
|
|
3. **Imports**:
|
|
- Group imports in order: standard library, third-party, internal
|
|
- Use meaningful import aliases when needed (e.g., `jupyter "github.com/..."`)
|
|
- Remove unused imports (golangci-lint will catch these)
|
|
- Internal imports: `github.com/jfraeys/fetch_ml/internal/...`
|
|
|
|
4. **Error Handling**:
|
|
- Always handle errors explicitly
|
|
- Use `errors.Is` and `errors.As` for error checking
|
|
- Wrap errors with context using `fmt.Errorf("context: %w", err)`
|
|
- Don't ignore errors with `_` unless explicitly documented
|
|
- Return errors early when appropriate (guard clauses)
|
|
|
|
5. **Documentation**:
|
|
- All exported functions, types, and variables must have doc comments
|
|
- Comments should explain "why" not just "what"
|
|
- Use godoc formatting conventions
|
|
- Include examples for complex functions
|
|
- Document error conditions and edge cases
|
|
|
|
6. **Testing**:
|
|
- Use `t.Parallel()` for independent tests
|
|
- Skip tests conditionally with `t.Skip()` rather than failing
|
|
- Test files: `*_test.go` in same package directory
|
|
- Unit tests: `tests/unit/`
|
|
- Integration tests: `tests/integration/`
|
|
- E2E tests: `tests/e2e/`
|
|
- Benchmarks: `tests/benchmarks/`
|
|
|
|
### Zig Code Style
|
|
|
|
1. **Formatting**:
|
|
- Use built-in Zig formatter (`zig fmt .` in cli/)
|
|
- Consistent indentation with 4 spaces
|
|
- Run `make lint` to format all Zig code
|
|
|
|
2. **Naming Conventions**:
|
|
- Use camelCase for variables and functions
|
|
- Use PascalCase for types (structs, enums, unions)
|
|
- Use snake_case for file names (e.g., `utils.zig`, `colors.zig`)
|
|
- Public functions: `pub fn`
|
|
- Internal functions: `fn`
|
|
|
|
3. **Error Handling**:
|
|
- Use Zig's error union types (`!T` or `Error!T`)
|
|
- Handle errors with `try`, `catch`, or `if` expressions
|
|
- Return errors early when appropriate
|
|
- Use `catch unreachable` only when error is truly impossible
|
|
- Document error returns in function docs
|
|
|
|
4. **Imports**:
|
|
- Use `@import("module")` for modules
|
|
- Organize imports logically
|
|
- Remove unused imports
|
|
|
|
5. **Testing**:
|
|
- Tests in `cli/tests/` directory
|
|
- Use `@import("std").testing` for test utilities
|
|
- Run with `cd cli && zig build test`
|
|
|
|
### Python Code Style
|
|
|
|
1. **Formatting**:
|
|
- Use Black formatter with 80 character line limit
|
|
- Use isort for import organization (Google style)
|
|
- Run `black .` and `isort .` in project root
|
|
|
|
2. **Type Checking**:
|
|
- Use mypy with strict settings
|
|
- All functions should have type annotations
|
|
- Use `from __future__ import annotations` for forward references
|
|
|
|
3. **Testing**:
|
|
- Use pytest framework
|
|
- Follow naming conventions: `test_*` for functions, `*_test.py` for files
|
|
|
|
### YAML/Configuration Style
|
|
|
|
1. **Formatting**:
|
|
- Use 2 spaces for indentation
|
|
- No trailing whitespace
|
|
- Use yamllint for validation
|
|
|
|
2. **Validation**:
|
|
- All configs must pass schema validation
|
|
- Use `make configlint` and `make worker-configlint`
|
|
|
|
## Development Guidelines
|
|
|
|
### Testing Requirements (from .windsurf/rules/test-new-features.md)
|
|
- MANDATORY: Every new feature MUST include corresponding tests
|
|
- Write tests BEFORE implementing complex features (TDD approach)
|
|
- Test coverage for new code should be >80%
|
|
- Include both unit tests and integration tests where applicable
|
|
- Test edge cases, error paths, and boundary conditions
|
|
|
|
### Code Organization
|
|
- CRITICAL: Clean up as you go - no orphaned files or dead code
|
|
- Remove commented-out code blocks (use git history instead)
|
|
- Delete unused imports, functions, and variables immediately
|
|
- Consolidate duplicate code into reusable functions
|
|
- Move TODO items from loose files into:
|
|
- Code comments with `// TODO(context):` for implementation tasks
|
|
- GitHub Issues for larger features
|
|
- NEVER create standalone .md files for tracking
|
|
|
|
### Documentation Standards
|
|
- Update relevant documentation IN THE SAME COMMIT as code changes
|
|
- Documentation locations:
|
|
- README.md: User-facing features, installation, quick start
|
|
- CHANGELOG.md: All changes, following Keep a Changelog format
|
|
- Code comments: Complex logic, non-obvious decisions, API contracts
|
|
- Function/struct docs: Public APIs must have doc comments
|
|
- Use concrete examples in documentation
|
|
- Keep docs concise but complete
|
|
|
|
### When Making Changes
|
|
For EVERY significant change, complete ALL of these:
|
|
|
|
1. Write/update tests
|
|
2. Update documentation (README, CHANGELOG, code comments)
|
|
3. Update build scripts if dependencies/build process changed
|
|
4. Remove any temporary/debug code added during development
|
|
5. Delete unused files created during exploration
|
|
6. Verify no dead code remains (unused functions, imports, variables)
|
|
|
|
### Cleanup Checklist (Run BEFORE committing)
|
|
- [ ] Removed all debug print statements
|
|
- [ ] Deleted temporary test files
|
|
- [ ] Removed commented-out code
|
|
- [ ] Cleaned up unused imports
|
|
- [ ] Deleted exploratory/spike code
|
|
- [ ] Consolidated duplicate logic
|
|
- [ ] Removed obsolete scripts/configs
|
|
|
|
### Communication Style
|
|
- Report what you've done: "Added feature X with tests in test/x_test.go"
|
|
- Highlight what needs attention: "WARNING: Manual testing needed for edge case Y"
|
|
- Ask questions directly: "Should we support Z? Trade-offs are..."
|
|
- NEVER say "I'll track this in a markdown file" - use code comments or tell me directly
|
|
|
|
### Script/Build System Updates
|
|
- Update Makefile/build.zig when adding new targets or commands
|
|
- Modify CI/CD configs (.github/workflows) if build/test process changes
|
|
- Update package.json/Cargo.toml/go.mod when dependencies change
|
|
- Document new scripts in README under "Development" section
|
|
|
|
## Anti-Patterns to AVOID
|
|
- Creating notes.md, todo.md, tasks.md, ideas.md files
|
|
- Leaving commented-out code "for reference"
|
|
- Keeping old implementation files with .old or .backup suffixes
|
|
- Adding features without tests
|
|
- Updating code without updating docs
|
|
- Leaving TODO comments without context or assignee
|
|
|
|
## Preferred Patterns
|
|
- Inline TODO comments: `// TODO(user): Add caching layer for better performance`
|
|
- Self-documenting code with clear names
|
|
- Tests that serve as usage examples
|
|
- Incremental, complete commits (code + tests + docs)
|
|
- Direct communication about tasks and priorities
|
|
|
|
## Definition of Done
|
|
A task is complete ONLY when:
|
|
1. Code is written and working
|
|
2. Tests are written and passing
|
|
3. Documentation is updated
|
|
4. All temporary/dead code is removed
|
|
5. Build scripts are updated if needed
|
|
6. Changes are committed with clear message
|
|
|
|
### Commit Message Convention
|
|
Use conventional commits:
|
|
- `feat:` for new features
|
|
- `fix:` for bug fixes
|
|
- `docs:` for documentation changes
|
|
- `style:` for formatting changes
|
|
- `refactor:` for code refactoring
|
|
- `test:` for adding/updating tests
|
|
- `chore:` for maintenance tasks
|
|
|
|
## Project Structure
|
|
|
|
- `cmd/` - Main applications
|
|
- `internal/` - Internal packages
|
|
- `cli/` - Zig command-line interface
|
|
- `tests/` - Test files organized by type
|
|
- `configs/` - Configuration files and schemas
|
|
- `docs/` - Documentation
|
|
- `scripts/` - Utility scripts
|
|
|
|
## Dependencies
|
|
|
|
- Go 1.25+
|
|
- Zig 0.15+
|
|
- Python 3.11+ (for some tools)
|
|
- Redis (for integration tests)
|
|
- Docker/Podman (for container-based tests)
|
|
|
|
## Useful Make Targets
|
|
|
|
```bash
|
|
# Development workflow
|
|
make dev-start # Start development environment
|
|
make test # Run all tests
|
|
make lint # Run linters
|
|
make ci-local # Run local CI dry-run
|
|
|
|
# Documentation
|
|
make docs # Start documentation server
|
|
make docs-build # Build static documentation
|
|
|
|
# Cleanup
|
|
make clean # Remove build artifacts
|
|
make clean-docs # Remove documentation artifacts
|
|
```
|
|
|
|
## Additional Resources
|
|
|
|
- **README.md**: Project overview and quick start guide
|
|
- **DEVELOPMENT.md**: Detailed development setup and workflow
|
|
- **docs/src/testing.md**: Comprehensive testing documentation
|
|
- **cli/README.md**: Zig CLI documentation |