Contributing ============ We welcome contributions to Julee! This guide will help you get started. Development Setup ----------------- 1. Fork and clone the repository:: git clone https://github.com/yourusername/julee.git cd julee 2. Create a virtual environment:: python -m venv .venv source .venv/bin/activate 3. Install development dependencies:: pip install -e ".[dev,docs]" 4. Install pre-commit hooks:: pre-commit install Code Style ---------- We use the following tools to maintain code quality: **Ruff** Fast Python linter and formatter:: ruff check . ruff format . **Mypy** Static type checking:: mypy api domain repositories services workflows **Pre-commit** Automated checks before commit:: pre-commit run --all-files Testing ------- Running Tests ~~~~~~~~~~~~~ Run the test suite:: pytest Run with coverage:: pytest --cov Run specific test files:: pytest api/tests/test_app.py Writing Tests ~~~~~~~~~~~~~ Place tests in ``tests/`` directories adjacent to the code: - ``api/tests/`` - API endpoint tests - ``domain/*/tests/`` - Domain model and use case tests - ``repositories/*/tests/`` - Repository implementation tests Use pytest fixtures for common setup:: @pytest.fixture def sample_document(): return Document( id="test-doc", name="Test Document", content="Test content" ) def test_document_creation(sample_document): assert sample_document.name == "Test Document" Architecture Guidelines ----------------------- Domain Layer ~~~~~~~~~~~~ - Keep domain models pure and focused - Use Pydantic for validation - No infrastructure dependencies - Protocol-based repository interfaces Application Layer ~~~~~~~~~~~~~~~~~ - Use dependency injection - Keep route handlers thin - Delegate to use cases - Clear request/response models Infrastructure Layer ~~~~~~~~~~~~~~~~~~~~ - Implement repository protocols - Handle external service interactions - Proper error handling and retries - Logging for debugging Code Organization ----------------- Follow the existing structure:: julee/ ├── api/ # FastAPI application │ ├── routers/ # Route handlers │ └── tests/ # API tests ├── domain/ # Domain layer │ ├── models/ # Domain models │ ├── repositories/ # Repository protocols │ └── use_cases/ # Business logic ├── repositories/ # Repository implementations │ ├── minio/ # MinIO storage │ ├── memory/ # In-memory (testing) │ └── temporal/ # Temporal activities ├── services/ # External services ├── workflows/ # Temporal workflows └── docs/ # Documentation Pull Requests ------------- 1. Create a feature branch:: git checkout -b my-feature 2. Make your changes, don't forget tests 3. Ensure all tests pass:: pytest ruff check . mypy . 4. Commit with clear messages. Use the imperative mood, first line short. 5. Push and create PR:: git push origin feature/my-feature Documentation ------------- Update documentation for: - New features - API changes - Configuration options - Architecture changes Build docs locally:: cd docs make html open _build/html/index.html Or use autobuild for live reload:: sphinx-autobuild docs docs/_build/html Code Review ----------- All PRs require review. Reviewers will check: - Code quality and style - Test coverage - Documentation updates - Architecture consistency - Breaking changes Be responsive to feedback and iterate on your PR. License and IP -------------- By contributing, you agree that your contributions will belong to Pyx Holdings Pty. Ltd. who reserve all rights, including the right to distribute your contribution under the GPL.