Files
ConformalLabpp/CHANGELOG.md
Tarik Moussa 540f71a629
Some checks failed
C++ Tests / test-fast (pull_request) Successful in 2m25s
API Docs / doc-build (pull_request) Successful in 53s
C++ Tests / test-cgal (pull_request) Failing after 10m32s
release: v0.9.0 — finalise PR #11 with CHANGELOG, version bump, stub cleanup
Closes the v0.9.0 release loop on top of Phase 9a-Newton + Phase 8b-Lite:

* CHANGELOG.md (NEW) — Keep-A-Changelog format, with v0.9.0 entry
  detailing all Phase 9a / 9b / 8b-Lite contents and the doc-audit
  corrections that landed via PR #10.

* CITATION.cff — version 0.7.0 → 0.9.0, date 2026-05-18 → 2026-05-22.

* Stale HDS-port stubs removed (13 GTEST_SKIPs total):
  - code/tests/test_spherical_functional.cpp
  - code/tests/test_hyper_ideal_functional.cpp
  - code/tests/test_hyper_ideal_hyperelliptic_utility.cpp
  These referenced a "HDS port (Phase 4)" that never happened —
  CoHDS was intentionally replaced by CGAL::Surface_mesh, and the
  functional tests live in code/tests/cgal/test_*_functional.cpp.

* Test-count updates everywhere:
  - Non-CGAL  36 → 23  (drop = 13 deleted stubs)
  - CGAL      176 → 227
  - Total     212 → 250  (+38 net, 0 skipped)
  Files: README.md, CLAUDE.md, CHANGELOG.md, scripts/try_it.sh,
         doc/api/tests.md, doc/contributing.md, doc/getting-started.md,
         doc/math/validation.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 04:27:24 +02:00

6.4 KiB
Raw Permalink Blame History

Changelog

All notable changes to conformallab++ are recorded here. Format follows Keep a Changelog; the project uses Semantic Versioning.


[0.9.0] — 2026-05-22

The “DCE-complete + CGAL-surface-complete” release. Two new discrete- conformal models, the analytic-Hessian optimisation for HyperIdeal, the CGAL public API surface for all five models, and a full documentation audit that corrects four pre-existing port-vs-research mis-labels.

Added — new functionals (Phase 9a)

  • code/include/cp_euclidean_functional.hppCP-Euclidean functional (face-based circle packing), Bobenko-Pinkall-Springborn 2010. Direct port of CPEuclideanFunctional.java (260 Java lines + 88-line test). Analytic 2×2-per-edge Hessian h_jk = sin θ / (cosh Δρ cos θ).
  • code/include/inversive_distance_functional.hppInversive-Distance functional (vertex-based, Luo 2004 + Glickenstein 2011). No Java original — implemented from the literature with Bowers-Stephenson 2004 initialisation. Cross-validated against the Euclidean functional at the natural initial geometry (Glickenstein §5).

Added — Newton solvers (Phase 9a-Newton)

  • newton_cp_euclidean() — uses the analytic Hessian.
  • newton_inversive_distance() — uses FD Hessian; analytic via Glickenstein 2011 eq. (4.6) tracked in research-track.md as Phase 9a.2-analytic.

Added — Hessian optimisation (Phase 9b)

  • hyper_ideal_hessian_block_fd() — per-face 6×6 block-local Hessian for HyperIdeal. 96.5× speed-up measured on a 200-face mesh (V=202, 603 DOFs), full-FD 226 ms → block-FD 2.3 ms.
  • Java parity note: HyperIdealFunctional.java:295-298 declares hasHessian() == false; both FD variants are conformallab++ research extensions beyond the Java port.

Added — CGAL public API surface (Phase 8b-Lite)

  • <CGAL/Discrete_conformal_map.h> extended with discrete_conformal_map_spherical() and discrete_conformal_map_hyper_ideal().
  • <CGAL/Discrete_circle_packing.h>Default_cp_euclidean_traits + discrete_circle_packing_euclidean().
  • <CGAL/Discrete_inversive_distance.h>Default_inversive_distance_traits
    • discrete_inversive_distance_map().
  • <CGAL/Conformal_layout.h> — thin CGAL-namespace re-exports of euclidean_layout, spherical_layout, hyper_ideal_layout.

