The read cases' stream guard is now the pure-Rust topology.brep_data simulator
(bd::guard, no C++ call), and the Rust side no longer defers on the C++
SmBrepData read verdict (cpp-guard:unvalidated-topology is gone). The C++ read
of a modified stream runs in isolate::fresh_process_within (new: a per-child
alarm, here 30 s), so a UB-164 crash or hang in MakeTopologyFromData is
rejected and the streams that survive are compared.
New built-in cases: 100 modified streams the guard accepts and Rust's
BrepData::read_from_file reads (45 geometry-digit and 55 topology-integer
overwrites). 70 pass, 26 rejected, 4 known mismatches where C++ builds an
inconsistent radial list that the brep_p10 port rejects by design
(plan/findings/topology.brep_p7--modified-stream-inconsistent-radial-list.md);
the unit is partial.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtgaA54W2nr8dK1EYp
The blend.fillet_solver_p4 and blend.fillet_executive_p3 runners seeded the
Rust Kernel::fillet_point_step latch from the C++ library's function-static
sdStaticStep (ND-3), probed after the C++ run. That made the comparison
depend on C++ output and could hide a Rust latching bug.
- solidcore_ffi::isolate::fresh_process runs a case's C++ calls in a forked
child (harness/cpp/shim/sc_isolate.cpp) and returns the record through a
pipe; a child that dies is SC_ERR_CHILD_CRASHED. The child rebuilds the
shared native mutex (a recursive mutex names its owner's thread id).
- blend_fillet_solver_p4::with_fresh_static_step reads sdStaticStep in that
child after the case. Both runners compare it as `fillet_point_step`; the
Rust side runs each case on a fresh Kernel::default() and reports its own
latch. seeded_kernel()/point_step() and the solver_p4 seeding are gone.
- The p3 file-source crash trap (a trap run plus a real run) is replaced by
the single child run: a crash is still rejected (UB-209, UB-261).
- README rule and AGENTS.md pointer: the harness never feeds C++ outputs or
process state into the Rust side.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf