README.md: reduced from 703 to ~75 lines — what/why, status, quick start, minimal usage example, navigation table to doc/ files. doc/architecture/overall_pipeline.md: trimmed — roadmap, extension points, declarative pipeline YAML, and references sections removed (each now has its own dedicated file). Replaced with a link table. New files: doc/getting-started.md — build modes, single-test invocation, CLI doc/api/pipeline.md — full pipeline API with code for all 3 geometries doc/api/extending.md — new functionals, geometry modes, Java porting guide doc/api/contracts.md — processing unit preconditions/provides table doc/api/cgal-package.md — Phase 8 CGAL package design + YAML pipeline (TODO) doc/math/geometry-modes.md — Euclidean/Spherical/HyperIdeal comparison doc/math/references.md — all papers by module doc/roadmap/phases.md — Phases 1–10 with porting/research boundary doc/roadmap/java-parity.md — Java vs C++ feature parity table doc/contributing.md — language policy, test standards, release flow Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.6 KiB
Contributing
Language
All code, comments, documentation, commit messages, and test descriptions must be in English.
The project targets CGAL submission and international collaboration. When editing files that still contain German-language comments or documentation, replace them with English.
Git workflow
mainis protected onorigin(Gitea). Push todev, then open a pull request.codeberg/maincan be pushed to directly (public mirror, no CI).- Both remotes must stay in sync after every significant change:
git push origin HEAD:dev # triggers CI git push codeberg main # updates public mirror - Branch naming:
feature/<topic>,fix/<topic>,phase<N>-<topic>
CI
Two jobs run on push to dev/main or on pull requests:
| Job | What it tests | Trigger |
|---|---|---|
test-fast |
36 non-CGAL tests, no Boost | all branches |
test-cgal |
158 CGAL tests + 2 skips | main, dev, PRs only |
A PR is ready to merge when both jobs pass.
The runner is a self-hosted Raspberry Pi (ARM64). See .gitea/workflows/cpp-tests.yml
and .gitea/docker/Dockerfile.ci-cpp.
Test standards
Every new algorithm needs:
-
Gradient check — finite-difference verification of
G(x) = ∂E/∂x. Copy anyGradientCheck_*test suite fromtests/cgal/test_*_functional.cpp. -
Convergence test — Newton converges on a small mesh using the "natural theta" trick (see CLAUDE.md and api/extending.md).
-
Registration — add the
.cppfile tocode/tests/cgal/CMakeLists.txt.
Expected CI result: 36 + 158 tests pass, exactly 2 skipped.
The 2 skips are intentional GTEST_SKIP() stubs for Phase 9b (analytic HyperIdeal Hessian)
and Phase 9c (genus-2 homology). Do not remove them.
Code style
- C++17. Header-only (
code/include/*.hpp). No compiled library. #pragma onceat the top of every header.- Everything in the
conformallabnamespace, internal helpers inconformallab::detail. - Property map names follow the prefix convention:
"v:"(vertex),"e:"(edge),"f:"(face). - DOF index
-1always means "pinned/fixed".
Releases
Release tags follow vMAJOR.MINOR.PATCH:
# Merge dev → main, then tag
git checkout main && git merge --no-ff dev
git tag -a vX.Y.Z -m "vX.Y.Z — <one-line summary>"
git push origin main && git push origin vX.Y.Z
git push codeberg main && git push codeberg vX.Y.Z
TODO
- Define code review checklist
- Add
.clang-formatconfiguration - Document how to request CGAL package review