Files
ConformalLabpp/doc/roadmap/phases.md
Tarik Moussa b57528d92f docs(roadmap): add phase orchestration system mirroring the reviewer audit workflow
Brings doc/roadmap/ to the same operational level as doc/reviewer/ by adding
the two missing structural files and updating existing docs to close the gap
identified in the system review.

New files:
- doc/roadmap/phase-orchestration.md  — master phase table (model assignments,
  session IDs, status, review-gate checklist); mirrors finding-orchestration.md
- doc/roadmap/session-prompts.md      — copy-paste-ready prompts for P1–P4
  (Haiku/Sonnet/Opus) + universal Opus review gate; mirrors reviewer/session-prompts.md

Updated files:
- CLAUDE.md: roadmap section now lists porting-status.md, phase-orchestration.md,
  session-prompts.md; reviewer section adds finding-orchestration.md and
  session-prompts.md; agentic-workflow section has direct "S3 is next / P1 is next"
  entry points so agents don't need to derive the next action from scratch
- doc/roadmap/phases.md: Current-focus table at the top (7 tracks, next session
  per track, gating); cross-links to geometry-central-comparison.md,
  software-landscape.md, complexity.md added in GC and 9b-analytic sections
- doc/roadmap/porting-status.md: snapshot date updated to 2026-05-31 (post S1+S2);
  test count replaced by reference to doc/api/tests.md; §4 gains four new solver
  rows (newton_core refactor, NewtonStatus enum, diagnostics, selectable clamp mode);
  §7 gains four new research-extension rows from S1/S2
- doc/roadmap/research-track.md: header companion-docs section links to
  novelty-statement.md, software-landscape.md, and phase-orchestration.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 08:58:46 +02:00

