docs: record that the concaveEdges fix will not be backported to 1.x - #107
Conversation
Upstream have confirmed no backport for OCCTSwift#695. The fix exists only on the 2.0.0 refactor branch, and the only way to get it before 2.0.0 ships is to pin to that branch. Pinning to a branch is not viable here: this package is released under a semver floor and a revision pin would propagate an unstable dependency to every downstream consumer. CLAUDE.md already records being bitten by revision-pinning on OCCTSwiftViewport. The OKF entry and recipe 01's header both described the geometric selection as "a 1.x workaround with a known end date", which reads as though a patch release might arrive. It will not. Both now say the workaround is permanent while this repo is on 1.x, and becomes removable only at a 2.0.0 migration. No code change. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Review of this PR, verified against upstream OCCTSwift#695, Verdict: approve. Documentation only, both CI workflows ( A few polish suggestions, none blocking:
Risk is effectively nil: docs plus one code comment, no behaviour change, |
…s-references Review of #107 pointed out that "too involved to backport" contradicts the upstream record, and it does. Checking OCCTSwift#695's closing comment: a backport was built, merged and measured (PR #700, all 4646 tests green on both CI jobs), then reverted, not for any defect in it but for what it costs the release branch. Merging main into refactor/381-pass1b conflicted in 8 files across 18 regions, and those are not all mechanical: main and the refactor branch made genuinely different, individually correct decisions on the same lines. Corrected, and captured the escape hatch the upstream comment preserves: re-landing means reverting the revert, so this can be revisited if 1.x becomes untenable before v2.0.0 ships. Also recorded the root cause, because it generalises beyond this call. An edge or vertex index crossing the bridge addressed a topology occurrence rather than a position in the deduplicated enumeration that edges() / edgeCount / edge(at:) return. A 20mm box has 12 distinct edges but 24 occurrences, so the two diverge from the first repeat onwards on any ordinary solid, and edgeConcavities() zips one against the other. Upstream root cause is OCCTSwift#613, fix #650. Any bridge-crossing index deserves the same suspicion until 2.0.0. Corrected the pinning paragraph too: the fix is reachable from the published v2.0.0-kernel.1 tag as well as the branch, but neither is open to this package, because from: "1.17.0" means >=1.17.0 <2.0.0 and cannot resolve a 2.x version at all without a major bump. Remaining review items: * Added the okf/log.md line the standing rule asks for alongside an OKF entry. * CLAUDE.md's OCCTSwiftViewport paragraph still said that dependency "is currently revision-pinned to a main commit", but Package.swift:88 has carried from: "1.0.4" for some time. Put into past tense and kept as the standing reason this repo avoids revision pins, which is what the new cross-reference points at. * recipes/01-mounting-bracket/README.md's Gotchas described the workaround with no version scope; added it, so the cookbook's own three files carry the whole record. * Fixed the dangling "rather than assuming" in the recipe comment. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
All five addressed in 1. "Too involved to backport" was wrongI checked OCCTSwift#695's closing comment rather than taking it on faith, and you are right. The backport was built, merged and measured (PR #700, all 4646 tests green on both CI jobs), then reverted, not for any defect in it but for what it costs the release branch: merging main into That is a materially different fact from "too involved", and this PR existed specifically to make the record accurate, so thank you for catching it. Corrected, with the escape hatch captured: re-landing means reverting the revert. I also pulled in the root cause, because it generalises past this one call. An edge or vertex index crossing the bridge addressed a topology occurrence rather than a position in the deduplicated enumeration that Your parenthetical is in too: the fix is reachable from the published 2. Missing
|
|
Second-pass review on head Verdict: approve. All five first-pass findings are addressed, and every new claim was verified against the primary sources. CI ( Per item:
Verification of the new content (root-cause paragraph): the occurrence-vs-deduplicated-enumeration account, the 12-distinct-vs-24-occurrence box count, and the Consistency: the five files now tell one coherent story: no 1.x fix will land; the geometric selection is permanent while this repo is on 1.x; it becomes removable at a 2.0.0 migration, with the repro to re-run at that point. Remaining nit, optional: the PR body's "What changed" section still lists only the original two files; the PR now touches five, so it could be refreshed (commit 2's message already records the additions). No behaviour change, no new risks. Ready to merge. |
What & why
Upstream have confirmed there will be no backport for OCCTSwift#695, the
concaveEdges()/convexEdges()reentrant-edge misclassification.The docs described the geometric-selection workaround as "a 1.x workaround with a known end date", which reads as though a patch release might arrive. It will not, and that difference matters: it is the difference between "wait" and "this is the shape of the code until we migrate".
Documentation only, no behaviour change. The one Swift edit is a comment.
What changed
Five files:
okf/decisions/concave-edge-classifier-can-select-wrong-edges.mdokf/log.md**Update**:line the standing rule asks for alongside an OKF entry.CLAUDE.mdmaincommit";Package.swift:88has carriedfrom: "1.0.4"for some time. Put into past tense and kept as the standing reason this repo avoids revision pins.recipes/01-mounting-bracket/README.mdrecipes/01-mounting-bracket/main.swiftThe backport account, corrected
The first version of this PR said the fix was "too involved to backport". That contradicted the upstream record and was corrected in the second commit. What actually happened: a backport was built, merged and measured (OCCTSwift PR #700, all 4646 tests green on both CI jobs), then reverted, not for any defect in it but for what it costs the release branch. Merging main into
refactor/381-pass1b, which carries the whole of v2.0.0, conflicted in 8 files across 18 regions, and those are not all mechanical.The backport is not lost: re-landing means reverting the revert.
Root cause, recorded because it generalises
An edge or vertex index crossing the bridge addressed a topology occurrence rather than a position in the deduplicated enumeration that
edges()/edgeCount/edge(at:)return. A 20 mm box has 12 distinct edges but 24 edge occurrences, so the two diverge from the first repeat onwards on any ordinary solid, andedgeConcavities()zips one against the other. Upstream root cause OCCTSwift#613, fix #650.The durable lesson is broader than
concaveEdges(): treat any bridge-crossing index with the same suspicion until 2.0.0.Why neither route to the fix is open here
The fix is reachable from the
refactor/381-pass1bbranch and from the publishedv2.0.0-kernel.1prerelease tag. Neither works for this package:from: "1.17.0"means>=1.17.0 <2.0.0, so it cannot resolve a 2.x version at all without a major bump, and a revision pin would propagate an unstable dependency to every downstream consumer.Checklist
Not applicable: documentation only. No Swift behaviour changes; the recipe edit is a comment.
Notes for the reviewer
Scripts/policy-check.shpasses, no em-dashes in the diff, andrecipesCI re-executes recipe 01.The workaround itself is unchanged and still correct. This only fixes what the docs claim about its lifetime and its cause, so a future reader does not defer work waiting for a 1.x patch that is never coming.
🤖 Generated with Claude Code