CDT++ 1.0.0-rc3
Causal Dynamical Triangulations in C++
Loading...
Searching...
No Matches
Viewer and visual-artifact contract

cdt-viewer is a reproducible archival renderer for the CDT++ documentation, not part of the cross-platform simulation interface. It restores CGAL 6.2's Qt basic viewer as an explicit macOS opt-in while keeping the supported reference, parallel, and debug builds headless.

Supported workflow

On macOS, a clean checkout can build the viewer and run its noninteractive render smoke test with:

just viewer-build

Regenerate and validate the tracked README hero image with one command:

just viewer-render

viewer-render reads viewer/manifests/v1/hero.json, loads and validates its versioned OFF fixture and metadata sidecar, renders docs/images/S3-7-27528-I1-R1.png, and verifies the complete tracked artifact contract. The static validation is also available without building Qt:

just viewer-check

For interactive inspection after just viewer-build, omit --output:

./out/build/viewer/src/cdt-viewer --manifest viewer/manifests/v1/hero.json

The viewer CMake preset sets ENABLE_VIEWER=ON and requests the vcpkg manifest feature of the same name. That feature opts CGAL into its qt feature; CGAL owns the resulting Qt and Eigen dependency boundary. No viewer feature, Qt package lookup, or viewer target is present in an ordinary headless configure.

Versioned fixture

The canonical input is viewer/fixtures/v1/S3-7-27528-I1-R1-seed30.off, accompanied by its required .off.meta integrity and provenance manifest. It was produced from revision 8f765ee90d873e51ba2c15bd51a7e85a6558c1fa with:

./out/build/reference/src/initialize --spherical --simplices 5110 --timeslices 7 --init 1 --foliate 1 --output --seed 30 --threads 1

The fixture contains 4,940 vertices, 33,746 edges, 56,335 faces, and 27,528 simplices across timeslices 1 through 7. Its SHA-256 digest and the payload size, FNV-1a checksum, placement fingerprint, and topology fingerprint from the sidecar are checked before rendering.

Seed 30 was chosen empirically, and this tracked run matched the legacy hero's 27,528-simplex count. The seed reproduces the random inputs, not necessarily CGAL's exact tetrahedralization, so the checked-in OFF payload is the canonical rendering fixture.

Render manifest and smoke policy

viewer/manifests/v1/hero.json conforms to viewer/schema/render-manifest-v1.schema.json. It pins:

  • the fixture, provenance, digest, and expected topology;
  • CGAL, Qt, vcpkg, CMake, Ninja, platform, toolchain, and graphics versions;
  • viewport, projection, camera pose, field of view, geometry visibility, colors, point and line sizes, background, oversampling, and output path;
  • the canonical PNG digest and minimum file and foreground-pixel thresholds.

The archival style deliberately renders outward-facing colored facets, limits vertex marks to the convex hull, and derives thin black separators from color discontinuities in the finished frame. This avoids CGAL 6.2's all-interior edge pass obscuring the surface while retaining the black-wireframe and red-vertex character of the historical hero.

The CTest smoke renderer creates its PNG through Qt's framebuffer path without displaying an interactive window. It rejects dependency-version mismatches, corrupt or topologically different fixtures, wrong output dimensions, empty files, and images below the declared foreground-pixel threshold.

Exact PNG identity is required only on the canonical macOS 26.6.1 arm64, Xcode 26.6, CGAL 6.2-I-900, and Qt 6.11.1 renderer recorded by the manifest. Other environments may differ in rasterization and must instead pass fixture integrity, topology, image-dimension, nonempty-file, and foreground-pixel checks. Linux and Windows remain supported for the headless application, but are not supported viewer-generation platforms for v1.0.0.

Visual inventory

Artifact Classification Provenance and policy
docs/images/S3-7-27528-I1-R1.png Active reproducible hero Generated by just viewer-render from the versioned fixture and manifest above; referenced by the README.
docs/images/26.eps Historical archival visual Original provenance is unavailable; retained for history and not referenced by active documentation.
docs/images/26.png Historical archival visual Raster counterpart of 26.eps; original render inputs and parameters are unavailable.
docs/images/44.png Historical archival visual Original render inputs and parameters are unavailable; no reproducibility claim is made.
docs/images/t8-v68-s298.png Historical archival visual Original render inputs and parameters are unavailable; no reproducibility claim is made.

Historical visuals are intentionally not accepted as validation evidence. New active documentation visuals must add a versioned source fixture or data file, an explicit generation manifest or command, and an automated structural check; canonical raster identity should be pinned only when the rendering platform and toolchain are also pinned.