Files
ConformalLabpp/doc/roadmap/research-track.md
Tarik Moussa 26f4f0637d
Some checks failed
C++ Tests / test-fast (pull_request) Successful in 1m55s
API Docs / doc-build (pull_request) Successful in 53s
Markdown link check / check (pull_request) Successful in 50s
C++ Tests / test-cgal (pull_request) Has been skipped
C++ Tests / quality-gates (pull_request) Failing after 1m56s
docs: citation audit + correct 8 mis-citations; add Phases 12/13
External reviewer pass over the literature references. Verified entries
against arXiv/DOI/publisher and corrected misattributions that had
propagated across the docs.

Corrected citations (consistent across all docs):
- Bowers-Bowers-Lutz 2026: title was the 2017 paper's
  -> "Rigidity of Koebe Polyhedra and Inversive Distance Circle Packings"
- Liouville theorem: "Springborn 2019" -> Pinkall & Springborn,
  Geom. Dedicata 214 (2021)
- Bobenko-Pinkall-Springborn: "G&T 14 (2010)" -> G&T 19(4) (2015), 2155-2215
- Optimal Cone Singularities: "Crane, Soliman, Ben-Chen, Schroeder"
  -> Soliman, Slepcev, Crane, ACM TOG 37(4)
- Schlaefli formula: "Rivin, Springborn 1999" -> Rivin, Schlenker
- Quasiconformal distortion: "Springborn, Veselov" -> Born, Buecking,
  Springborn (arXiv:1505.01341)
- Period matrices: "Bobenko, Buecking 2009" (was Bobenko-Mercat-Schmies'
  title) -> Bobenko-Mercat-Schmies 2011 + genuine Bobenko-Buecking 2021
- Fabricated entry: "Alexa 2020, DOI 10.1145/3414685.3417840" pointed to
  an unrelated paper (Pixelor) -> Bunge, Herholz, Kazhdan, Botsch 2020
- Stripe Patterns: "Bonneel et al. 2015" -> Knoeppel, Crane, Pinkall,
  Schroeder 2015

Equation-number corrections (verified against the PDFs):
- Glickenstein 2011 "eq. 4.6" -> "§5.2" (no such equation label exists)
- Springborn 2020 "eq. 4.6" -> "§4 variational gradient"
- inversive-distance attribution softened to classical inversive distance

Other:
- DBFEnergy bibliography (separate repo) and convergence half-sentence in
  novelty-statement.md §3.3 (Bobenko-Buecking 2021)
- Status legend (implemented vs planned) at top of references.md
- New Phase 12 (decorated DCE & geometric transition, Chain A, near-term)
  and Phase 13 (canonical tessellations & polyhedral realisation, Chain B
  capstone) in phases.md + research-track.md; 10c scope-boundary note
  clarifying infrastructure vs Lutz-specific algorithms

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-29 19:17:17 +02:00

476 lines
23 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.

