Thank you for your interest in contributing! This document outlines the process and conventions for contributing to this project.
- Fork the repository.
- Create a feature branch from
main:git checkout -b feature/your-feature-name
- Make your changes following the code style guidelines below.
- Write tests for any new functionality.
- Run the test suite locally before opening a PR:
PYTHONPATH=. pytest tests/ -v
- Open a Pull Request with a concise description of your changes.
- Type hints on all function signatures.
- Docstrings in Google style on all public functions and classes.
- Logging via
logging.getLogger(__name__)— never useprint()in library code. - Pathlib for all file system operations — avoid
os.path. - Pydantic for all API request/response schemas.
- Error handling with
try/exceptthat logs the error and re-raises or returns a meaningful message. - Max line length: 120 characters.
- Formatter: Black (recommended).
- Functional components with hooks — no class components.
- Named exports for components.
- Tailwind CSS for all styling — no inline
styleattributes unless dynamic. - Axios via the shared
apiServicefor all HTTP calls. - Keep components focused: one concern per file.
- All new backend features must include unit tests in
tests/. - Use
pytestwith fixtures for shared setup. - Use
pytest.approx()for floating-point assertions. - Tests must not depend on the model being loaded (use mocks or
pytest.mark.skipif).
Follow Conventional Commits:
feat: add drift detection alerts
fix: correct PSI calculation edge case
docs: update API documentation
test: add monitoring tracker tests
chore: update dependencies
When reporting a bug, please include:
- Python version and OS.
- Steps to reproduce.
- Expected vs actual behavior.
- Relevant error logs.
By contributing, you agree that your contributions will be licensed under the project's MIT License.