From the risk register (wiki/research/RISK_REGISTER.md, H1): every 3D packing density figure quoted in the docs (33.8/35.7/38.7/53.3/49.3%) is a Python pybullet+VHACD or Rhino-live-mesh number, NOT the net48 Core engines. This blocks any beats-benchmark claim and any service exposure of a 3D density endpoint (truth criterion c).
Task: add C# harness rows (tools/Frahan.StonePack.Harness Validator.cs) that measure honest rho = sum(MeshPackItem.MeshVolume)/(A*H_used) at verified-zero interpenetration on ETH1100 for: the shipping GreedyMeshHeightmapPacker, and a Core AABB Dlbf3dMixedSizePacker fixture. The honest-density numerator already exists (MeshPackItem.MeshVolume, signed-tetra, shipped 2026-07-06).
Done when: RESULTS.md carries a measured C# 3D density row with the harness command that produced it, replacing the inherited Python figures. Size: M.
From the risk register (wiki/research/RISK_REGISTER.md, H1): every 3D packing density figure quoted in the docs (33.8/35.7/38.7/53.3/49.3%) is a Python pybullet+VHACD or Rhino-live-mesh number, NOT the net48 Core engines. This blocks any beats-benchmark claim and any service exposure of a 3D density endpoint (truth criterion c).
Task: add C# harness rows (tools/Frahan.StonePack.Harness Validator.cs) that measure honest rho = sum(MeshPackItem.MeshVolume)/(A*H_used) at verified-zero interpenetration on ETH1100 for: the shipping GreedyMeshHeightmapPacker, and a Core AABB Dlbf3dMixedSizePacker fixture. The honest-density numerator already exists (MeshPackItem.MeshVolume, signed-tetra, shipped 2026-07-06).
Done when: RESULTS.md carries a measured C# 3D density row with the harness command that produced it, replacing the inherited Python figures. Size: M.