Thank you for helping build an entropy-driven docking engine for real-world psychopharmacology.
This document explains how to contribute while keeping the codebase fast, scientifically honest, and legally clean.
- All contributions are accepted under the Apache License 2.0.
- By opening a pull request, you agree that your changes may be redistributed under Apache-2.0.
- Do not submit GPL/AGPL-licensed code or anything derived from such projects. See
docs/licensing/clean-room-policy.md.
-
Fork and branch
Fork the repo and create a feature branch from the active dev branch (e.g.,
claude/write-implementation-MglRZ). -
Open an issue (recommended)
For new features, dependency changes, or behavior changes, open an issue describing the proposal and design.
-
Implement your change
- Follow the existing C++ style in nearby files.
- Keep performance in mind: FlexAID∆S is a docking engine, not a toy.
- Add or update tests where behavior changes.
-
Run tests locally
cmake -B build -DCMAKE_BUILD_TYPE=Release cmake --build build -j ctest --test-dir build --output-on-failure
If Python bindings are present, also run:
pytest python/tests -v
-
Open a pull request
- Summarize what you changed and why.
- Call out any API changes, new config options, or new dependencies.
- Mention any licensing or build-system impact.
-
Languages
- C++17 (or later) for the core engine.
- Python for high-level workflows, analysis, and CLI tooling.
-
Performance
- Avoid unnecessary heap allocations, hidden O(n²) loops, or branches inside hot scoring paths.
- Respect existing parallelization (OpenMP, parallel GA) and avoid race conditions.
-
Thread safety
- Any change touching GA, scoring, or ensemble statistics must document its thread-safety assumptions.
-
Error handling
- Return clear error codes in C++ or throw standard exceptions.
- In Python, raise meaningful exceptions instead of silently failing.
- Preferred licenses: Apache-2.0, BSD, MIT, MPL-2.0, PSF.
- GPL/AGPL dependencies are not allowed.
- Any new dependency must be documented in
THIRD_PARTY_LICENSES.mdand justified in the PR.
Documentation is part of the work, not an optional extra:
- Update README or
docs/for new features. - Document configuration keywords, default values, and expected ranges.
- For scientific changes, briefly state the method and key references.
We attack bad ideas and fragile methods, not people. See CODE_OF_CONDUCT.md for behavior expectations.
Harm reduction, anti-stigma, and scientific rigor are non-negotiable here. If your contribution helps people get better drugs, faster and safer, you're in the right place.