Summary
recipes/01-mounting-bracket's committed output.brep reference no longer matches what
the recipe currently emits: volume drifts by 2.27%, well outside Scripts/recipe-check.sh's
default 1e-3 relative tolerance.
reference: 18654.517 mm^3
current: 18230.310 mm^3
Reproduction
swift run occtkit run recipes/01-mounting-bracket/main.swift --format brep --output /tmp/out
swift run occtkit metrics /tmp/out/body-0.brep --metrics volume
swift run occtkit metrics recipes/01-mounting-bracket/output.brep --metrics volume
Deterministic across repeated runs (not flaky). solidCount is still 1 in both cases,
so this is not a topology regression like #100, it is a numeric drift, most likely in the
Shape.filleted(edges:radius:) result on the bracket's concave inside corner
(prism.filleted(edges: prism.concaveEdges(), radius: filletRadius)), the only non-trivial
geometric operation in this recipe beyond extrude and drilling.
Suspected cause
Bisected to the OCCTSwift dependency version. The committed reference was generated
against OCCTSwift 1.15.0. Re-running the recipe against 1.15.0 was not re-verified here,
but a worktree pinned to OCCTSwift 1.17.0 (Package.resolved, no other change) reproduces
the drift, and no other recipe in the cookbook shows any drift at all on the same 1.17.0
pin (04-spur-gear, 05-lattice-cube, 06-fan-blade, 07-sheet-metal-channel all match
their references to Δvol 0.00e+00). That narrows it to something in 1.15.0 to 1.17.0
that specifically affects fillet results on concave edges, not a general geometry kernel
change.
How this surfaced
Found while working #100 (recipe-check.sh hardening to assert solidCount >= 1). Not
in scope there: recipe 01 already has solidCount == 1 and was explicitly out of scope
for that fix. Separately, Scripts/recipe-check.sh had a bug (fixed in the #100 PR) where
a Python validation failure inside check_one() was not propagated to the function's
return status, so this drift was failing recipe-check.sh's own assertion but still
printing "OK" and exiting 0. make recipes-test will start failing on 01-mounting-bracket
once that PR lands, for this reason, not a regression introduced by that PR.
Next steps
- Confirm on a clean OCCTSwift 1.15.0 vs 1.17.0 bisect (not just resolved-version
comparison) whether filleted(edges:radius:) on a concave edge changed behaviour.
- If the new result is geometrically correct, regenerate
recipes/01-mounting-bracket/output.brep
and note the fix in recipes/01-mounting-bracket/README.md.
- If not, file upstream against OCCTSwift.
Summary
recipes/01-mounting-bracket's committedoutput.brepreference no longer matches whatthe recipe currently emits: volume drifts by 2.27%, well outside
Scripts/recipe-check.sh'sdefault 1e-3 relative tolerance.
Reproduction
Deterministic across repeated runs (not flaky).
solidCountis still 1 in both cases,so this is not a topology regression like #100, it is a numeric drift, most likely in the
Shape.filleted(edges:radius:)result on the bracket's concave inside corner(
prism.filleted(edges: prism.concaveEdges(), radius: filletRadius)), the only non-trivialgeometric operation in this recipe beyond extrude and drilling.
Suspected cause
Bisected to the
OCCTSwiftdependency version. The committed reference was generatedagainst OCCTSwift 1.15.0. Re-running the recipe against 1.15.0 was not re-verified here,
but a worktree pinned to OCCTSwift 1.17.0 (
Package.resolved, no other change) reproducesthe drift, and no other recipe in the cookbook shows any drift at all on the same 1.17.0
pin (
04-spur-gear,05-lattice-cube,06-fan-blade,07-sheet-metal-channelall matchtheir references to
Δvol 0.00e+00). That narrows it to something in 1.15.0 to 1.17.0that specifically affects fillet results on concave edges, not a general geometry kernel
change.
How this surfaced
Found while working #100 (
recipe-check.shhardening to assertsolidCount >= 1). Notin scope there: recipe 01 already has
solidCount == 1and was explicitly out of scopefor that fix. Separately,
Scripts/recipe-check.shhad a bug (fixed in the #100 PR) wherea Python validation failure inside
check_one()was not propagated to the function'sreturn status, so this drift was failing
recipe-check.sh's own assertion but stillprinting "OK" and exiting 0.
make recipes-testwill start failing on01-mounting-bracketonce that PR lands, for this reason, not a regression introduced by that PR.
Next steps
comparison) whether
filleted(edges:radius:)on a concave edge changed behaviour.recipes/01-mounting-bracket/output.brepand note the fix in
recipes/01-mounting-bracket/README.md.