3.6 KiB
Part Split Source Reuse
Scope: replace two incomplete native BREP operations with supplied desktop implementations. No automated runtime tests, browser validation or acceptance. This does not claim that all project placeholders are resolved.
Removed Limitations
- Part_XOR previously rejected surfaces and wires, then approximated solid fragment membership using repeated common-volume calculations. It now invokes BOPTools.SplitAPI.xor from the supplied embedded source, including aggregate handling, general-fuse source correspondence and odd-membership selection.
- Part_BooleanFragments previously rejected every mode except Standard. It now invokes BOPTools.SplitAPI.booleanFragments for Standard, Split and CompSolid. Source errors, invalid inputs and the no-solids CompSolid error remain errors.
No new geometry engine or handwritten replacement algorithm was introduced. The original BOPTools code calls native Part/OCCT. Existing input BREP and output BREP/validity/volume/edge-count contracts are retained; no fixture input is added.
Required Runtime Connection
The former part.worker.ts route sent all desktop commands to the small PartDesktopCommandProbe, which does not contain the embedded FreeCAD/BOPTools runtime. part-source-commands.json now identifies these two commands; their requests use the already existing PartBox runtime. Other desktop commands keep their prior target. PartBox initializes its native Python types and existing Part package path before invoking the source algorithm.
The implementation packet uses the same command table to select the actual PartBox build, retains the helper/header and embedded BOPTools source inputs, and reuses existing dependencies. The active scheduler manifest is not replaced.
Remaining Scope
This batch repairs the native shape operations, not the entire parametric FeatureXOR/BooleanFragments document editing workflow. Desktop feature Links, property editing and complete UI ownership still need their own source-backed integration. A compiled BREP command is not proof that those behaviors exist. Source decisions and fingerprints are retained in native-semantic-decisions.json so the repaired algorithms are not implemented again in subsequent turns.
Work Accounting
The initial native pipeline took 79.696 seconds, including 67.991 seconds of build and 3.136 seconds of artifact sync. A follow-on source correction added the existing Part Python path initializer before first use; this required another incremental build. The final native timings are recorded in part-split-source-implementation-pipeline.json, not combined with the initial attempt or presented as all engineering time.
Frontend publication must use FREECAD_WEB_FAST_LINK=ON. Do not repeat the full public-asset copy from the previous turn. No full OCCT rebuild is needed.
Final publication completed:
| Step | Seconds |
|---|---|
| Module registry | 0.100 |
| Capability registry | 7.503 |
| Preflight | 0.045 |
| Final native build, including 7.918 seconds waiting for build lock | 73.784 |
| Native artifact sync | 3.081 |
| Completion metadata, not runtime acceptance | 0.913 |
| Final native pipeline total | 85.426 |
| Frontend build total | 8.820 |
| Public asset sync within frontend build | 6.766 |
Both final commands exited 0. The frontend used the existing incremental mode. The source inventory reused 478 unchanged files and rescanned eight changed files in 0.173 seconds; it reports 615 candidate locations, not 615 proven placeholders. The two command routes already existed before this batch, so route counts are not an appropriate measure of these native implementation improvements.