737 lines
41 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Development Roadmap
> **Legend:** ✅ complete · 🔲 planned
>
> **Porting / research boundary:**
> Phases 17 are direct ports of the Java original and its dissertation.
> From Phase 8 onwards the work goes beyond the scope of the Java library.
> Phase 8 (CGAL package) is infrastructure. Phase 9 is porting of remaining Java features.
> Phase 10+ is independent research with no direct Java reference implementation.
---
## ◼ Current focus (as of 2026-06-01)
> **Agent entry point.** Read this box first. For model assignments, priority
> order, and ready-to-paste prompts, see
> [`phase-orchestration.md`](phase-orchestration.md) and
> [`session-prompts.md`](session-prompts.md).
> Audit-finding sessions run in parallel from `doc/reviewer/`.
| Track | Next session | Gating |
|---|---|---|
| **Audit findings** | S3: H3/H4/H5/V5/V6 — Sonnet → Opus review | None — start now |
| **Phase quick-wins** | P1: 9g.1 + 9h.1 + 9h.2 + 9d.3 — Haiku → Opus review | None — start now |
| **Research: Decorated DCE** | P2: Phase 12 — Sonnet → Opus review | None — start now |
| **Circle pattern + convergence** | P3: 9e + 9d.4 + 9g.2 — Sonnet → Opus review | None — start now |
| **Research: Analytic Hessian** | P4: Phase 9b-analytic — Opus | ⏸ awaiting reviewer Q3 |
| **Java port: genus > 1** | P5: Phase 9c — Opus | ⏸ awaiting reviewer Q4 + G0 |
| **CGAL packaging** | S6 (audit system) — Opus | ⛔ blocked on G0 (author reply pending) |
---
## ◼ Porting complete — Phases 17
```
Phase 1 Clausen / Lobachevsky / ImLi₂ special functions ✅
Phase 2 Hyper-ideal geometry (ζ, lᵢⱼ, αᵢⱼ, σᵢ, σᵢⱼ) ✅
Phase 3 CGAL Surface_mesh infrastructure + all three functionals
(Euclidean, Spherical, HyperIdeal)
+ analytical Hessians for Euclidean + Spherical
(HyperIdeal Hessian: symmetric FD — analytic deferred to 9b) ✅
Phase 4 Newton solver (SimplicialLDLT + SparseQR fallback)
+ Mesh I/O (OFF/OBJ/PLY) + example programs ✅ 68 tests
Phase 5 Priority-BFS layout + CLI app + JSON/XML serialisation ✅ 95 tests
Phase 6 GaussBonnet check/enforce, tree-cotree cut graph (2g),
exact hyperbolic trilateration, layout normalisation ✅ 121 tests
Phase 7 MobiusMap, halfedge_uv, Möbius holonomy (SU(1,1)),
period matrix τ∈ℍ + SL(2,) reduction,
fundamental domain parallelogram + tiling ✅ 176 tests
```
---
## ◼ Infrastructure — Phase 8: CGAL Package
Goal: conformallab++ as a standalone CGAL package, submission-ready, fulfilling all
CGAL package conventions with a traits-class design compatible with any CGAL-conforming
mesh type.
```
8a Traits class & concepts
→ include/CGAL/Conformal_map_traits.h
Separates MeshType, KernelType, ScalarType from the algorithm.
Enables use with any CGAL-compatible mesh, not just Surface_mesh.
→ Concept checks via static_assert / CGAL_concept_check
8b Public CGAL header hierarchy
→ include/CGAL/Discrete_conformal_map.h (user-facing entry header)
→ include/CGAL/Conformal_newton_solver.h
→ include/CGAL/Conformal_layout.h
→ include/CGAL/Conformal_cut_graph.h
All existing include/conformallab/*.hpp remain as implementation details.
8c CGAL-style documentation
→ doc/Conformal_map/PackageDescription.txt
→ doc/Conformal_map/fig/ (pipeline diagrams)
→ Doxygen comments on all public concepts and functions
→ User_manual.md + Reference_manual.md
8d CGAL test format
→ test/Conformal_map/CMakeLists.txt (CGAL-style CMake)
Existing GTest tests remain; CGAL-format tests are added alongside.
8e Declarative YAML pipeline
→ Lightweight YAML format for reproducible experiments
(specification in doc/api/cgal-package.md)
→ Validator: checks require/provide tokens before execution
→ CLI integration: conformallab_core --pipeline experiment.yml
```
---
## ◼ Phase 9 — Mixed: remaining Java port + first research extensions
> **Audit 2026-05-21:** Phase 9 was originally framed as "remaining
> porting", but a closer look at the local Java repository revealed:
> several Phase-9 items are **not** in Java at all (`InversiveDistanceFunctional`
> does not exist; `HyperIdealFunctional.java:295-298` declares `hasHessian()=false`).
> The plan below now distinguishes Java-port items from research items.
> Full research catalogue: [`research-track.md`](research-track.md).
```
9a — Circle-packing functionals (split 2026-05-19)
─────────────────────────────────────────────────────
9a.1 CPEuclideanFunctional (Java port)
→ cp_euclidean_functional.hpp
Java source: CPEuclideanFunctional.java (260 lines)
Mathematical reference: Bobenko-Pinkall-Springborn 2010
Status: 🟡 PR #8 open, 10 tests passing.
9a.2 Inversive-distance functional (RESEARCH, not a port)
→ inversive_distance_functional.hpp
Java source: NONE. Empirically verified.
Mathematical reference: Luo 2004 + Bowers-Stephenson 2004 + Glickenstein 2011
Status: 🟡 PR #8 open, 11 tests passing.
Cross-validation: G_id(0) = G_eu(0) at 1e-10 (Glickenstein §5).
9b — HyperIdeal Hessian (RESEARCH — Java has no Hessian at all)
─────────────────────────────────────────────────────────────────
9b Block-FD HyperIdeal Hessian
→ Replace full FD in hyper_ideal_hessian.hpp
Java source: NONE (HyperIdealFunctional.java:295-298 declares
hasHessian()==false; Java has NO Hessian).
Algorithm: per-face 6×6 block, scatter to global sparse matrix.
Status: 🟡 PR #9 open, 7 tests passing, ~96× speed-up measured.
9b-analytic Full analytic HyperIdeal Hessian via Schläfli identity
→ planned, see research-track.md + session-prompts.md §P4
Mathematical source: Springborn 2020 §4 + Schläfli 1858/60
+ Rivin, Schlenker 1999 "The Schläfli formula in
Einstein manifolds with boundary" (ERA-AMS 5, 1823)
+ Cho-Kim 1999 + Glickenstein 2011 §4
Algorithm: explicit chain rule through (bᵢ,aₑ) → ℓᵢⱼ → ζ₁₃/ζ₁₄/ζ₁₅ → αᵢⱼ/βᵢ
Includes: 805-line LaTeX derivation in doc/math/hyperideal-hessian-derivation.md.
Effort: 1014 days net. Trigger: profiling on V > 5000.
Complexity / scaling context: doc/math/complexity.md.
⏸ GATED: awaiting reviewer Q3 answer ("worth ~2 weeks at your mesh sizes?").
9c — Genus g > 1 fundamental domain (Java port + research extensions)
──────────────────────────────────────────────────────────────────────
9c 4g-polygon boundary walk (genus g > 1)
→ Extend compute_fundamental_domain() beyond genus 1
Java sources: FundamentalPolygonUtility.java (698 lines)
+ CanonicalFormUtility.java (532 lines)
+ CuttingUtility / SurgeryUtility (~800 lines)
+ SurfaceCurveUtility.java (360 lines, 2026-05-28
scan) — curve operations on the surface (cut-path
tracing / fundamental-domain boundary); supporting
infrastructure for the polygon construction.
Mathematical source: Poincaré 1882 + Sechelmann 2016 §5
Research component: bridging to conformallab++ cut_graph.hpp
+ holonomy infrastructure.
† PRECISION PREREQUISITE: the canonicalisation composes products of
hyperbolic isometry generators, whose entries grow exponentially.
double fails to verify the group relation ∏gᵢ = Id; Java uses
MathContext(50) (RnBig/PnBig/P2Big). Port a LOCALIZED high-precision
substrate (boost::multiprecision::cpp_dec_float_50 or MPFR mpreal)
inside the uniformization module only — NOT the core or the Eigen
solver. See CLAUDE.md Phase-9 note + java-parity.md exception.
Effort: ~2 weeks for fundamental polygon, +2 weeks for surgery
layer, +1 week integration, +~3 days high-precision substrate.
```
9d — Cone metrics + sphere utilities (Java port + research extension)
────────────────────────────────────────────────────────────────────
```
9d.1 ConesUtility (Java port: unwrapper/ConesUtility.java)
→ cone_singularities.hpp
Fills the "⚠️ data structure only" gap in java-parity.md:
- Detect interior cone vertices (angle deficit ≠ 0)
- BFS path from cone to mesh boundary → cut edge set
- Auto-placement: conjugate gradient on Θ-gradient magnitude
- Quantization: snap cone angles to π/2, π/3, π/6 for
quad / triangle / hexagonal atlas targets
Java reference: unwrapper/ConesUtility.java
Mathematical reference: Troyanov 1991 + Springborn 2020 §3
9d.2 Non-Euclidean cone extensions (RESEARCH, not in Java)
→ extend ConesUtility to HyperIdeal + Spherical modes
Java source: NONE — Java ConesUtility is Euclidean-only.
Mathematical reference:
Bobenko, Lutz 2025 "Decorated Discrete Conformal Equivalence in
Non-Euclidean Geometries" (Discrete & Comput. Geom. 2025,
arXiv:2310.17529) §3 — decorated DCE framework unifying cone
singularities and cusps in hyperbolic + spherical geometry.
Soliman, Slepčev, Crane 2018 "Optimal Cone Singularities
for Conformal Flattening" (ACM TOG 37(4), Art. 105) — L¹-optimal
automatic cone placement; directly applicable to 9d.2 algorithm.
Status: 🔲 planned
9d.3 StereographicUnwrapper + SphereUtility (Java port)
→ stereographic_layout.hpp
Stereographic projection S²→{∞} + Möbius centering for
genus-0 surfaces. Converts spherical DCE output to a flat 2-D atlas.
Java reference: unwrapper/StereographicUnwrapper.java (266 lines)
Note (2026-05-28 visualisation scan): plugin/algorithm/
StereographicTextureProjection.java (88 lines) is the texture
front-end of this same math — no separate item. The supporting
math/CP1 + ComplexUtility.stereographic are deliberately NOT
ported (redundant with std::complex + the existing MobiusMap,
see porting-status.md).
Optional companion: MercatorTextureProjection.java (47 lines) —
a distinct cylindrical conformal display projection; small
nice-to-have for the sphere-visualisation bucket, not required.
9d.4 MobiusCenteringFunctional (Java port, optional upgrade)
→ integrate into layout.hpp normalise_hyperbolic()
Variational Möbius centering via Lorentz geometry:
E = Σ log(-⟨x,p⟩/√(-⟨x,x⟩))
Supplies gradient + Hessian — replaces iterative Fréchet mean.
Java reference: functional/MobiusCenteringFunctional.java
```
9e — Circle pattern layout (Java port — complement to Phase 9a.1)
────────────────────────────────────────────────────────────────────
```
9e CirclePatternLayout + CirclePatternUtility (Java port)
→ circle_pattern_layout.hpp
Phase 9a.1 ported the CPEuclidean energy + solver; this phase
adds the embedding step (ρ values → actual vertex positions in ℝ²).
- CirclePatternUtility: compute per-face radii ρ via NTR solver
- CirclePatternLayout: embed from ρ values (intersection-angle model)
- CPEuclideanRotation: rotation-invariant CP functional variant
Java references: unwrapper/circlepattern/CirclePattern{Layout,Utility}.java
unwrapper/circlepattern/CPEuclideanRotation.java
Mathematical reference: Bobenko-Springborn 2004 variational principle
+ Bobenko-Hoffmann-Springborn 2006 "Minimal
surfaces from circle patterns" (Discrete &
Comput. Geom. 35, 2006).
```
9f — Polygon Laplacian (RESEARCH — no Java equivalent)
──────────────────────────────────────────────────────
```
9f Discrete Laplacian on general polygonal meshes
→ polygon_laplacian.hpp
Java source: NONE
Mathematical reference:
Alexa, Wardetzky 2011 "Discrete Laplacians on General Polygonal
Meshes" (ACM SIGGRAPH 2011) — virtual-node construction,
polygon cotangent weights extending the Pinkall-Polthier formula.
Bunge, Herholz, Kazhdan, Botsch 2020 "Polygon Laplacian Made
Simple" (Computer Graphics Forum 39(2), 303313) — virtual-vertex
construction with error analysis. (DEC alternative: de Goes,
Butts, Desbrun 2020, ACM TOG 39(4).)
Enables: DCE energy evaluation on quad-dominant / Voronoi /
polygon meshes without forced triangulation.
Replaces euclidean_hessian.hpp for non-triangular inputs.
Status: 🔲 planned (pure research, no Java source)
Effort: medium (~2 weeks core + tests; +1 week Newton integration).
9g — Conformal quality measures (Java port — 2026-05-28 scan)
──────────────────────────────────────────────────────────────────
9g.1 Quantitative correctness metrics for a computed conformal map
→ conformal_quality.hpp
Lifts the measure math out of the jReality plugin + convergence
layers (the math is GUI-independent). High value / low effort:
these directly strengthen the validation story for the already-
shipped genus-0/1 pipeline (doc/math/validation.md).
- IsothermicityMeasure (113 lines) — pointwise deviation
from conformality (anisotropy of the induced metric).
- DiscreteConformalEquivalencemMeasure (82 lines) — per-edge
length-cross-ratio residual vs. the conformal-equivalence
condition.
- FlippedTriangles (17 lines) — detects inverted /
degenerate triangles in a 2-D layout (embedding-validity check).
- LengthCrossRatio (12 lines) — the discrete conformal
invariant itself (per-edge), shared input for the two measures.
- ConvergenceUtility measures (~110 lines, math/float only — no
Mathematica/jReality deps): getMaxMeanSumCrossRatio
(q=(a·c)/(b·d), qfun=(q+1/q)/21), getMaxMeanSumMultiRatio
(per-face product, =1 iff conformal), and
getMaxMeanSumScaleInvariantCircumRadius (R/√A, scale-invariant
mesh-quality). The operational counterpart of LengthCrossRatio.
Java references:
plugin/visualizer/IsothermicityMeasure.java
plugin/visualizer/DiscreteConformalEquivalencemMeasure.java
plugin/visualizer/FlippedTriangles.java
heds/adapter/types/LengthCrossRatio.java
convergence/ConvergenceUtility.java
Mathematical reference: Springborn-Schröder-Pinkall 2008
(length cross-ratio = discrete conformal invariant).
Status: 🔲 planned (Java port; no new theory).
Effort: small (~3 days incl. gradient-free tests). No
dependencies — can land before 9a9f.
9g.2 Period-matrix convergence study (validation experiment — optional)
→ tests/cgal/test_period_matrix_convergence.cpp (experiment, not
a library feature)
Empirical validation for the already-shipped period_matrix.hpp +
discrete_elliptic_utility.hpp: generate a genus-1 elliptic mesh
with a known analytic τ, then refine / subdivide / add Gaussian
vertex noise and plot |τ_computed τ_expected| → 0.
Java reference: convergence/* (~1400 lines) — a CLI harness
(joptsimple) that drives the same study. Do NOT port the
harness: it depends on Mathematica via JLink and on jReality's
OBJ reader + LoopLinear subdivision. Port only the *method*:
- subdivision → igl::loop (libigl already available)
- noise → trivial (vᵢ += σ·N(0,1))
- error metric → the 9g.1 quality measures + τ residual
Status: 🔲 optional (raises empirical confidence in genus-1 τ;
no new library surface). Effort: small (~23 days).
```
9h — CLI usability extensions (infrastructure — no Java equivalent)
──────────────────────────────────────────────────────────────────
Identified by usability-audit-2026-05-31 (Finding-U11). Two independent
sub-tasks; either can land independently.
```
9h.1 Newton solver tuning parameters (~30 min)
Currently hardcoded in all three run_*() helpers:
tol = 1e-8, max_iter = 200
Add to conformallab_cli.cpp:
app.add_option("--tol", tol, "Newton gradient tolerance [1e-8]");
app.add_option("--max-iter", max_iter, "Newton iteration limit [200]");
Thread both through run_euclidean / run_spherical / run_hyper_ideal.
Update getting-started.md CLI parameter table.
Status: 🔲 planned. Effort: ~30 min. No dependencies.
9h.2 Phase-9a models in CLI (~24 hours)
The CP-Euclidean and Inversive-Distance functionals are fully
implemented in the library and exposed via the CGAL public API
(Discrete_circle_packing.h, Discrete_inversive_distance.h), but
a CLI user cannot reach them. Add:
-g cp_euclidean → run_cp_euclidean()
-g inversive_distance → run_inversive_distance()
Following the existing run_euclidean() pattern (~60 lines each).
Add both geometry strings to the CLI::IsMember validator.
Update README + getting-started.md parameter table.
Status: 🔲 planned. Effort: ~24 h. Requires: 9a complete ✅.
Java reference: none (both functionals are research / literature ports).
```
---
## ◼ New research directions — Phases 10d10g (2026 library scan)
These were identified by a full scan of the Java source tree in 2026.
They extend significantly beyond the Java port into new mathematical territory.
```
10d CircleDomainUnwrapper (KoebeAndreevThurston)
→ circle_domain_unwrapper.hpp
Conformal map of a multiply-connected planar region onto a
canonical disk-with-holes (classical complex-analysis result).
Java reference: unwrapper/CircleDomainUnwrapper.java (570 lines)
Mathematical basis: KoebeAndreevThurston + BeardonStephenson 1990
10e Quasi-isothermic maps
→ quasiisothermic.hpp
Generalisation of conformal maps for meshes where exact conformality
is unachievable (high Gaussian curvature, coarse triangulation).
Includes: Delaunay pre-conditioning, discrete Beltrami field,
sin-condition functional, Lawson-correspondence parameterization.
Java references: unwrapper/quasiisothermic/ (~1 200 lines total)
Mathematical basis: Lam 2015 + BohleLamPinkallReitebuch 2015
10f Koebe polyhedra
→ koebe_polyhedron.hpp
KoebeAndreevThurston theorem: realize every 3-connected planar
graph as a convex polyhedron with edges tangent to the unit sphere.
Connects circle packing with 3-D convex geometry.
Java reference: unwrapper/koebe/KoebePolyhedron.java (321 lines)
Mathematical basis: Koebe 1936 + Thurston 1997 (lecture notes)
10g Cyclic-symmetry functionals
→ cyclic_functional.hpp
Euclidean and hyperbolic DCE functionals reduced to a cyclic-symmetry
quotient — dramatically reduces DOFs for ornamental / symmetric surfaces.
Java references: functional/EuclideanCyclicFunctional.java
functional/HyperbolicCyclicFunctional.java (~530 lines)
```
---
## ◼ Optional / Hypothetical — geometry-central Cross-Comparison
> **Status: no planned phase — purely exploratory.**
> These items are not prerequisites for Phase 810. They are
> of interest because geometry-central (Keenan Crane, CMU) is built on the same
> mathematical foundations as conformallab++ — in particular
> **Springborn 2020** and its direct extension by
> **Gillespie, Springborn & Crane (SIGGRAPH 2021)**.
> The key difference: geometry-central solves the same problem
> (discrete conformal equivalence) using **intrinsic triangulations +
> Ptolemaic flips**, while conformallab++ applies **Newton on the
> original triangulation**.
```
GC-1 [optional, possible now]
Mathematical output comparison
→ load the same test meshes (cathead.obj, brezel.obj, torus_4x4.off) into
both libraries
→ compare UV coordinates, u-vector, residual norm
→ align normalisation conventions (u mean, scaling)
Goal: independent cross-validation of convergence points.
Effort: small Python/C++ comparison script, no library restructuring.
GC-2 [optional, useful after Phase 8]
Intrinsic Delaunay pre-conditioning
→ before the Newton solver: apply geometry-central SignpostIntrinsicTriangulation
to the input
→ Ptolemaic flips pre-condition the Hessian matrix
→ hypothesis: fewer Newton iterations on non-Delaunay inputs
→ implementable as an optional cmake flag: -DWITH_GC_PRECOND=ON
Dependency: geometry-central as an optional external dependency
(header-only parts suffice for the flip algorithm).
GC-3 [hypothetical, Phase 10+ research]
Ptolemaic flip-based solver as an alternative backend
→ instead of Newton: Ptolemaic flips + penultimate-step normalisation
(GillespieSpringbornCrane 2021 algorithm)
→ comparison: convergence radius, robustness on pathological meshes,
numerical stability on high-genus surfaces
→ relevant for conformallab++ because the Newton approach can become
unstable on strongly non-Delaunay meshes (e.g. after remeshing).
No implementation planned — conceptual note for Phase 10 research.
```
**Connection to the literature:**
The Springborn 2020 paper ("Ideal Hyperbolic Polyhedra and Discrete
Uniformization") is already implemented in conformallab++ as the HyperIdeal
geometry mode (Phase 2/3). The GillespieSpringbornCrane
2021 extension — implemented in geometry-central — augments this with
intrinsic triangulations and makes the algorithm robust against
poor input triangulations. Both share the same
mathematical core (discrete conformal equivalence, GaussBonnet,
variational principle of BobenkoSpringborn 2004).
Full architecture-level comparison (overlap analysis, adoption rationale,
scientific value): [`doc/architecture/geometry-central-comparison.md`](../architecture/geometry-central-comparison.md).
Software landscape (libigl, CGAL, pmp-library, geometry-central):
[`doc/math/software-landscape.md`](../math/software-landscape.md).
---
## ◼ Phase 10 — Genus g ≥ 2 (research with partial Java support)
Most Phase-10 items have partial Java references (utility classes for
forms and homology) but the **assembly** into a working uniformization
pipeline is research. Full catalogue with primary literature:
[`research-track.md`](research-track.md).
```
Phase 10 Global uniformization for genus g ≥ 2
10a Discrete holomorphic and harmonic 1-forms
→ Integrate basis 1-forms ωᵢ along b-cycles of the cut graph.
Mathematical reference: Bobenko-Springborn 2004 §6 + Mercat 2001.
Knöppel, Crane, Pinkall, Schröder 2015 "Stripe
Patterns on Surfaces" (ACM SIGGRAPH 2015) —
application of discrete holomorphic 1-forms to
direction field design; provides an independent
C++ reference implementation (geometry-central)
for cross-validating the Phase 10a computation.
Java sources (partial, port-with-research):
CanonicalBasisUtility.java 337 lines (homology basis)
HomologyUtility.java 122 lines
HomotopyUtility.java 57 lines (2026-05-28 scan) —
reconstructs the explicit generator *cycles* (bridge edge +
tree path via HomologyUtility.findCycle). NOT covered by
cut_graph.hpp, which yields only the 2g cut *edges*; the closed
loops are needed to integrate 1-forms along b-cycles.
DualityUtility.java 308 lines
DiscreteHarmonicFormUtility.java 657 lines
DiscreteHolomorphicFormUtility.java 285 lines
Prerequisite — DEC operator layer (2026-05-28 scan, previously
unrecorded): the four utilities above are built on the discrete-
exterior-calculus primitives in heds/dec/ (DEC.java 76 lines,
AbstractDECOperator, DECPairing, DualChain, DualForm — the d / ⋆ /
primal-dual pairing operators). Port this thin operator layer
first; the form utilities assume it exists. Effort: ~3 days.
Effort: ~6 weeks net (1 DEC layer + 4 utility ports + 1 integration).
10b Siegel period matrix Ω ∈ H_g (g×g complex symmetric, Im(Ω) > 0)
→ Ωᵢⱼ = ∫_{bⱼ} ωᵢ
→ Reduction to Siegel fundamental domain via Sp(2g,).
Mathematical reference: Bobenko-Springborn 2004 + Gottschling 1959.
Bobenko, Mercat, Schmies 2009/2011 "Conformal
Structures / Period Matrices of Polyhedral
Surfaces" (arXiv:0909.1305) + Bobenko, Bücking 2021
"Convergence of discrete period matrices ..."
(Math. Phys. Anal. Geom. 24, Art. 23) — discrete
period matrix Ωᵢⱼ on polyhedral surfaces + convergence.
Bobenko, Lutz 2024 IMRN "Decorated Discrete Conformal
Maps and Convex Polyhedral Cusps" — uniformization
theorem connecting cusps ↔ hyperideal vertices
(bridges Phase 2/3 HyperIdeal geometry to 10b).
Pinkall, Springborn 2021 "A discrete version of
Liouville's theorem on conformal maps"
(Geom. Dedicata 214, 389398; arXiv:1911.00966) —
proves uniqueness/rigidity of the discrete conformal
structure; justifies that Ω is a conformal invariant.
Java partial reference: DiscreteRiemannUtility.java (186 lines).
Requires: 10a.
Effort: ~1 week net after 10a.
10b' Alternative methods (parallel research track)
→ HyperbolicCyclicFunctional (Java, 530 lines) — completes the
classical three-mode set with hyperbolic energy.
→ Quasi-isothermic parametrisation (Lawson correspondence):
QuasiisothermicUtility.java + SinConditionApplication.java
(~1 200 Java lines combined).
→ MobiusCenteringFunctional (Java, 289 lines) — sphere centering.
→ StereographicUnwrapper (Java, 266 lines) — projects the
spherical layout S²→ via stereographic projection plus a
Möbius centring step. Closes the visualisation gap from
`discrete_conformal_map_spherical()` (currently outputs
Point_3 on S²; many downstream uses want a 2-D atlas).
Effort: small (~3 days).
Each independent; can be tackled in any order.
10c Full uniformization for genus g ≥ 2
→ Embedding as H²/Γ with Γ ⊂ PSL(2,) a Fuchsian group.
Mathematical reference: Sechelmann 2016 §6 (discrete instance);
Bers 1960 (continuous theory).
Lutz 2023 "Canonical Tessellations of Decorated
Hyperbolic Surfaces" (Geom. Dedicata 217,
arXiv:2206.13461) — canonical Delaunay tessellations
in Penner coordinates; unifies the decorated
framework with the fundamental domain construction.
Bobenko, Lutz 2024 IMRN (arXiv:2305.10988) —
discrete uniformization theorem for decorated
piecewise Euclidean surfaces.
Born, Bücking, Springborn 2015 "Quasiconformal
distortion of projective transformations and discrete
conformal maps" (arXiv:1505.01341) — error estimates for
the discrete-to-smooth conformal approximation;
quantifies how well H²/Γ approximates the smooth
hyperbolic metric.
Java reference: NONE — Java has the polygon + period matrix
pieces but does not assemble them into
a Fuchsian-group representation.
Status: **fully new research.**
Requires: 10a + 10b + Phase 9c.
⚠️ SCOPE BOUNDARY (was 10c delivers vs. was offen bleibt):
10c as scoped here builds the *infrastructure* — Fuchsian-group
representation + H²/Γ embedding on the Sechelmann/Bobenko-Springborn
uniformisation path. The Lutz-SPECIFIC algorithms it references
(canonical Delaunay tessellation in Penner coordinates, Epstein-Penner
convex-hull construction, Weeks-flip extension, polyhedral realisation)
are NOT delivered automatically by reaching 10c — they sit ON TOP of
this infrastructure and are their own implementation effort.
→ that effort is split out as **Phase 13** (Chain B capstone).
10c = runway; Phase 13 = the Lutz algorithms that land on it.
10c' Optional Java-port additions (low priority)
→ KoebePolyhedron.java (321 lines) — Koebe-Andreev-Thurston
circle packings. Adds a fifth DCE method.
Rigidity: Bowers, Bowers, Lutz 2026 "Rigidity of Koebe Polyhedra
and Inversive Distance Circle Packings" (arXiv:2601.22903)
— theoretical uniqueness backing the KAT construction.
→ ElectrostaticSphereFunctional (127 lines) — sphere
distribution baseline.
→ CirclePatternLayout / CirclePatternUtility — face-circle
pattern layouts.
None of these are required for the genus-g uniformization
pipeline; they extend the breadth of methods.
```
---
## ◼ Phase 11+ — Specialised applications (optional, deferred)
> **Status:** out-of-scope for v1.0 but recorded here so that future
> contributors don't re-discover them. Both items live in the Java
> repo as plugin sub-packages and would benefit from porting *only*
> after Phase 10 is complete (they require the period-matrix and
> fundamental-domain infrastructure to be in place first).
```
11a Schottky uniformisation
Java plugin: plugin/schottky/* (~12 Java files, ~3 000 LoC)
Mathematical basis: Schottky group — discrete subgroup
Γ ⊂ PSL(2,) generated by hyperbolic loxodromic
elements, fundamental domain a sphere with
2g disjoint discs removed.
Use case: "handlebody" uniformisation, complement of
Phase 10c's Fuchsian-group representation
(Schottky represents Riemann surfaces as
quotients of domains in S² rather than of H²).
Requires: Phase 10b (period matrix) + working
Möbius-group machinery from Phase 7.
Effort: very large (46 weeks) — significant Java
code, complex-analytic algorithms,
substantial test design.
11b Riemann maps (planar conformal mapping)
Java plugin: plugin/riemannmap/* (~6 Java files, ~1 500 LoC)
Mathematical basis: Riemann mapping theorem — every simply
connected proper subdomain of is conformally
equivalent to the unit disc. Discrete version
via circle packing or Schwarz-Christoffel-like
formulae.
Use case: Texture mapping of bounded planar regions;
classical conformal mapping for engineering
applications (electrostatics, fluid flow).
Requires: Phase 10b' QuasiisothermicUtility or the
CP-Euclidean machinery from Phase 9a.1
(depending on the chosen discrete-Riemann
algorithm).
Effort: large (34 weeks) — smaller than Schottky
but still substantial. Heavy on
visualisation; consider porting only the
algorithmic core.
11c Multiply-connected planar conformal maps (CircleDomainUnwrapper)
Java source: unwrapper/CircleDomainUnwrapper.java (570 LoC)
Mathematical basis: Riemann mapping theorem for multiply-
connected domains — every n-connected planar
region is conformally equivalent to a disk
with (n1) round holes (Koebe's "general
uniformization theorem", 1909).
Use case: Classical complex-analysis problems —
conformal mapping of an annulus, a torus
slit on a plane, fluid flow around obstacles,
electrostatics with multiple conductors.
**A use-case class conformallab++ does not
currently cover.**
Requires: Phase 10b' QuasiisothermicUtility or the
CP-Euclidean machinery from Phase 9a.1.
Effort: large (~2 weeks).
All three items are tracked here so the project memory is preserved;
none of them are roadmap commitments. See `research-track.md` for the
formal research-versus-port classification before starting any.
```
---
## ◼ Phase 12 — Decorated DCE & geometric transition (RESEARCH, near-term)
> **Note on ordering:** despite the higher number, Phase 12 is *near-term
> and independent* of Phases 9c11. It builds ONLY on already-landed code
> and is the **short path (Chain A)** to a first Lutz-adjacent scientific
> result. It does **not** require the genus-g≥2 chain (9c/10a/10b/10c) or
> the holonomy-bug fix — those gate Phase 13 (Chain B), not this.
```
12 Decorated DCE & geometric transition (no Java parent)
→ Numerical demonstration of the Bobenko-Lutz "master theory":
one discrete conformal invariant, continuously deformable across
Euclidean / spherical / hyperbolic background geometry.
Mathematical reference:
Bobenko, Lutz 2025 "Decorated Discrete Conformal Equivalence in
Non-Euclidean Geometries" (Discrete & Comput. Geom.;
arXiv:2310.17529) §3 — Penner-coordinate decoration unifying the
three background geometries; continuous deformation at fixed
discrete conformal invariant.
Lutz 2024 PhD thesis (depositonce-20357) — full proofs.
Builds on (✅ already landed):
inversive_distance functional (9a.2), hyper_ideal (Springborn 2020),
spherical functional — the decoration is a RE-PARAMETRISATION of
these, not a new solver.
Does NOT require: 9c / 10a / 10b / holonomy-bug fix.
Scope:
1. Decoration layer: per-vertex circle/horocycle radius as Penner
coordinate; map ↔ existing inversive distance I_ij (classical
formula ℓ²=r_i²+r_j²+2r_ir_jη).
2. Transition driver: deform background curvature κ ∈ {+,0,} while
holding the discrete conformal invariant fixed; solve per geometry.
3. Validation harness producing example galleries.
Acceptance criteria:
- Decoration round-trip I_ij ↔ (r_i,r_j,) at machine precision.
- At κ=0: bit-for-bit match with existing euclidean/inversive path.
- Gauss-Bonnet per geometry; invariant constant across the κ-transition
to tol (numerical witness of the Bobenko-Lutz master theorem).
- Cross-geometry: one test surface solved in all three backgrounds
shares the invariant.
Effort: medium (functionals exist; reparametrisation + driver + tests).
Status: 🔲 planned (proposed 2026-05-29).
```
---
## ◼ Phase 13 — Decorated canonical tessellations & polyhedral realisation (Chain B capstone)
> **This is the genus-g≥2 Lutz contribution.** It sits ON TOP of the
> infrastructure built by Phases 9c + 10a + 10b + 10c (see the 10c SCOPE
> BOUNDARY note above) and implements Lutz's *specific* algorithms that the
> 10c "runway" does not deliver by itself.
```
13 Decorated canonical tessellations + polyhedral realisation (no Java parent)
→ Canonical Delaunay tessellation of a decorated hyperbolic surface
in Penner coordinates, its dual decomposition, and the polyhedral
realisation of the uniformised genus-g≥2 surface.
Mathematical reference:
Lutz 2023 "Canonical Tessellations of Decorated Hyperbolic Surfaces"
(Geom. Dedicata 217; arXiv:2206.13461) — canonical (weighted-
Delaunay-analogue) tessellation + dual; Epstein-Penner convex-hull
construction in Minkowski space; Weeks-flip extension.
Bobenko, Lutz 2024 IMRN (arXiv:2305.10988) — discrete uniformization
theorem for decorated surfaces (cusps ↔ hyperideal vertices).
Lutz 2024 PhD thesis (depositonce-20357) — polyhedral realisation +
complete proofs for 9d.2 / 10b / 10c / 13.
Rigidity backing: Bowers, Bowers, Lutz 2026 (arXiv:2601.22903).
PREREQUISITES (the "given Voraussetzungen" — all must be in place):
✅ cut_graph.hpp (2g seams) — landed
🔲 Phase 9c — 4g-gon fundamental domain
🔲 Phase 10a — holomorphic/harmonic 1-forms
🔲 Phase 10b — Siegel period matrix Ω ∈ H_g
🔲 Phase 10c — Fuchsian-group representation / H²/Γ embedding
🔲 holonomy-bug fix — detail::spherical_holonomy /
detail::hyperbolic_holonomy (+ cpp_dec_float_50 for the
group-relation product ∏gᵢ = Id); see research-track.md §9c.
🟡 Phase 12 — decoration layer (Penner coords) is reused here;
strongly recommended to land Phase 12 first so the Penner-
coordinate machinery already exists.
Scope:
1. Penner-coordinate weighted-Delaunay (canonical) tessellation +
dual decomposition on the H²/Γ embedding from 10c.
2. Epstein-Penner convex-hull construction (Minkowski space) to
obtain the canonical decomposition; Weeks-flip to reach it.
3. Polyhedral realisation of the uniformised surface.
Acceptance criteria:
- Canonical tessellation is unique & flip-stable (Weeks-flip
terminates; result independent of start triangulation).
- Decoration / Penner-coordinate consistency with Phase 12 layer.
- Gauss-Bonnet + holonomy closure ∏[a_i,b_i] = Id (high precision).
- Rigidity witness: Newton finds the unique realisation on the
tangency-case test set (Bowers-Bowers-Lutz 2026).
Effort: very large (depends on the full 9c/10a/10b/10c chain landing
first; the Lutz algorithms themselves ≈ several weeks on top).
Status: 🔲 planned (Chain B capstone; gated on prerequisites above).
```