Contributing
Clawbolt is open source and contributions are welcome.
Getting started
Section titled “Getting started”- Fork the repository on GitHub
- Clone your fork and set up local development
- Create a branch for your changes
- Make your changes and ensure all checks pass
- Open a pull request
Code standards
Section titled “Code standards”- Type annotations required on all functions
- Ruff for linting and formatting (rules:
E, F, I, UP, B, SIM, ANN, RUF) - Line length: 100 characters
- SQLAlchemy 2.0
mapped_columnstyle - Pydantic v2 for all request/response schemas
- Async routes: all route handlers use
async def - LLM calls: all LLM calls via any-llm
acompletion(async)
Commit messages
Section titled “Commit messages”Use conventional commit prefixes:
| Prefix | Use for |
|---|---|
feat: | New features |
fix: | Bug fixes |
docs: | Documentation changes |
refactor: | Code refactoring |
test: | Adding or updating tests |
ci: | CI/CD changes |
chore: | Maintenance tasks |
Pull request checklist
Section titled “Pull request checklist”Before submitting, make sure:
uv run pytest -v # tests passuv run ruff check backend/ tests/ # lint passesuv run ruff format --check backend/ tests/ # format passesuv run ty check --python .venv backend/ tests/ # type checking passes- Bug fixes include regression tests
- New features include appropriate tests
- Documentation is updated if needed
Architecture notes
Section titled “Architecture notes”- See Architecture for system design overview
- Every model and endpoint uses
user_idscoping - External services are abstracted behind service classes in
backend/app/services/ - Config uses Pydantic
BaseSettingswithextra="ignore"