chore: pin the v3.0.0-rc1 kernel (V8_0_1 + seventeen carried patches) - #936
Merged
Conversation
The v2.0.0 asset carried fifteen. Patches 0026 (#905, ThruSections capping guard) and 0027 (#913, CreateSmoothed section-edge-count guard) had landed in Scripts/patches/ since and were in no built kernel, so both were exercised by no CI job at all: #585's failure shape. Rebuilt V8_0_1 from occt-src with all seventeen applied, three slices, zero errors. Verified against the built artifact rather than inferred from a clean build: - Eight header-touching patches: 210 added lines matched line for line against the headers inside the xcframework, 0 missing. - 0026: its throw message appears once in each of the three slice archives. - 0027: adds no string literal (it signals through myStatus), so it is held behaviourally by mismatchedSectionEdgeCountWithoutCheckFailsCleanly, which is OCCTSWIFT_LOCAL-gated and therefore DOES NOT RUN IN CI. Confirmed it started rather than skipped against this kernel. - Full suite, OCCTSWIFT_LOCAL=1: 5614 tests in 1460 suites, all passed. - Published asset re-downloaded and hashed: matches the local zip exactly. Package.swift's enumeration, its verification block and CLAUDE.md's count all move together, so the total, the list and `ls Scripts/patches/*.patch | wc -l` agree at seventeen. The v2.0.0 release check found a total of fifteen sitting above a list of eleven, which is why all three are changed here rather than just the number everybody reads. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Measured against both kernels rather than asserted. The clean-checkout run (downloaded v3.0.0-rc1 asset, OCCTSWIFT_LOCAL unset) and the local-kernel run BOTH report 'Test run with 5614 tests', while 0027's only test reads 'skipped' in the first and 'started ... passed' in the second. So neither a green suite nor a matching total distinguishes 0027 being exercised from 0027 being silently skipped. Only the per-test line does. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…rect The SEQUENCING paragraph described the RELEASE tag's ordering, and read as though it governed kernel pre-releases too. Applied to one it is circular: the URL cannot be pinned before the asset exists, and the release cannot be cut from a commit that does not exist. Measured across every kernel pre-release in the repo: each tag points at a commit pinning the PREVIOUS asset, and only the release tag is self-consistent. Records that, so the next person does not 'correct' it. I proposed exactly that correction during this rebuild; the history refuted it. Also records that v2.0.0 re-uploaded kernel.3's byte-identical zip and swapped only url:, re-verified by downloading the v2.0.0 asset and hashing it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Follows the established naming. Every prior kernel pre-release is -kernel.N (v2.0.0-kernel.1/.2/.3), which reads as "kernel-only pre-release"; "rc1" reads as a release candidate of the package, and the package is not release-ready (docs/SEMVER.md has no v3.0.0 section, six merges still owe CHANGELOG entries). Same asset, byte for byte: 149,067,826 bytes, sha256 77df5a0ae860b0f947353ff6eabf0ab25eb810ef0ce135b56bc60ff1e3e52ef2, re-downloaded from the new URL and re-hashed before this commit. `checksum:` is therefore unchanged and only `url:` moves, which is the same shape the v2.0.0 release commit used when it re-uploaded kernel.3's zip. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
gsdali
force-pushed
the
chore/pin-v3.0.0-rc1-kernel
branch
from
August 16, 2026 23:14
949781a to
57c5bca
Compare
Corrected from the PR body, which still named v3.0.0-rc1 from before the rename to v3.0.0-kernel.1. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Package.swiftpinned the v2.0.0 asset, which carries fifteen patches. Two more had landed inScripts/patches/since and were in no built kernel:0026BRepOffsetAPI_ThruSections::MakeSolidno longer marks a loftClosed(true)when it could not cap a non-planar extremity0027CreateSmoothed's fixed-stride fill loop no longer overrunsshapeswhencheckCompatibility(false)leaves sections with differing edge countsBoth were therefore exercised by no CI job at all, because
build-and-testresolves the asset rather than building from source. That is #585's failure shape, and it is the exact thing CLAUDE.md's ten-second count check exists to catch.Worth recording how it was found, because it is the failure mode rather than a description of it: the count check was run, found
16against a prose "fifteen", and while the rebuild was being set up agit pullbrought in0027, taking the tree to 17. The drift happened during the session that was auditing for drift.Rebuilt
V8_0_1fromLibraries/occt-srcwith all seventeen applied. Three slices, zero errors. Published asv3.0.0-kernel.1.Verification
Measured against the built artifact, not inferred from a clean build:
0010,0011,0012,0014,0015,0016,0021,0024): every line each adds to a shipped.hxxmatched against the header inside the xcframework. 210 added lines, 0 missing.0026:.cxx-only, but it adds a distinctive throw message. Present exactly once in each oflibOCCT-macos.a,libOCCT-ios.a,libOCCT-sim.a.0027:.cxx-only and adds no string literal, signalling throughmyStatus, so nothing in the binary can be grepped for it. Held behaviourally byStressBuilderLifecycleTests.mismatchedSectionEdgeCountWithoutCheckFailsCleanly, which is gated onOCCTSWIFT_LOCAL=1(PR fix(#913): guard CreateSmoothed's fixed-stride shapes array against a mismatched section edge count #915 review, finding 1). Confirmed from the log that it started and passed rather than being skipped.OCCTSWIFT_LOCAL=1: 5614 tests in 1460 suites, all passed, no failures, no crashes. That is what covers the five.cxx-only patches carrying their own regressions (0017,0019,0020,0022,0025).77df5a0a…matches the local zip exactly, so the pin resolves rather than 404ing.Package.swift's own sequencing note records that a correct checksum against a 404 fails identically, which is how a kernel.3 asset once passed a checksum check while resolving to nothing.0018and0023remain verifiable by no test of any kind, unchanged: the bridge stops both defects before OCCT sees them.One thing this PR changes that is not the number
0027is the first carried patch that cannot be verified by a greenbuild-and-test, because its only test does not run in CI.Package.swiftand CLAUDE.md now both say so explicitly, with the command to re-verify it locally. Previously the guidance was "a green build-and-test is behavioural proof", which is now true of five patches and false of one.Three-way consistency
The v2.0.0 release check found a total of fifteen sitting above an enumeration of eleven, silently. So all three move together here:
CHANGELOG entry
Kernel rebuilt:
v3.0.0-kernel.1carries seventeen patches, up from fifteenPackage.swiftnow pins thev3.0.0-kernel.1kernel pre-release (V8_0_1plus carried patches0010-0012and0014-0027), replacing the v2.0.0 asset's fifteen. The two additions are0026(#905,BRepOffsetAPI_ThruSectionsrefuses a loft whose non-planar extremity could not becapped, instead of marking it
Closed(true)) and0027(#913,CreateSmoothedrefuses mismatchedsection edge counts under
checkCompatibility(false)instead of overrunning a fixed-stride array).Both fixes previously existed only in the source tree, so a consumer installing the package received
neither, and neither was exercised by any CI job. No public API change.
Three verification facts are recorded in
Package.swiftrather than left to be rediscovered.0027is the first carried patch a greenbuild-and-testcannot vouch for, because its only testis
OCCTSWIFT_LOCAL-gated and so never runs in CI. The suite total is blind to that: the same runreports 5614 tests whether the test executes or is skipped, so only the per-test line distinguishes
them. And a kernel pre-release tag pointing at a commit that pins its predecessor is correct, not
a mistake to be fixed, because the alternative ordering is circular.
SemVer impact
NONE for the Swift API. No public entry point is added, removed, renamed, or changed in signature. The shipped kernel binary changes behaviour in two cases that were previously a silent wrong answer and a heap overrun respectively, both of which are the fixes named above.
Follow-up, tracked not forgotten
The
v3.0.0-kernel.1tag points atbc32a84e(mainbefore this commit), so its tree pins the v2.0.0 asset rather than its own.Package.swift's sequencing note asks for the reverse order. I will re-point the tag at this PR's merge commit once it lands; nothing consumes the tag yet, so moving it is safe.