3.3 KiB
Contributing to smath
Welcome to smath contributors!
This document contains a set of guidelines to contribute to the project. If you feel like there's a mistake or something can be improved to this document, feel free to propose changes in a pull request.
Philosophy
smathitself should be kept header only, in a single file.smathshould be simple and easy to use.
Development setup
You can work with either Nix (recommended, same tooling used in CI) or a local CMake toolchain.
Option 1: Nix
Make sure you have flakes enabled and then execute the following to enter the shell:
nix develop
You can also run direnv allow if you have direnv installed and configured.
Option 2: Local toolchain
Requirements:
- C++23-capable compiler
- CMake (3.15+)
- Ninja (recommended)
Configure and build
cmake -S . -B build -G Ninja -DSMATH_BUILD_TESTS=ON -DSMATH_BUILD_EXAMPLES=ON
cmake --build build
Running tests
ctest --test-dir build --output-on-failure
Code style
This project uses clang-format to maintain a consistent code style. Before opening a pull request, format changed C++ files:
git ls-files '*.hpp' '*.cpp' | xargs clang-format -i
AI-assisted contributions
AI-assisted contributions are allowed, subject to the following:
-
A human must be in the loop at all times. AI tools may assist, but a human contributor must drive the work, review and understand every generated change, and take full responsibility for it. Do not submit code you have not read and understood.
-
The assistance must be disclosed. Any commit produced with material AI help must carry an
Assisted-by:trailer using a format similar to the Linux kernel's AI coding assistant format:Assisted-by: AGENT_NAME:MODEL_VERSIONAGENT_NAMEis the AI tool or framework (e.g. Codex, Claude, ...).MODEL_VERSIONis the full model identifier, all lowercase, including any numeric, snapshot, or version suffix. Do not shorten it to the model family (e.g. use gpt-5-5, not gpt-5; use claude-opus-4-8, not claude-opus). -
Do not add
Co-authored-by:trailers for the AI assistant. TheAssisted-by:trailer already serves that purpose. -
The human contributor still signs off (see above).
Signed-off-by:is the human's certification of, and responsibility for, the change.Assisted-by:only records which tool helped. It does not replace the sign-off or the human review.
Unreviewed, bulk, or fully-automated submissions are not accepted.
Pull requests
- Keep changes focused and scoped to one topic.
- Add or update tests when behavior changes.
- Ensure the project builds and tests pass locally.
Commit style
Use the commit message format: <category>: <brief>.
Allowed categories: feat, fix, test, docs, ci.
Examples:
feat: add as_matrix() to quaternionfix: correct mat4 approx_equal ignoring a columntest: add tests for vector swizzle edge casesdocs: fix typo in README.mdci: update nix build command in pull request workflow
If a commit fixes a tracked issue, include an issue-closing footer: Closes: #<num> (example: Closes: #42).
Reporting issues
When opening an issue, include:
- what you expected to happen
- what happened instead
- a minimal reproducible example
- compiler and platform details