# Research Track — items beyond the Java port
> **Purpose:** This document consolidates everything in conformallab++
> that goes *beyond* a port of `de.varylab.discreteconformal`. Items
> listed here are **new research**, drawn from published mathematical
> sources (not from Java code). They are separated from the
> port-tracking sheet `doc/roadmap/java-parity.md` so that the porting
> work and the research work can be planned independently.
>
> **Created:** 2026-05-21, after a full doc audit that identified four
> items previously mislabelled as "ports". This document corrects the
> record and extends it with the explicit research plan for Phase
> 9b-analytic.
---
## How to read this document
Every entry has the structure:
```
### <item>
* Mathematical source(s): <papers with year, journal, equation/section>
* Java reference: NONE (or: partial — <class>, with the note "<what>")
* Status: 🔲 planned · 🟡 PR open · ✅ landed · ❌ blocked
* Acceptance criteria: <what tests/proofs must pass>
* Effort: small / medium / large
* Phase: 9b-analytic / 9c / 10a / 10b / 10c
```
The phase numbers match `doc/roadmap/phases.md`.
---
## Items already on `main` (research, not port)
### Hyper-ideal Hessian — FD (Phase 4a, ✅ landed)
* **Mathematical source:** symmetric central difference of the
analytic gradient `G = (β Θ, α θ)` (Springborn 2020 §4 for the
gradient itself).
* **Java reference:** `HyperIdealFunctional.java:295-298` declares
`hasHessian() { return false; }`**Java has no Hessian at all**.
* **Status:** ✅ landed in `code/include/hyper_ideal_hessian.hpp` Phase 4a.
* **Why a research item, not a port:** the existing Phase 4a label
describes only *when* it was added to the C++ project, not Java
parity. The Hessian is a conformallab++ addition.
* **Effort:** small (already done).
### Period matrix τ for genus 1 (Phase 7, ✅ landed)
* **Mathematical source:**
- Sechelmann (2016) *Variational Methods for Discrete Surface
Parameterization* §4 — SL(2,) reduction algorithm.
- Bobenko-Springborn (2004) §6 — period matrix definition.
* **Java reference:** partial — `PeriodMatrixUtility.java` exists in Java
with similar functionality (this *is* a port).
* **Status:** ✅ landed in `code/include/period_matrix.hpp`.
* **Note:** listed here only because parts of `phase-9a-validation.md`
reference it as research; clarification — the genus-1 period matrix is
a Java port, the **genus g ≥ 2** extension (Phase 10b) is research.
### Möbius holonomy in SU(1,1) (Phase 7, ✅ landed)
* **Mathematical source:** Bobenko-Springborn (2004) §5; Sechelmann
(2016) §3 for the SU(1,1) representation.
* **Java reference:** partial — Java has Möbius transformations but not
the holonomy-around-cut-graph computation in the same form.
* **Status:** ✅ landed in `code/include/layout.hpp` (`MobiusMap` class).
* **Why partially research:** the half-edge `uv` storage for proper
seam-aware texture atlasing is new in conformallab++.
### Cross-API consistency tests (Phase 7 stubs, ✅ landed)
* `EuclideanFunctional.GradientCheck_Hessian` and the spherical analog
were ported from Java `@Ignore` stubs and given real bodies.
* See `doc/architecture/phase-9a-validation.md` for the full mapping.
---
## Items currently on open PRs
### CP-Euclidean functional (Phase 9a.1, 🟡 PR #8)
* **Mathematical source:** Bobenko, Pinkall, Springborn (2010).
*Discrete conformal maps and ideal hyperbolic polyhedra.*
Geometry & Topology 19(4) (2015), 21552215. arXiv:1005.2698.
* **Java reference:** ✅ `CPEuclideanFunctional.java` (260 lines + 88-line
`CPEuclideanFunctionalTest.java`). **This one IS a port.**
* **Status:** 🟡 PR #8 open, 10 tests including Java-test parity.
* **Note:** listed here because the *face-based* DOF structure is new in
conformallab++ (existing functionals all have vertex/edge DOFs); the
trait API generalisation needed for it is research-flavoured but the
algorithm itself is a port.
### Inversive-distance functional (Phase 9a.2, 🟡 PR #8)
* **Mathematical sources:**
- **Luo, F.** (2004). *Combinatorial Yamabe Flow on Surfaces.*
Comm. Contemp. Math. 6(5), 765780. → edge-length formula §3,
gradient identity Lemma 3.1.
- **Bowers, P. L. & Stephenson, K.** (2004). *Uniformizing dessins
and Belyĭ maps via circle packing.* Memoirs of the AMS 170(805).
→ introduces inversive-distance circle packings. NB: the formula
`I_ij = (²r_i²r_j²)/(2 r_i r_j)` is the *classical* inversive
distance (= Glickenstein §5.2 η), not a BS-specific identity.
- **Glickenstein, D.** (2011). *Discrete conformal variations and
scalar curvature on piecewise flat two- and three-dimensional
manifolds.* J. Diff. Geom. 87(2), 201238. → §5.2 inversive-distance
parametrization ℓ²=r_i²+r_j²+2r_ir_jη; correspondence I_ij = cos θ_e
holds only up to sign/supplement (intersection at arccos(−η)).
The paper does **not** number equations as "(4.6)".
* **Java reference:** ❌ **none.** Verified empirically:
```bash
$ find /Users/tarikmoussa/Desktop/conformallab -iname "*nversive*"
(zero matches)
```
* **Status:** 🟡 PR #8 open, 11 tests including limit-case verification
and cross-validation with `euclidean_functional.hpp` at `u = 0`.
* **Acceptance criteria (all met):**
- Three limit-cases of Luo's `ℓ²` formula at machine precision
(tangent, orthogonal, inside-tangent).
- Bowers-Stephenson round-trip identity at machine precision.
- FD-vs-analytic gradient check ≤ 1e-6 on triangle, quad-strip, tetra.
- Cross-validation `G_id(0) = G_eu(0)` at 1e-10 (Glickenstein §5).
### Hyper-ideal Hessian — block-FD (Phase 9b, 🟡 PR #9)
* **Mathematical source:** per-face locality lemma:
`∂G_x/∂y = Σ_{f: x,y ∈ local(f)} ∂(β or α)/∂y at f`.
Same gradient as Phase 4a (Springborn 2020 §4).
* **Java reference:** ❌ none (`hasHessian() == false`).
* **Status:** 🟡 PR #9 open, 7 tests, measured 96× speed-up over Phase 4a.
* **Why research:** the locality lemma + 6×6 block-scatter is a
conformallab++ algorithmic contribution; it makes Hessian-based Newton
viable on meshes that the upstream Java cannot solve in reasonable
time at all (since it has no Hessian).
---
## Planned research (not yet PR)
### Hyper-ideal Hessian — full analytic (Phase 9b-analytic, 🔲 planned)
* **Mathematical sources:**
- **Schläfli, L.** (1858/60). *On the multiple integral
∫dx dy …* Quart. J. Pure & Appl. Math. → second-order Schläfli
identity: `2 dV = Σ_e aₑ dαₑ + Σ_v bᵥ dβᵥ` for any hyperbolic
polyhedron, with corresponding bilinear differential on second
derivatives.
- **Springborn, B.** (2020). *Ideal Hyperbolic Polyhedra and
Discrete Uniformization.* Discrete & Comput. Geom. → §4 for the
hyper-ideal energy whose gradient is ` Θ, α θ)`, hence
Hessian is the Schläfli bilinear form's restriction to the
constraint surface.
- **Cho, Y. & Kim, H.** (1999). *On the volume formula for
hyperbolic tetrahedra.* Discr. Comput. Geom. 22, 347366.
→ explicit derivative formulas for `∂α/∂a`, `∂α/∂b`, `∂β/∂a`,
`∂β/∂b` at hyperbolic tetrahedra.
- **Glickenstein, D.** (2011) §4 — analogous derivation for the
cone-vertex case (extending the formulas across the ideal /
hyper-ideal vertex boundary).
* **Java reference:** ❌ none.
* **Chain of differentiation:**
```
(bᵢ, aₑ) → ℓᵢⱼ via lij() (closed form: ζ₁₃, ζ₁₄, ζ₁₅)
→ βᵢ via zeta() (law of cosines)
→ αᵢⱼ via alpha_ij() (zeta + sigma_i + sigma_ij)
```
Each arrow is a smooth function in the interior of its domain. The
chain rule then gives, for each face:
```
∂βᵢ/∂(bⱼ, aₑ) = Σ_k (∂βᵢ/∂ℓₖ) · (∂ℓₖ/∂(bⱼ, aₑ))
∂αᵢⱼ/∂(bₖ, aₑ) = (similar, with β-dependence factored)
```
These are then assembled into the local 6×6 block, scattered the
same way as block-FD (Phase 9b).
* **Acceptance criteria:**
- Each of the four partial-derivative formulas (`∂α/∂a`, `∂α/∂b`,
`∂β/∂a`, `∂β/∂b`) cross-checked against block-FD at random `x` on
every supported vertex configuration:
- all hyper-ideal vertices (general case)
- one ideal vertex (`σᵢ`/`σⱼ`/`σₖ` ideal branches)
- two ideal vertices
- Schläfli identity `H · x = 0` for the constant-vector `x` that
corresponds to a global Möbius dilation must hold numerically
(gauge null space).
- PSD property preserved (Springborn 2020 §4.3).
- Measured speed-up over Phase 9b block-FD ≥ 3× (asymptotic ~6×).
- **Correctness proof:** a short LaTeX note in
`doc/math/hyperideal-hessian-derivation.tex` showing each
Schläfli + chain-rule step with edge-cases.
* **Effort:** large (1014 days net). Significant share of the time
is the formal derivation note and the per-case symbolic verification.
* **Phase:** 9b-analytic.
* **Why deferred:** Phase 9b (block-FD) already removes the practical
Hessian bottleneck (96× speed-up measured). Analytic gives only
another ~6× but at substantial implementation + verification cost.
Land on demand when profiling on a real V > 5000 application points
to it as the new bottleneck.
---
### Inversive-distance Hessian — full analytic (Phase 9a.2-analytic, 🔲 planned)
* **Mathematical source:** Glickenstein, D. (2011) §5.2 (inversive-distance parametrization ℓ²=r_i²+r_j²+2r_ir_jη).
* **Java reference:** ❌ none.
* **Chain:** `(uᵢ, uⱼ) → ℓᵢⱼ → αᵢⱼ` with `∂ℓ²/∂u_i = 2(r_i² + I r_i r_j)`.
* **Effort:** medium (57 days, less involved than HyperIdeal because
the chain has fewer levels and no `σ` intermediaries).
* **Status:** 🔲 planned, mirrors Phase 9b-analytic in spirit.
---
### Non-Euclidean cone extensions (Phase 9d.2, 🔲 planned)
* **Mathematical sources:**
- **Bobenko, Lutz** (2025). *Decorated Discrete Conformal Equivalence in
Non-Euclidean Geometries.* Discrete & Comput. Geom. arXiv:2310.17529.
→ §3: Penner-coordinate decoration unifies cone singularities (Θᵥ ≠ 2π)
and hyperideal cusps (Θᵥ = 0) in a single algebraic framework valid in
Euclidean, spherical, and hyperbolic geometry.
- **Soliman, Slepčev, Crane** (2018). *Optimal Cone Singularities
for Conformal Flattening.* ACM Trans. Graph. 37(4), Art. 105. DOI: 10.1145/3197517.3201367.
→ L¹-optimal cone placement via a sparse-recovery optimisation over the
curvature deficit Kᵥ = 2π Θᵥ; directly gives the set of cone angles
to prescribe for a near-flat conformal parametrisation.
- **Lutz** (2024). *PhD thesis, TU Berlin.* DOI: 10.14279/depositonce-20357.
→ Full proofs for both non-Euclidean decorated DCE variants; single reference
covering 9d.2, 10b, and 10c.
* **Java reference:** ❌ **none.** Java `ConesUtility.java` handles only the
Euclidean case; the non-Euclidean extension is new research.
* **Scope:**
- Extend `cones_utility.hpp` (Phase 9d.1, Java port) to accept prescribed
cone angles in HyperIdeal and Spherical modes.
- Integrate the Bobenko-Lutz decoration into the variational framework of
`hyper_ideal_functional.hpp` and `spherical_functional.hpp`.
- Optionally: implement the Crane 2018 L¹-optimiser as a helper that
suggests cone positions automatically from the input curvature.
* **Status:** 🔲 planned; no PR yet.
* **Effort:** medium (12 weeks for Euclidean→HyperIdeal/Spherical extension;
+1 week if Crane 2018 optimiser is included).
* **Acceptance criteria:**
- Prescribed Θᵥ ≠ 2π in HyperIdeal mode: Gauss-Bonnet check passes with
`2π·χ = Σ Θᵥ Σ αᵢⱼ` for given cone angles.
- Newton convergence on a mesh with two manually placed cone singularities
(Euclidean, Spherical, HyperIdeal).
- Cross-validation: at Θᵥ = 2π for all v, output equals existing non-cone solver.
---
### Polygon Laplacian (Phase 9f, 🔲 planned)
* **Mathematical sources:**
- **Alexa, Wardetzky** (2011). *Discrete Laplacians on General Polygonal
Meshes.* ACM SIGGRAPH 2011. DOI: 10.1145/1964921.1964997.
→ Virtual-node construction: each polygon face is replaced by a virtual
central node connected to all vertices; cotangent weights are computed
per sub-triangle; the resulting operator is symmetric and positive
semi-definite, mirroring Pinkall-Polthier for triangulations.
- **Bunge, Herholz, Kazhdan, Botsch** (2020). *Polygon Laplacian Made Simple.*
Computer Graphics Forum 39(2), 303313. DOI: 10.1111/cgf.13931.
→ virtual-vertex construction with error analysis. (DEC alternative:
de Goes, Butts, Desbrun 2020, ACM TOG 39(4), DOI 10.1145/3386569.3392389.)
* **Java reference:** ❌ **none.**
* **Scope:**
- Implement `polygon_laplacian.hpp` following the virtual-node construction.
- Slot it into `newton_solver.hpp` as a drop-in replacement for
`euclidean_hessian.hpp` when the input mesh is non-triangular.
- No change to the energy functional — only the Hessian approximation changes.
* **Status:** 🔲 planned; pure research, no Java reference.
* **Effort:** medium (~2 weeks core + tests; +1 week Newton integration).
* **Acceptance criteria:**
- Operator is symmetric and PSD (checked via `LDLT.info() == Success`).
- On a pure triangle mesh, output equals `euclidean_hessian.hpp` result.
- Newton convergence on a quad mesh (e.g., structured grid) with the
polygon Laplacian Hessian.
---
### Genus g ≥ 2 fundamental domain (Phase 9c, 🔲 planned)
* **Mathematical sources:**
- **Poincaré, H.** (1882). *Théorie des groupes fuchsiens.*
Acta Math. 1, 162. → 4g-gon construction.
- **Sechelmann** (2016) §5 for the canonical-form algorithm.
* **Java reference:** ✅ partial — `FundamentalPolygonUtility.java`
(698 lines) + `CanonicalFormUtility.java` (532 lines) exist; this is
a port-with-research-extensions (the C++ side will need to bridge to
the cut-graph + holonomy infrastructure already in conformallab++).
* **Effort:** large (1014 days).
* **Status:** roadmap item, no PR yet.
* **Known prerequisite bug (latent, 2026-05-29):** the holonomy-extraction
blocks in `spherical_layout` and `hyper_ideal_layout` (`layout.hpp`)
repeat the flawed single-development pattern that produced garbage τ for
the Euclidean path before the 2026-05-29 fix. They read the
translation / Möbius deck transformation from one full-surface
development plus a one-sided apex trilateration, instead of developing
across only the **dual** spanning tree and measuring the shared-edge
displacement between two independent developments (as the corrected
`detail::euclidean_holonomy` now does). These blocks are currently dead
code — every caller passes `holonomy == nullptr` — but Phase 9c/10b will
exercise the hyperbolic path. Fix = add `detail::spherical_holonomy` /
`detail::hyperbolic_holonomy` mirroring `detail::euclidean_holonomy`.
The hyperbolic mirror additionally needs `cpp_dec_float_50` (group-relation
product ∏gᵢ = Id overflows `double`; see CLAUDE.md high-precision note).
---
### Discrete holomorphic and harmonic 1-forms (Phase 10a, 🔲 planned)
* **Mathematical sources:**
- **Mercat, C.** (2001). *Discrete Riemann surfaces and the Ising
model.* Comm. Math. Phys. 218, 177216. → discrete complex
structure on a quad mesh.
- **Bobenko, A. I. & Springborn, B.** (2004) §6 — discrete
harmonic and holomorphic 1-forms on triangulated surfaces.
* **Java reference:** ✅ `DiscreteHarmonicFormUtility.java` (657 lines)
+ `DiscreteHolomorphicFormUtility.java` (285 lines). Port-with-
research: the C++ port can choose between literal Java translation
and a redesign that uses `cut_graph.hpp` + `period_matrix.hpp`
natively (research opportunity).
* **Effort:** very large (3+ weeks); see java-parity.md.
---
### Siegel period matrix Ω ∈ H_g (Phase 10b, 🔲 planned)
* **Mathematical sources:**
- **Bobenko-Springborn (2004)** §6 for the discrete formula
`Ω_{ij} = ∫_{b_j} ω_i`.
- Siegel-fundamental-domain reduction algorithm (Gottschling 1959).
* **Java reference:** ✅ partial — `DiscreteRiemannUtility.java`
(186 lines).
* **Acceptance criteria:** `Ω` symmetric, `Im(Ω) > 0`, in the standard
fundamental domain of `Sp(2g, )`.
* **Effort:** medium (1 week after 10a).
---
### Full uniformization for genus g ≥ 2 (Phase 10c, 🔲 planned)
* **Mathematical source:** classical (Poincaré 1883; Bers 1960);
Sechelmann 2016 §6 for the discrete instance.
* **Java reference:** ❌ none — Java has the polygon + period matrix
pieces but does not assemble them into a Fuchsian group representation.
* **Status:** **fully new research** — depends on 9c + 10a + 10b.
* **⚠️ Scope boundary:** 10c delivers the *infrastructure* (Fuchsian-group
representation + H²/Γ embedding on the Sechelmann/Bobenko-Springborn path).
The Lutz-*specific* algorithms (canonical Delaunay tessellation in Penner
coordinates, Epstein-Penner hull, Weeks-flip, polyhedral realisation) are
**not** auto-delivered by reaching 10c — they are split out as **Phase 13**
(Chain B capstone), which sits on top of this runway.
---
### Decorated DCE & geometric transition (Phase 12, 🔲 planned — near-term, Chain A)
* **Mathematical sources:**
- **Bobenko, Lutz** (2025). *Decorated Discrete Conformal Equivalence in
Non-Euclidean Geometries.* Discrete & Comput. Geom. arXiv:2310.17529. §3
— Penner-coordinate decoration unifying Euclidean/spherical/hyperbolic
DCE; continuous deformation at fixed discrete conformal invariant.
- **Lutz** (2024). *PhD thesis, TU Berlin.* DOI: 10.14279/depositonce-20357.
* **Java reference:** ❌ none.
* **Builds on (✅ landed):** `inversive_distance_functional.hpp` (9a.2),
`hyper_ideal_functional.hpp` (Springborn 2020), `spherical_functional.hpp`
— the decoration is a re-parametrisation of these, not a new solver.
* **Does NOT require:** 9c / 10a / 10b / holonomy-bug fix. This is the
**short path**: the earliest Lutz-adjacent result, independent of Chain B.
* **Scope:** (1) Penner-coordinate decoration layer ↔ classical inversive
distance `ℓ²=r_i²+r_j²+2r_ir_jη`; (2) curvature-transition driver κ∈{+,0,}
at fixed invariant; (3) validation harness + example gallery.
* **Acceptance criteria:**
- Decoration round-trip `I_ij ↔ (r_i,r_j,)` at machine precision.
- At κ=0 bit-for-bit match with the 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 agreement of the invariant on one test surface.
* **Effort:** medium (functionals exist; reparametrisation + driver + tests).
---
### Decorated canonical tessellations & polyhedral realisation (Phase 13, 🔲 planned — Chain B capstone)
* **Mathematical sources:**
- **Lutz** (2023). *Canonical Tessellations of Decorated Hyperbolic
Surfaces.* Geom. Dedicata 217. arXiv:2206.13461 — canonical (weighted-
Delaunay-analogue) tessellation + dual; Epstein-Penner convex hull in
Minkowski space; Weeks-flip extension.
- **Bobenko, Lutz** (2024). IMRN 2024(12), 95059534. arXiv:2305.10988 —
discrete uniformization theorem for decorated surfaces.
- **Lutz** (2024). *PhD thesis* (depositonce-20357) — polyhedral realisation.
- Rigidity backing: **Bowers, Bowers, Lutz** (2026), arXiv:2601.22903.
* **Java reference:** ❌ none.
* **Prerequisites (the "given Voraussetzungen", all must be in place):**
✅ `cut_graph.hpp` (2g seams) · 🔲 Phase 9c (fundamental domain) ·
🔲 Phase 10a (1-forms) · 🔲 Phase 10b (period matrix Ω) ·
🔲 Phase 10c (Fuchsian group / H²/Γ) ·
🔲 holonomy-bug fix (`detail::spherical_holonomy` /
`detail::hyperbolic_holonomy` + `cpp_dec_float_50`; see Phase 9c block) ·
🟡 Phase 12 (Penner-coordinate decoration layer — reused here; land first).
* **Scope:** (1) Penner-coordinate canonical tessellation + dual on the
H²/Γ embedding from 10c; (2) Epstein-Penner hull + Weeks-flip to reach the
canonical decomposition; (3) polyhedral realisation of the uniformised
genus-g surface.
* **Acceptance criteria:**
- Canonical tessellation unique & flip-stable (Weeks-flip terminates,
start-triangulation-independent).
- Penner-coordinate consistency with the Phase 12 decoration 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 — gated on the full 9c/10a/10b/10c chain; the Lutz
algorithms themselves ≈ several weeks on top.
---
### geometry-central cross-comparison track (Optional, 🔲 exploratory)
Three independent items (GC-1/2/3) tracked separately in
`doc/roadmap/phases.md` and analysed in detail in
`doc/architecture/geometry-central-comparison.md`. They are **purely
exploratory**, not roadmap commitments.
| ID | Item | Effort |
|---|---|---|
| GC-1 | Output-vector cross-validation against geometry-central | small (2 days) |
| GC-2 | Intrinsic Delaunay pre-conditioning via Ptolemaic flips | medium (1 week) |
| GC-3 | Ptolemaic flip-based solver as alternative backend | research (Phase 10+) |
---
## Java features still worth porting
These are tracked separately in
[`java-parity.md`](java-parity.md), summarised here only for cross-reference:
| Java class | Lines | Suggested phase | Effort |
|---|---|---|---|
| `FundamentalPolygonUtility` + `CanonicalFormUtility` | 698 + 532 | 9c | 2 weeks |
| `CuttingUtility` + `SurgeryUtility` | 584 + 217 | 9c foundation | 2 weeks |
| `DiscreteHarmonicFormUtility` | 657 | 10a | 2 weeks |
| `DiscreteHolomorphicFormUtility` | 285 | 10a | 2 weeks |
| `CanonicalBasisUtility` | 337 | 10a prereq | 1 week |
| `DualityUtility` + `HomologyUtility` | 308 + 122 | 10a support | 1 week |
| `DiscreteRiemannUtility` | 186 | 10b | small |
| `HyperbolicCyclicFunctional` | 530 | 10bc | 2 weeks |
| `QuasiisothermicUtility` + `SinConditionApplication` | ~1 200 | 10b | 3 weeks |
| `KoebePolyhedron` | 321 | 10c | 2 weeks |
| `StereographicUnwrapper` | 266 | 10b' (Sphere→ atlas) | small (~3 days) |
| `CircleDomainUnwrapper` | 570 | 11+ (multiply-connected planar regions) | large (~2 weeks) |
| `MobiusCenteringFunctional`, `ElectrostaticSphereFunctional` | 289 + 127 | 10c (optional) | small |
Total identified backlog: ~6 500 Java lines, estimated ~5 months of work
to bring it all over. None of it changes the **mathematical** scope —
all 11 items above sit within Phases 9c, 10a, 10b, 10c.
---
## Maintenance rule
If a future PR claims "ports X from Java", **first verify** by:
```bash
find /Users/tarikmoussa/Desktop/conformallab -iname "*X*"
grep -r "ClassName" /Users/tarikmoussa/Desktop/conformallab/src
```
If either returns zero matches, the item is research and belongs in
**this** document, not in `java-parity.md`. Add it with the structured
template above, including the primary literature reference and the
acceptance criteria.