Contributing ============ Thank you for your interest in contributing to AI4DRPM! This document provides guidelines for contributing to the project. Development Setup ---------------- Prerequisites ~~~~~~~~~~~~ - Python 3.12+ - PostgreSQL 12+ - Redis 6.4+ - Docker and Docker Compose (for containerized development) - Poetry (for dependency management) Local Development Environment ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. **Fork the repository** on GitLab 2. **Clone your fork** locally:: git clone https://code.europa.eu/regulatory-reporting/ai4drpm.git cd ai4drpm 3. **Install dependencies** using Poetry:: poetry install 4. **Set up environment variables**:: cp .env.example .env # Edit .env with your local configuration 5. **Initialize database**:: # Start PostgreSQL and Redis (via Docker Compose) docker-compose up -d postgres redis # Run migrations poetry run alembic upgrade head 6. **Start the development server**:: poetry run uvicorn ai4drpm.main:app --reload Code Style ---------- Python ~~~~~~ - Follow `PEP 8 `_ style guide - Use type hints for all function parameters and return values - Write comprehensive docstrings following Google style - Keep lines under 100 characters Type Hints ~~~~~~~~~ .. code-block:: python # Good def process_document(document: LegalResource, user: User) -> AnalysisResult: ... # Bad (missing type hints) def process_document(document, user): ... Docstrings ~~~~~~~~~ Use Google-style docstrings:: def classify_provision(provision: LegalProvision) -> ClassificationResult: """Classify a legal provision using ML model. Args: provision: The legal provision to classify. Returns: ClassificationResult with predicted category and confidence score. Raises: ClassificationError: If classification fails. """ ... Git Workflow ------------ Branching Strategy ~~~~~~~~~~~~~~~~~~ - ``main`` - Production-ready code (protected) - ``development`` - Integration branch for features - ``feature/*`` - Individual feature branches - ``fix/*`` - Bug fix branches - ``refactor/*`` - Code refactoring branches Commit Messages ~~~~~~~~~~~~~~ Use `Conventional Commits `_ format:: feat: add new pipeline type for provision classification fix: resolve race condition in bulk operations fix!: breaking change - update API response format docs: update architecture documentation refactor: reorganize repository structure test: add unit tests for token usage tracking chore: update dependencies Pull Request Process -------------------- 1. **Create an issue first** describing the problem or feature 2. **Create a feature branch** from ``development``:: git checkout development git pull origin development git checkout -b feature/my-new-feature 3. **Make your changes** with atomic, well-described commits 4. **Run tests** to ensure nothing is broken:: pytest tests/ --cov=ai4drpm 5. **Update documentation** if the change affects user-facing behavior 6. **Push your branch** and create a pull request:: git push origin feature/my-new-feature 7. **Reference the issue** in your PR description 8. **Request review** from at least one maintainer 9. **Address feedback** and update the PR accordingly Pull Request Requirements ~~~~~~~~~~~~~~~~~~~~~~~ - All tests must pass - Code coverage must not decrease - Documentation must be updated (if applicable) - PR title follows conventional commits format - PR description clearly explains the changes Code Review Guidelines --------------------- For Contributors ~~~~~~~~~~~~~~~ - Keep PRs focused and small (under 400 lines changed) - Include screenshots for UI changes - Update CHANGELOG.md for user-facing changes - Add tests for new functionality For Reviewers ~~~~~~~~~~~~ - Focus on code quality, not personal style preferences - Request changes for missing tests or documentation - Approve when the code meets project standards - Be constructive and specific with feedback Reporting Issues -------------- When reporting issues, please include: - Python version - Operating system - Steps to reproduce - Expected vs actual behavior - Relevant log output - Screenshots (for UI issues) License ------- By contributing to this project, you agree to license your contributions under the `EUPL-1.2 `_.