The new exactness suite scores (A-B) u (A^B) = A and it fails on
topology while volume is exact:
reconstruction 2.0e0 euler (axiolid)
Probe output for the two sides:
lhs vol=4.800000000 euler=4 comps=2 manifold=true
rhs vol=4.800000000 euler=2 comps=1 manifold=true
What this means
Splitting A by B and re-uniting the two pieces returns them as TWO
separate closed solids instead of re-welding them into one. chi=4
with comps=2 is exactly two closed shells (2 each); A itself is one
shell with chi=2.
The volume is right to 9 decimals because the two pieces partition A
exactly, and each piece is individually a closed manifold, so
manifold=true on both sides.
Why it went unnoticed
The previous suite scored volume only, and volume is exact here. A
manifold audit alone would also pass, since each shell is closed and
two-manifold on its own. Only the component count and the Euler
characteristic separate "one solid" from "two solids that happen to
touch", which is why this surfaced the moment those metrics were
added to the scoring.
Reproduce with --only=exactness; the reconstruction row is the
one that fails.
The new exactness suite scores
(A-B) u (A^B) = Aand it fails ontopology while volume is exact:
Probe output for the two sides:
What this means
Splitting A by B and re-uniting the two pieces returns them as TWO
separate closed solids instead of re-welding them into one. chi=4
with comps=2 is exactly two closed shells (2 each); A itself is one
shell with chi=2.
The volume is right to 9 decimals because the two pieces partition A
exactly, and each piece is individually a closed manifold, so
manifold=trueon both sides.Why it went unnoticed
The previous suite scored volume only, and volume is exact here. A
manifold audit alone would also pass, since each shell is closed and
two-manifold on its own. Only the component count and the Euler
characteristic separate "one solid" from "two solids that happen to
touch", which is why this surfaced the moment those metrics were
added to the scoring.
Reproduce with
--only=exactness; thereconstructionrow is theone that fails.