The oracle no longer uses Fusion measurements. tests/oracle/<case>/ now holds the 76 recipes (our own format, with recorded measurements and tool-specific fields removed) and an expected.json per case: - 55 analytic cases: closed-form values from tools/oracle-analytic/ (stdlib Python, formulas in each case's "method"). - 21 FreeCAD cases: the same recipe built with FreeCAD's public scripting API by tools/freecad-oracle/ (an external program, not a dependency), with a reference.stl for 20. solvecraft-cli oracle compares body count, volume, area, centre of mass, bbox, face counts where the geometry fixes them, and, against reference.stl, the sampled Hausdorff distance and the principal moments (spatial.rs from #301). cargo xtask oracle reads tests/oracle, writes docs/oracle.md with the source of each value, and supports known_failure marks for tracked bugs. CI runs it on every PR; a manual workflow regenerates the FreeCAD values. step-corpus, seam normalisation and the through-all emulation, which only existed to compare with Fusion, are removed. 75/76 pass; 75-sm-bracket-holes is a known failure (#296). Claude-Session: https://claude.ai/code/session_01RjGw4gA5ZvKrU8MQP6sBgT Co-authored-by: bherbruck <bherbruck@herbrucks.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
1.2 KiB
Analytic reference values
Closed-form expected values for the cases in tests/oracle/ whose shape
has one: prisms, cylinders, cones and frustums, spheres and caps, tori and solids of revolution
(Pappus), constant-radius fillets on straight edges, shells, patterns of these, and folded sheet
metal (flats plus bends as annular sectors). Each script is plain Python 3 (standard library only)
with one function per case. Running a script from the repository root rewrites the
expected.json of its cases with "source": "analytic" and a method string giving the formulas:
python3 tools/oracle-analytic/cases_basic.py # 01-29: boxes, holes, revolves, sketches
python3 tools/oracle-analytic/cases_features.py # 32-66: fillets, shells, sweeps, patterns
python3 tools/oracle-analytic/cases_sheet_metal.py # 67-76: sheet metal
Where a value depends on a SolidCraft convention rather than on geometry alone (a shell's sharp
inner corner, a sheet-metal corner relief, where a flange height is measured), method or
note says which convention is used. Never change a value to match SolidCraft's output: if they
disagree, find out which one is wrong.