Repository navigation
fix: the G^n section's equal-area default thumbweight and the ease's w 0, opt-in (smlib#78 6148773 = 1947a45, 22d258a = adb9854, #2250) - #2261
Merged
Conversation
…d258a) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU
…s solvers; the ease keeps 0 (WR-685, smlib#78 6148773 = 1947a45, 22d258a = adb9854, tangency-labs#2250) Under fillet_gn_section_generator: SM_GN_THUMBWEIGHT_EQUAL_AREA (-2) is the default thumbweight, resolved once per generator by EqualAreaThumbweight (a bisection of sm_GnSectionAreaIntegral) from the wedge at the first blend's middle station or at ContactOrderAt's; thumbweights run over (-1, 1). The fork's solvers share one generator, so the session hands a resolved thumbweight to the generator and every solver's copy after each CalcFilletGeom. EaseSetBackSections builds its order-2 target at w = 0. Checked against fork d01d7b0 built locally: EqualAreaThumbweight bit-identical over orders 2-4 and six wedges; box edge, box corner, two-wedge (both orders) and eased setback volumes within 3.7e-9 relative. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU
brett19
marked this pull request as ready for review
November 1, 2026 20:35
Collaborator
Author
|
Ready, stacked on #2260. EqualAreaThumbweight is bit-identical with fork d01d7b0 built locally. Volumes agree with the fork to at most 3.7e-9 rel: box edge, corner, two wedges in both orders (order-dependent, as in the fork), eased setback. The local gate passes. |
This was referenced Nov 1, 2026
brett19
added a commit
to brett19/solidcore-fork
that referenced
this pull request
Nov 1, 2026
…step 7 Step 7 builds on the G^n section and its certificate (tangency-labs#2260, tangency-labs#2261, tangency-labs#2262). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU
…illet-gn-equal-area Doc-only conflict in the fillet_gn_section_generator flag docs: keeps this branch's equal-area paragraph and main's variable-round paragraph. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU
…s generator After merging main, tangency-labs#2262's fold check in CreateSurface read this_ang_tol_rad and this_approx_tol_3d through the solver while this branch holds its generator mutably (for the shared equal-area thumbweight). Both values are now read first; nothing else changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU
brett19
added a commit
to brett19/solidcore-fork
that referenced
this pull request
Nov 1, 2026
p1 (b9d6a72) and p2 (7102bc5) change the equal-area thumbweight tangency-labs#2261 ports. kernel.rs: the flag doc takes tangency-labs#2261's first paragraph and keeps main's variable-round paragraph. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU
brett19
added a commit
to brett19/solidcore-fork
that referenced
this pull request
Nov 1, 2026
…to step 7 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU
brett19
added a commit
to brett19/solidcore-fork
that referenced
this pull request
Nov 1, 2026
… one resolved at every station, opt-in (WR-685, smlib#79 b9d6a72, 7102bc5, tangency-labs#2273) Under fillet_gn_section_generator, the step 7 prerequisites p1 and p2: - b9d6a72: IsValid takes any finite w < 1; SM_GN_THUMBWEIGHT_EQUAL_AREA is 2; EqualAreaThumbweight's bracket steps down from -1 to -1000. - 7102bc5: each station takes the equal area thumbweight of its own wedge and its s-derivative (sm_GnStationThumbweight); the surface interpolates the normalized form's homogeneous rows; the certificate bounds their remainder (sm_GnRowTermsOver, sm_Centred, sm_GnAreaCells). New tay.rs (sm_Tay and the area/target series); form.rs is ring-generic (sm_Binom, sm_GnFormT, sm_GnFormNormalized); sm_GnEvaluate returns V; ContactOrderAt takes its station's ThumbweightAt. The generator's thumbweight is no longer written, so tangency-labs#2261's shared-thumbweight plumbing goes. Checked against fork 7102bc5 built locally: EqualAreaThumbweight bit for bit (n 2-4, 8 angles), blend nets within 1e-9 and volumes within 1e-7 on the box edge, the chamfer and box edges in both orders, and the pipe on a plate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU
brett19
added a commit
to brett19/solidcore-fork
that referenced
this pull request
Nov 1, 2026
p4.rs: kept this branch's removal of the circular section's sm_BallsFold check (the fork's 410dfe1 replaced it by BallIsRegular), on main's mutable generator access from tangency-labs#2261. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU
brett19
added a commit
to brett19/solidcore-fork
that referenced
this pull request
Nov 1, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU
brett19
added a commit
to brett19/solidcore-fork
that referenced
this pull request
Nov 2, 2026
…nd-step6-overflow Step 6 builds on the generic-blend section and variable rounds of tangency-labs#2260/tangency-labs#2261/tangency-labs#2262. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU
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.
Units: blend.fillet_section (G^n section), blend.fillet_executive (session, ease), blend.fillet_solver (generator dispatch). Tracking: #2250 (smlib#78).
This PR is stacked on #2260 and uses the same flag,
fillet_gn_section_generator(WR-685; addendumplan/upstream-issues/WR-685--addendum-2026-11-01-equal-area-thumbweight.md). It ports two fork commits:Only the fork's
source/SMLibbehaviour is ported. No capi or SolidCraft code is copied. With the flag off nothing changes.What is in it
section.rs: the default thumbweight is equal area.GN_THUMBWEIGHT_EQUAL_AREA= -2, andGN_DEFAULT_THUMBWEIGHT= equal area.is_validnow accepts -1 < w < 1, or -2.equal_area_thumbweight(EqualAreaThumbweight: a bisection ofsm_GnSectionAreaIntegral, composite Simpson on 2048 intervals) andresolve_thumbweight(ResolveThumbweight).buildresolves the thumbweight at the centre line's middle station;contact_order_atresolves it at its own station. Both follow the fork in operation order.SetFilletParametersshares oneSmGnSectionFSG. The first blend built writes the resolved thumbweight into itsmutablemember, so every edge gets the first blend's wedge.GnSectionFsg::sharedrecords which session generator a copy came from.create_surface_replacing_uvnow works on the solver's own generator (fillet_surface_generator_mut).CalcFilletGeom(its first build), the session hands the resolved value to the generator and to every unresolved copy (share_gn_thumbweight).ContactOrderAtreaches the generator through an immutable borrow. It resolves on a copy it does not keep, but its generator is already resolved by then, because the blend is built before its side faces' ribs.ease.rs:EaseSetBackSectionsbuilds its order-2 target at w = 0 (adb9854).Checked against the fork
I built fork d01d7b0 locally (SMLib and SM_API only, with the harness's flags and
-ffp-contract=off). The scratch drivers are not committed. The eased setback is driven throughSmFilletExecutivein the same call order as the Rust test.EqualAreaThumbweight, n 2..4 x 6 wedges (0.3 to 3 rad)The volumes are not bit-identical, for two reasons:
At a square corner, order 2, the fork gives w = -0.52521240458756147. The figure -0.5252123889 quoted from SolidCraft differs from it by 3e-8, so the tests use the fork's value.
Regression tests
The tests are in
crates/solidcore/tests/wr685_gn_section.rsandblend::fillet_section::section::tests:equal_area_thumbweights_are_the_fork_s(unit)equal_area_thumbweight)box_edge_equal_area_round_takes_off_the_circle_s_areais_valid)box_corner_equal_area_rounds_take_the_fork_s_volumeequal_area_thumbweight_is_the_first_blend_s_for_every_edgeeased_setback_takes_the_order_2_section_at_thumbweight_0form_is_the_section_of_its_definitionnow also covers negative thumbweights.Completion evidence
EqualAreaThumbweight,sm_GnSectionAreaIntegralResolveThumbweightinBuild/ContactOrderAt, shared across solversContactOrderAtkeeps no resolution it makes itself (its generator is resolved already)IsValid(-1, 1) or -2EaseSetBackSections: target at w 0The pinned C++ has no G^n generator, so the native difftest compares only the default, flag-off path. That path is unchanged:
The full local gate (fmt, clippy, clippy-cpp, tests, test-opt, wasm, runner tests and the difftest above) passes at 716af66.
scripts/ci/check_record_ids.pypasses.Out of scope
FilletSession::prepare_variable_radius_edges' fixed thumbweight 1.0, which is fix: variable rounds as the union of their balls, opt-in (smlib#78 6b346f6, d622107, #2250) #2262's area.🤖 Generated with Claude Code
https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU