Contributing¶
Getting started¶
- Fork the repository
- Create a feature branch:
git checkout -b feat/my-feature - Make your changes
- Run checks:
make test && make lint && make format-check - Commit with a conventional commit message
- Push and open a pull request
Commit messages¶
Follow Conventional Commits:
feat: add support for Bedrock guardrails
fix: handle empty file attachments
refactor: extract session management from agent
docs: add ECS deployment guide
test: add specs for block kit table rendering
Code style¶
- Use
crystal tool formatfor formatting (2-space indent) - Follow ameba linter rules
- Keep cyclomatic complexity under 10
- Use named constants instead of magic numbers
- Prefer early returns over deep nesting
Pull request checklist¶
- [ ] All specs pass (
crystal spec) - [ ] No linter warnings (
./bin/ameba src/) - [ ] Code is formatted (
crystal tool format --check src/ spec/) - [ ] New features have specs
- [ ] Conventional commit message
Architecture guidelines¶
- Keep the Gateway thin — business logic belongs in the modules it delegates to
- New AWS services should follow the same pattern: abstract class + implementation + null implementation
- Slack formatting logic goes in
MrkdwnorBlockKit, not in the Gateway - Use Crystal's type system — prefer
String?and pattern matching over runtime nil checks