Skip to content

heal.stitch_p1: wire GlueEdgesGeneral to topology.brep_p7 (follow-up) - #317

Merged
bherbruck merged 6 commits into
tangency-labs:mainfrom
bluecmd:port/stitch_p1-glue-edges-general
Oct 21, 2026
Merged

bherbruck merged 6 commits into
tangency-labs:mainfrom
bluecmd:port/stitch_p1-glue-edges-general

Conversation

@bluecmd

@bluecmd bluecmd commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Follow-up to #257 (lesson: wire back-edges when the owner lands). topology.brep_p7 has been on main since #246, so heal::stitch::p1's SmBrep::GlueEdgesGeneral wrapper (UNPORTED(topology.brep_p7) on main, heal/stitch/p1.rs:2013) now calls the real routine.

What it does

  • glue_edges_general (the stitch module's wrapper) takes the kernel and calls topology::brep::p7::glue_edges_general(k, b, Some(keep), orientation, dist, do_region_nesting, Some(delete), inside_faceuses, &mut env). Upstream notifies the B-rep's own SmTopology objects through its context; the heal path keeps no records, so env is a default record per arena object (brep_p2::ArenaNotifyState::new(b), the same seeding brep p5/p6 use) over the kernel's notification context (Context::with_notification_context): SmTopology::Notify's propagation finds both edges, and callbacks installed on the kernel see the events (Reviewer A pre-review must-fixes 1 and 2; an empty record map made the MergeInBrep notify fail silently, and context: None dropped the callbacks).
  • All three call sites pass k: DoSimpleFaceStitch (cpp:1005/1013, status propagated) and StitchEdgesOfVertices (cpp:4145, success tested) in heal::stitch::p1, and DoStitching's edge gluing at a vertex (cpp:2151/2183) in heal::stitch::p2, which imports the same wrapper. Arguments unchanged: pInsideFaceuses stays NULL.
  • The header's unported list and the modules.toml note are updated. Since port: topology.brep_p2 #149 (batch batch: land 1 reviewed-clean contributor PR #315) part 7's notifies are live, so the wrapper no longer stops at a stub of its own: a wire edge to delete stops at UNPORTED(topology.brep_p4): SmBrep::DeleteEdge, and face-bounded edges run the glue up to part 7's own stubs. origin/main (e5f3e44, with port: topology.brep_p2 #149) is merged in; the merge conflicts were this module's header list and the modules.toml note.

Coverage, plainly

  • No heal.stitch_p1 or heal.stitch_p2 difftest case reaches the glue today: all call sites sit behind earlier deferrals (topology.face_p2 SmFace::GetTolerance, topology.face_p4, query.brep, topology.brep_p1), so both reports are unchanged from main. The wiring is pinned by two unit tests with a recording notify callback on the kernel: two wire edges between the same vertices see the B-rep PreEdit and then return Unported { upstream: "SmBrep::DeleteEdge", unit: "topology.brep_p4" } from inside the part 7 routine, with the callback restored on the kernel afterwards (the same edge twice is the upstream no-op); two face-bounded edges reach the MergeInBrep notify, which the seeded records let run.

Gate (sc-builder-0, on c338dbd)

  • fmt OK, clippy (plain and cpp) 0 errors, cargo test -p solidcore 1528 passed, wasm OK.
  • difftest heal.stitch_p1 / heal.stitch_p2: both byte-identical to main's committed reports (post-port: topology.brep_p2 #149):
    PARTIAL heal.stitch_p1 cases=300 passed=232 failed=0 deferred=68 max_rel_err=0e0 with_values=232 no_values=0 blocked_by=harness:analytic-geometry-export(1),query.brep(10),topology.brep_p1(5),topology.brep_p4(1),topology.face_p2(49),topology.face_p4(2)
    PARTIAL heal.stitch_p2 cases=556 passed=332 failed=0 deferred=224 max_rel_err=0e0 with_values=331 no_values=1 blocked_by=intersect.curve_class_p2(11),query.brep(121),topology.brep_p1(92)
    
  • --green: 234 units, failed=0.

🤖 Generated with Claude Code

https://claude.ai/code/session_01BfiWnWawYvdkvRXZtfC7zK

Status (updated 2026-10-21 10:23 UTC)

bluecmd and others added 3 commits October 20, 2026 21:21
Follow-up to tangency-labs#257: topology.brep_p7 is on main, so the stitch module's
GlueEdgesGeneral wrapper now takes the kernel and calls
topology::brep::p7::glue_edges_general with a call-local notification
environment (as make_vertex_split_edge; shared local_key_of). All three call
sites pass the kernel (DoSimpleFaceStitch, StitchEdgesOfVertices, and
DoStitching's glue at a vertex in heal::stitch::p2). The routine stops at its
first B-rep notify (topology.brep_p2) today; no difftest case reaches it, both
stitch reports are unchanged, and a unit test pins the new path.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…dges-general

# Conflicts:
#	crates/solidcore/src/heal/stitch/p1.rs
#	plan/modules.toml
… (brep_p2 wired)

With topology.brep_p2's stubs wired on main, part 7's glue no longer stops at
its first notify: a wire edge to delete now stops at SmBrep::DeleteEdge
(topology.brep_p4). The unit test builds real wire edges (shell-owned edge
uses) and pins that; header and modules.toml note updated. Both stitch reports
stay byte-identical to main's.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…text

Codex pre-review of tangency-labs#317: the wrapper handed part 7 an empty record map, so
its MergeInBrep notify failed as "not a topology object" (swallowed), and
context: None kept the kernel's callbacks from firing. It now runs on a
default record per arena object (brep_p2::ArenaNotifyState, as brep p5/p6)
and the kernel's notification context (Context::with_notification_context).
Two regressions with a recording callback: wire edges see PreEdit and then
defer at SmBrep::DeleteEdge (topology.brep_p4) with the callback restored;
face-bounded edges reach the MergeInBrep notify. The shared key-helper
refactor is reverted. Note updated.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…e note

rv-brep_p7's optional nits on tangency-labs#317: the face-bounded fixture is degenerate
past the MergeInBrep notify (its loop use has no face use), so the test now
pins that part 7 stops at that face lookup (InvalidInput), where upstream
would dereference null; topology.brep_p7's note gets a dated line that
heal.stitch_p1's GlueEdgesGeneral back-edge is wired.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@bluecmd
bluecmd marked this pull request as ready for review October 21, 2026 04:24
…dges-general

# Conflicts:
#	crates/solidcore/src/heal/stitch/p1.rs
#	plan/modules.toml
@bherbruck
bherbruck added this pull request to the merge queue Oct 21, 2026
Merged via the queue into tangency-labs:main with commit 2827de9 Oct 21, 2026
8 checks passed
tdamsma added a commit to tdamsma/solidcore that referenced this pull request Oct 21, 2026
…angency-labs#317, ...) into stubs/fillet-solver-geom-glue

Main threads &Kernel through surface/curve evaluation: kept, and added to
this branch's wired call sites (FilletIntersector::new with FilletGeomId,
offset_evaluate_2nd on rails, CurveBased set_extension_flags(k, b), custom
solver LoadJacobian, ComputeSurfaceValues, the rail UV-curve evaluate).
test_analytic_surface gains main's SurfaceKind::Cone arm.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H9QwJFBTKLZ9FFK3nVd1X4
denelson1-dot added a commit to denelson1-dot/solidcore that referenced this pull request Oct 21, 2026
…dispatch, tangency-labs#317, tangency-labs#356, tangency-labs#361, tangency-labs#414) into unit/blend.fillet_solver_p3

Conflicts: tangency-labs#313 threads &Kernel through the Surface / Curve evaluations;
this branch's side is kept where it carries tangency-labs#192's newer head (FilletGeomRef
intersector tests, rail / rail_mut accessors, the wired
VariableRadiusFs::set_extension_flags, the iso curve status read as TRUE),
with main's kernel argument added (set_extension_flags now takes the kernel
and the B-rep), main's new SurfaceKind::Cone arm, and main's constructor
order in the intersector runner; findings keep both sides' sections, the
blend.fillet_solver_p1 notes keep tangency-labs#192's newer text.

Fallout in code main does not carry: blend.fillet_solver_p3 passes the
kernel to its evaluations (offset_normal takes it), and the local solvers'
function interfaces, which pass none, see FindClippedRadiusEfo /
FilletSphereSolveEnfo through ClippedRadiusFn / SphereSolveFn adapters that
hold it; tangency-labs#192's newer ConstantRadiusAssistedFs::load_jacobian,
compute_surface_values call and RailUvCurveIntersectEnfo, and the p3 runner's
harness solver, take the kernel too. --perturb on blend.fillet_solver_p3:
378/378 detected; difftest runner tests pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants