Thanks for your interest in contributing! This project is a small, dependency-free genetic-algorithm engine with pluggable fitness criteria. Contributions of all kinds are welcome: bug reports, documentation, new selection/crossover/mutation operators, example fitness plugins, and code.
By participating, you agree to abide by our Code of Conduct.
- Report a bug — open a bug report issue.
- Request a feature — open a feature request issue.
- Submit a change — follow the fork-based pull request flow below.
- Report a vulnerability — see SECURITY.md (do not open a public issue).
- Fork the repository to your GitHub account.
- Create a branch from
mainwith a descriptive name:git checkout -b feature/add-tournament-selection
- Make your changes following the Code Style guidelines.
- Add tests for any new functionality.
- Update documentation if your changes affect the public API.
- Commit with clear messages following Conventional Commits:
feat: add tournament selection fix: handle empty mating pool without crashing docs: clarify the fitness plugin contract - Push your branch and open a Pull Request against
main. - Sign the CLA when prompted by the CLA Assistant bot.
- Wait for review — a maintainer will review your PR within 2 weeks (SLA).
- Create a branch from
main(no fork needed if you are a member of the org). - Follow steps 3-7 above.
- Request review from the maintainer team in CODEOWNERS.
All pull requests must pass the following automated checks before merge:
- CI lint and tests (
ci) — Linting, formatting, unit tests - Security scan (
codeql,dep-scan) — SAST and dependency audit - License check (
license-check) — SPDX headers + no-runtime-deps guard - Pattern check (
pattern-check) — No internal URLs, IPs, or corporate email addresses - CLA signed (for external contributors)
Additionally:
- At least 1 maintainer approval is required.
- All review conversations must be resolved.
- The branch must be up to date with
main.
- Follow PEP 8.
- Use Black for formatting (line length: 100).
- Use Ruff for linting.
- Use mypy for type checking.
- All public functions and classes must have docstrings.
- Keep the engine dependency-free — the
genetic_algorithmpackage must rely only on the Python standard library.
Every source file must include the copyright header:
# Copyright (c) 2026 Santander Group
# SPDX-License-Identifier: Apache-2.0Follow Conventional Commits:
| Prefix | Use |
|---|---|
feat: |
New feature |
fix: |
Bug fix |
docs: |
Documentation only |
test: |
Adding or updating tests |
refactor: |
Code refactoring (no feature/fix) |
ci: |
CI/CD changes |
chore: |
Maintenance tasks |
- Write tests for all new functionality.
- Use pytest as the test framework.
- Place tests in the
tests/directory, mirroring the source structure. - Run the full test suite before submitting a PR:
pytest
- Minimum code coverage target: 99%.
By submitting a pull request, you agree to the terms of our Contributor License Agreement. The CLA Assistant bot will automatically check your PR and ask you to sign the CLA if you have not already done so.
The CLA ensures that contributions can be distributed under the project's Apache 2.0 license.
This project follows Semantic Versioning (SemVer):
- MAJOR — Incompatible API changes
- MINOR — New features (backward-compatible)
- PATCH — Bug fixes (backward-compatible)
Releases are managed by maintainers. If you believe a release is warranted, open an issue to discuss.
Thank you for contributing to genetic-algorithm!