Finding-I from doc/reviewer/external-audit-2026-05-30.md.
Root cause: CGAL+Eigen at -O3 drives cc1plus peak RAM to ~700 MB per
Unity compilation unit (batch size 4) on ARM64. With the 1600 MB
container limit the 2nd or 3rd TU reliably triggered OOM-kill, so
test-cgal was gated off via `if: false` since 2026-05-26.
Fix: new CMake option CONFORMALLAB_LOW_MEMORY_BUILD=ON applies four
orthogonal memory-saving measures to conformallab_cgal_tests:
1. -O0 (no debug info): optimizer passes entirely skipped → cc1plus
peak drops from ~700 MB to ~150-200 MB per TU on ARM64.
Omitting -g avoids the additional object-file / linker RAM cost.
2. CONFORMALLAB_USE_PCH=OFF: saves the one-time ~200 MB PCH
compilation cost; each TU re-parses CGAL headers (fast at -O0).
3. UNITY_BUILD_BATCH_SIZE=1: one source file per cc1plus invocation,
removing the "4-file template-explosion" per-unit multiplier.
4. -Wl,--no-keep-memory (GNU ld): linker releases symbol tables after
each input file → ~15-25 % less linker RSS.
Verified locally with cmake -DCONFORMALLAB_LOW_MEMORY_BUILD=ON:
277/277 CGAL tests pass, 31 s runtime (vs 2 s at -O3 — expected;
tests run 15× slower without optimizer but all correct).
CI workflow changes (cpp-tests.yml):
- test-cgal re-enabled: `if: github.event_name == 'pull_request'`
- Configure step adds -DCONFORMALLAB_LOW_MEMORY_BUILD=ON
- Container memory: 1600m → 2000m (--memory-swap=3000m for 1 GB swap
headroom), using ~half of the Pi's 3-4 GB while leaving OS margin.
CLAUDE.md updated: new flag added to compile-time options table; CI
status row corrected from DISABLED to active.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Reviewer meeting materials
A single landing page for the three documents associated with an external-reviewer meeting. The materials are written for a peer who actively publishes in discrete differential geometry — specifically the decorated-DCE / Penner-coordinates / hyperideal-polyhedra / canonical-tessellations research line — and who would potentially use conformallab++ as numerical infrastructure for their own future experiments.
| Document | Audience | Purpose |
|---|---|---|
briefing.md |
the reviewer | one-page orientation: what the project is, where to look first, what we want from them |
questions.md |
the reviewer | the 5 concrete decisions we want their opinion on (skim before the meeting) |
agenda.md |
me | my own meeting playbook: timing, order, the "no" question, post-meeting memo template |
After the meeting, a fourth file 2026-XX-XX-meeting-notes.md should
land here too — the memo template at the bottom of agenda.md is the
suggested structure.
When to send to the reviewer
- briefing.md + questions.md: as part of the meeting-confirmation email, ~5 business days before the meeting. Subject line: "Pre-read for our conformallab++ chat (~15 min)".
- agenda.md: never send. This is internal scaffolding.
Hub-Page durability
The reviewer hub HTML at https://tmoussa.codeberg.page/ConformalLabpp/
is published from doc/reviewer/hub.html in the repo (not from a
detached preview branch). This means:
- Merging any of the open PRs into
maintriggers.gitea/workflows/doxygen-pages.ymlwhich republishes the hub alongside fresh Doxygen HTML — the reviewer URL stays live across merges with no manual intervention. - The hub is source-controlled, so changes are reviewable via PR like any other doc, and old versions live in git history.
- The original Doxygen index moves to
/doxygen.htmlwhenever the hub override is active; both are reachable from the hub itself.
Quick links the reviewer should bookmark
- 🌐 Reviewer-hub landing page: https://tmoussa.codeberg.page/ConformalLabpp/ (the hub shows status badges, a "what's new" banner with the most recent delta, the research-alignment table, and direct links into every document below)
- 📦 Source: https://codeberg.org/TMoussa/ConformalLabpp
- 📝 Architecture decisions (incl. the Q7 "no" prompt):
../architecture/locked-vs-flexible.md - 📐 Schläfli derivation (for Q3):
../math/hyperideal-hessian-derivation.md - 📚 Literature index (for Q1 + Q3):
../math/references.md - 🗺️ Per-phase roadmap (for Q1):
../roadmap/phases.md - 🧪 Research-track entries with acceptance criteria (Q1 + Q2):
../roadmap/research-track.md