Contributing
Contributions should be focused, tested, and aligned with the runtime model already used by the project.
Audience: Developer
Context: Use this page when preparing changes, opening a pull request, or deciding how documentation updates fit into a code change.
Core Explanation
The contributor workflow in CONTRIBUTING.md emphasizes:
- fast, reproducible setup
- focused changes with one concern per pull request
- conventional commit messages
- local validation before review
- documentation updates whenever behavior changes
Branch And Commit Conventions
Suggested branch prefixes:
feat/<name>fix/<name>docs/<name>refactor/<name>test/<name>
Commit style:
feat(core): add scoped mandate validationfix(cli): handle missing workspace configdocs(readme): update docker quickstart
Practical Usage
Run the expected checks before opening a pull request:
pytest
black caracal/ tests/
ruff check caracal/ tests/
mypy caracal/
Or in one sequence:
pytest && black caracal/ tests/ && ruff check caracal/ tests/ && mypy caracal/
Documentation Responsibility
Update docs when:
- the command surface changes
- runtime behavior changes
- configuration rules change
- module boundaries or workflows change
Do not leave public behavior changes visible only in code or tests.
Internal Behavior
The repository is structured so that runtime behavior often crosses multiple layers. A small user-visible change may require updates in:
- CLI or Flow
- core modules
- config or storage helpers
- tests
- docs
That is normal in this project and should be treated as one cohesive change, not as unrelated file churn.
Edge Cases And Constraints
- Use Alembic for database schema changes.
- Do not treat enterprise placeholders as a place to document enterprise internals.
- Docs changes should reference the supported runtime model, not hypothetical alternative deployments.