All five DCE models are now reachable from a single #include <CGAL/Discrete_*.h>.

Added — documentation

  • doc/roadmap/research-track.md — new consolidated catalogue of every conformallab++ item that goes beyond the Java port, with full literature citations and acceptance criteria. Includes the Phase 9b-analytic plan (Schläfli 1858 + Springborn 2020 §4 + Cho-Kim 1999 + Glickenstein 2011 §4).
  • doc/architecture/phase-9a-validation.md — line-by-line mapping CPEuclideanFunctional.java ↔ C++ port, plus three special-case verifications of Luos edge-length formula.
  • doc/roadmap/phases.md — Phase 9 split into 9a.1 (Java port) / 9a.2 (research) / 9b (research); new Phase 11+ section with optional Schottky uniformisation and Riemann-map sub-packages.
  • doc/math/references.md — five new primary literature entries (Bowers-Stephenson 2004, Glickenstein 2011, BPS 2010, Schläfli 1858/60, plus a reframed Luo 2004 entry).

Changed

  • Four port-vs-research mis-labels corrected (full audit documented in research-track.md):
    • InversiveDistanceFunctional.java does not exist in the Java repo; the C++ implementation is research, not a port.
    • HyperIdeal Hessian: Java has hasHessian()==false; C++ Hessians are research, not ports.
    • add-inversive-distance.md tutorial rewritten end-to-end.
    • references.md and java-parity.md reframed.
  • Discrete_conformal_map.h (Phase 8a MVP wrapper) now deduces the kernel from TriangleMesh::Point via CGAL::Kernel_traits rather than hard-coding Simple_cartesian<double>. Regression-guarded by KernelIsDeducedFromMeshPointType test.

Removed

  • Three stale stub test files in code/tests/ (15 GTEST_SKIPs total):
    • test_spherical_functional.cpp
    • test_hyper_ideal_functional.cpp
    • test_hyper_ideal_hyperelliptic_utility.cpp They referenced a "HDS port (Phase 4)" that never happened — CoHDS was intentionally replaced by CGAL::Surface_mesh, and the functional tests live in code/tests/cgal/test_*_functional.cpp.

CI / Infrastructure

  • .gitea/workflows/cpp-tests.yml — test-cgal memory fixed (1400→1600 MB, -j2 → -j1). Addresses OOM on ARM64 runner.
  • .gitea/workflows/doc-build.yaml — soft-fail Doxygen job (no merge-blocking).
  • Doxyfile + CMake doc target — cmake --build build --target doc.
  • 12 macOS Finder-duplicate files removed from code/include/.

Test counts

v0.7.0:  176 CGAL + 36 non-CGAL = 212 total,  13 skipped (HDS stubs)
v0.9.0:  227 CGAL + 23 non-CGAL = 250 total,   0 skipped   (+38 net, +51 CGAL)

Non-CGAL count dropped from 36 → 23 because three stale HDS-port stubs were removed (see "Removed" above) — the functionality is fully covered in the CGAL test suite where it actually lives.

Five test suites added: CGALConformalTraits, CGALDiscreteConformalMap, CPEuclideanFunctional, InversiveDistanceFunctional, HyperIdealHessian, NewtonPhase9a, CGALPhase8bLite.


[0.7.0] — 2026-05-18

The “mathematician-ready” release. See the v0.7.0 announcement in README.md (legacy) or CITATION.cff for the corresponding citation entry. Phases 17 complete: three DCE geometry modes (Euclidean / Spherical / HyperIdeal), Newton solver, BFS-trilateration layout, Gauss-Bonnet, tree-cotree cut graph, Möbius holonomy, period matrix for genus 1, fundamental domain (genus 1), texture atlas.


How to update this file

Every new release adds a new top-level section above the previous one. For non-trivial PRs that don't trigger a release, add an entry under an [Unreleased] section at the top; promote it to the next release header at tag time.

Categories (Keep-A-Changelog convention):

  • Added — new features / files / public APIs.
  • Changed — behaviour-altering changes to existing features.
  • Deprecated — features still present but slated for removal.
  • Removed — deleted features / files.
  • Fixed — bug fixes.
  • Security — security-relevant fixes.