Thank you for your interest in improving METAINFORMANT! This guide covers contribution workflows, standards, and review process.
- Fork the repository on GitHub
- Clone your fork locally
- Create branch:
git checkout -b my-feature - Install dev dependencies:
uv pip install -e ".[dev,test,docs]" - Make changes following Project Standards
- Run tests:
scripts/run_tests.sh(must pass) - Run lint:
pre-commit run --all-files - Commit (clear message → conventional commits)
- Push → open PR on GitHub
| Area | What's Needed | Contact |
|---|---|---|
| New modules | Bioinformatics domain (epigenomics, proteomics, metabolomics) | @maintainers |
| Documentation | Tutorials, example code, module guides | @docs-team |
| Performance | NumPy/SciPy optimization, GPU support | @perf-team |
| Cloud | AWS/Azure support, Kubernetes, workflow engines | @cloud-team |
| LLM Integration | New MCP tools, Claude/Cursor plugins | @ml-team |
| Bug fixes | Issues tagged bug or help wanted |
Any maintainer |
- Python 3.11+ only (no 3.10 compatibility)
- Type hints required for all public functions (PEP 484)
- Docstrings: Google style — parameters, returns, raises
- Line length: 100 chars (not 79) — black will format
- Imports: Standard lib → third-party → local, sorted by isort
# Good
from typing import List
import numpy as np
from metainformant.dna import sequences
# Bad
import numpy as np, from metainformant.dna import sequences- Location:
tests/<module>/test_<feature>.py - One assertion per test (one concern per test)
- Fixtures in
tests/conftest.py(reusable) - Run:
scripts/run_tests.sh(CI-parity wrapper) - No mocks for internal functions — use real code (NO_MOCKING_POLICY.md)
Follow Conventional Commits:
feat(rna): add differential expression for multi-factor designs
fix(gwas): correct allele frequency calculation in plink reader
docs(cloud): improve gcloud installation instructions
refactor(core): replace pandas with polars in io module
test(dna): add coalescent simulation coverage
chore: cleanup obsolete import in __init__.py
Format: <type>(<scope>): <subject>
type:feat,fix,docs,test,refactor,chore,build,ciscope: module name (rna,gwas,core,cloud)subject: imperative mood, no period, max 72 chars
Every feature contribution MUST include documentation update:
- Module README.md (if touching module code)
- Add usage examples for new function
- Update "Key Functions" table with signature
- Add "See Also" cross-reference if related to other modules
- docs//index.md or docs//index.md
- Add 1–2 paragraph overview of feature
- Include code snippet showing typical usage
- docs/TUTORIALS.md (optional but preferred for user-facing features)
- Add section with step-by-step walkthrough
- Include expected output (console + figures)
- docstring in source code (Google style)
No docs → no merge (enforced by CI).
- Open draft PR early — get feedback before code complete
- CI must pass — all tests green, lint clean
- Address review comments within 48h
- Update CHANGELOG.md (if user-facing change) — bullet under
[Unreleased] - Request review from @maintainers team
- Merge only after at least 1 approval
- Tests added (or existing tests updated)
-
scripts/run_tests.shpasses locally - No new
TODOcomments (orTODO(#issue)with issue number) - Documentation updated (README + docs/)
- Docstrings complete (Google style)
- Type hints present (mypy clean)
- Pre-commit hooks pass (
pre-commit run --all-files) - No dead code (
vultureoptional but encouraged) - Branch rebased onto latest
main
Before filing: Check existing issues and FAQ.
Use the bug template — include:
- Python version,
metainformant.__version__ - OS (Linux/macOS/Windows + distro)
- Minimal reproducible code (ideally <20 lines)
- Error traceback (full, not partial)
- Expected vs actual behavior
- Search existing requests first (don't duplicate)
- Provide use case: "I need X because Y"
- Include example input/output if applicable
- Consider scope: Smaller features get faster review
- Discussions: GitHub Discussions (Q&A, design questions)
- Chat: Matrix room #metainformant:matrix.org (real-time help)
- Issues: GitHub Issues (bug reports, feature requests)
- Docs: Edit any
.mdfile and PR — no gatekeeping
By contributing, you agree your work is licensed under the project's Apache 2.0 license.
Questions? Open a Discussion or ping @maintainers.
Thanks to all 200+ contributors!