Thanks for wanting to help. Here's how to do it without making anyone's life harder.
- Read the relevant docs — Understand DSC, WMC, REO, or whichever pillar relates to your contribution.
- Check existing issues — Someone may already be working on what you have in mind.
- Open an issue first — For significant changes, discuss your approach before writing code.
- Fork the repo
- Create a branch (
git checkout -b feature/your-thing) - Make your changes
- Test them (seriously, please test)
- Open a PR
- Does one thing — Don't bundle unrelated changes
- Has a clear title — "Fix X" or "Add Y", not "Updates"
- Explains why — The what is in the code; tell us the why
- Doesn't break things — Run the tests before submitting
- Bug fixes (always welcome)
- Documentation improvements (very welcome)
- Performance improvements (show benchmarks)
- New features (open an issue first to discuss)
- Research contributions (if extending DSC/WMC/REO mathematics, include formal definitions)
- Massive refactors without discussion
- "Improvements" that add complexity without clear benefit
- Formatting-only changes (unless there's a real reason)
- Features that solve problems nobody has
- Keep it simple
- Prefer clarity over cleverness
- If you need a comment to explain it, maybe simplify it
- Follow the existing patterns in the codebase
- TypeScript/JavaScript: Use TypeScript where available
- Python: PEP 8, type hints preferred
- Commits: Conventional commits format (
feat:,fix:,docs:, etc.)
By contributing, you agree that your contributions will be licensed under the same terms as the project:
- Open source: AGPL-3.0
- Commercial licensing: Contact [email protected]
If you're contributing on behalf of an organization, ensure you have authority to do so.
- Licensing: [email protected]
- Security: [email protected]
- General: Open an issue in the relevant repository
The best contribution is one that makes the codebase simpler, not more complex.