v1.4.0 — consume OCCTSwift v1.1.0 + drop identity-flag workaround
OCCTMCP v1.4.0 — consume OCCTSwift v1.1.0 + drop identity-flag workaround
OCCTSwift v1.1.0 closes #167 with TopologyGraph.findDerivedOrSelf(of:) and hasHistoryRecord(for:) — unambiguous answers to "where did this node end up?":
- non-empty derivatives → modified
[]→ explicitly deleted[self]→ no record at all (untouched)
This release consumes those and removes the v1.3 workaround.
What changed
HistoryRegistry'sEntry { graph, isIdentityPreserving }reverts to a plain graph store.recordIdentityHistory*keep their topology-count guards but no longer write self-records or set a flag.RemapTools.remapViaHistoryswitches fromfindDerived+ flag plumbing tofindDerivedOrSelf. Empty result is now a definitivefate=lost. Cleaner control flow.recordKindinsiderecordBoolean/recordSingleInputHistoryskips writing identity records (input mapped to its own index in the post graph). Without this skip, OCCT-reported "modified to same index" cases would get conflated with explicit deletes byfindDerivedOrSelf— the fillet integration test exposed this on the cutover.
History opt-in matrix as of v1.4
| Tool | Path | Notes |
|---|---|---|
transform_body |
implicit identity (no records written) | every node maps 1:1; findDerivedOrSelf returns [self] |
heal_shape |
implicit identity if guards pass | falls back to heuristic if shape repair changed topology |
boolean_op |
per-input via *WithFullHistory |
identity-mapping records skipped at write time |
apply_feature |
per-feature via BuildResult.histories[id] |
every spec kind covered (OCCTSwift v1.0.4) |
mirror_or_pattern |
use find_correspondences instead |
different contract |
Tests
25 swift-testing cases — same surface as v1.3.0; no new tests, no removed tests. All four history-asserting integration tests still pass; the fillet one passes only after the recordKind identity-skip fix landed, which proves we're now exercising the findDerivedOrSelf semantics correctly.