Skip to content

recipe 01 (mounting-bracket) volume drifts 2.27% from committed reference under OCCTSwift 1.17.0 #101

Description

@gsdali

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions