Thank you for your interest in contributing to GNN! This project benefits from contributions of all kinds — from bug reports and documentation improvements to new pipeline modules and framework integrations.
- Python 3.11+
- UV package manager (installation)
- Git for version control
# Fork and clone the repository
git clone https://github.com/<your-username>/GeneralizedNotationNotation.git
cd GeneralizedNotationNotation
# Install dependencies
uv sync --extra dev
# Install pre-commit hooks
uv run pre-commit install
# Run the test suite to verify your setup
uv run pytest src/tests/ -vSee SETUP_GUIDE.md for detailed installation instructions including optional dependency groups.
- Search existing issues first.
- If no existing issue matches, open a new one with:
- A clear, descriptive title
- Steps to reproduce
- Expected vs. actual behavior
- Python version, OS, and relevant dependency versions
Open a GitHub Discussion or issue describing:
- The problem the feature would solve
- Your proposed approach
- Any relevant examples or references
-
Fork the repository and create a feature branch:
git checkout -b feature/your-feature-name
-
Make your changes following the conventions below.
-
Run the tests to ensure nothing is broken:
uv run pytest src/tests/ -v
-
Commit with clear, descriptive messages:
git commit -m "Add support for new matrix type in GNN parser" -
Push to your fork and open a Pull Request against
main.
All pipeline modules follow the thin orchestrator pattern:
- Numbered scripts (
src/N_module.py): Handle CLI args, logging, and delegation only (<150 lines) - Module directories (
src/module/): Contain all domain logic inprocessor.py, public API in__init__.py
- Type hints for all public functions
- Exit codes: 0 = success, 1 = error, 2 = warnings
- Tests exercise real code paths and real data dependencies
- Follow existing patterns — read neighboring modules before writing new ones
Every module must include:
src/module_name/
__init__.py # Public API
processor.py # Core logic
AGENTS.md # Module documentation
mcp.py # MCP tool registration (if applicable)
- Tests go in
src/tests/test_{module}_*.py - Run module-specific tests:
uv run pytest src/tests/test_gnn_*.py -v - Check coverage:
uv run pytest --cov=src --cov-report=term-missing - Aim for >80% test coverage on new code
- Update
AGENTS.mdin the relevant module directory - If adding a pipeline step, update
AGENTS.md,DOCS.md, andREADME.md - Use concrete examples and real outputs over promotional language
Pull requests against main run the workflows described in .github/README.md: tests and lint (with path filters), docs audit when Markdown or doc/ changes, dependency review, CodeQL, and workflow lint when .github/workflows/** changes.
Before opening a PR, align locally where possible:
# Using just (recommended)
just lint # Ruff lint check
just test # Fast test suite
just test-mod MODULE # Test specific module
# Or manually
uv sync --frozen --extra dev
uv run pytest -m "not pipeline and not mcp" --tb=short -q
uv run ruff check src/
uv run python doc/development/docs_audit.py --strictFor workflow YAML edits, run actionlint .github/workflows/*.yml (see the hub doc for install options). Full suite (including pipeline/MCP-marked tests) is heavier than CI; use uv run pytest src/tests/ -v when your change touches those areas.
- Keep PRs focused on a single change
- Include a description of what changed and why
- Reference any related issues (e.g., "Fixes #42")
- Ensure all tests pass before requesting review
- Update documentation if your change affects user-facing behavior
Follow the project Style Guide for formatting and naming conventions. Key points:
- Python code follows PEP 8
- GNN files use Markdown with structured sections (see GNN Syntax)
- Commit messages should be imperative ("Add feature" not "Added feature")
If you discover a security vulnerability, please follow the reporting process in SECURITY.md. Do not open a public issue for security vulnerabilities.
Please review and follow our Code of Conduct. We are committed to providing a welcoming and inclusive experience for everyone.
Contributors are recognized in release notes, the CHANGELOG, and the contributors graph.
- Check the documentation
- Open a GitHub Discussion
- See SUPPORT.md for additional help channels