Files
FreeCADWasmDev/docs/current/PART_SECTION_BATCH_PROGRESS.md

4.7 KiB

Part Section Batch Checkpoint

Batch: af93355ab923901e87e33808. Selected requirements remain Part_Scale, Part_Section, Part_SectionCut, and Part_ShapeInfo. This note is not acceptance evidence. Do not modify contracts, proof-area requirements, verifiers, or acceptance machinery to promote these commands.

Implemented In This Turn

  • DocumentProbe.cpp has a createSection action using the existing native Part::Section feature and OCCT section operation. It groups selected subelements by document object, retains Base/Tool links, creates a unique native name, hides sources and copies stored display color in one transaction. Native recompute, rollback, undo/redo, FCStd, and edge serialization use the existing document owner. Geometry stays in the supplied OCCT/FreeCAD WASM.
  • part-desktop-adapter.ts routes Part_Section through part.document, checks document/selection ownership and the returned feature links, and preserves desktop selection. part-document-facade.ts admits and validates this action.
  • PartMakeFaceTask has a mounted Section mode in workbench-shell.tsx with source selection, native edge display, result table, history, FCStd open, and OPFS save. The existing renderer respects stored Section color and visibility.
  • tools/part-section-business-cases.mjs is registered in the existing Part case entrypoint. It asserts native intersection lengths/topology, linked recomputation, empty intersections, invalid inputs, document isolation, selection preservation, unique names, history, FCStd, and primary browser controls with desktop/mobile canvas checks. It fingerprints its source and artifacts and records durable stage timestamps. Assertions are executable; this description does not establish that they passed.

First Attributable Failure And Repair

Command: python3 tools/run_business_acceptance.py --module Part --ids Part:desktop:Part_Section --reuse

The first run timed out after 180 seconds. Last completed stages were adapter compilation and native WASM load/fixture initialization; last entered stage was native-section-enter. No browser work was entered and no success was recorded. Its case directory is docs/current/part-section-business/2026-09-17T00-08-25-380Z.

FCBRepAlgoAPI_Section enabled OCCT parallel execution in its constructors and inherited Build without the synchronous WASM guard already present in FCBRepAlgoAPI_BooleanOperation. A shared Build override now forces SetRunParallel(Standard_False) under __EMSCRIPTEN__ and delegates to OCCT. Desktop builds preserve parallel execution. The affected target is FreeCADWebDocumentProbe, not the packet's generic PartBox target.

Verification At Checkpoint Creation

  • Initial focused document build passed and its JS/WASM/worker were synced.
  • npm --prefix web run check:geometry-boundary passed with no findings. This is a static boundary check, not proof of all runtime paths.
  • Focused TypeScript checking of part-make-face-task.tsx passed.
  • The second document build, containing the Section threading repair, compiled affected Part sources and is linking. Sync and rerun status is recorded below.

Remaining Work

  1. Finish/sync the repaired document artifact and rerun only Section's changed acceptance case. Fix its next concrete failure. Inspect screenshots if the browser cases complete. Retain any required proof areas still absent.
  2. Complete Section coverage for transformed links, stored appearance, and transaction failure after mutation. Current code copies stored WebDisplayColor; full desktop ShapeAppearance-to-LineMaterial semantics are not yet established.
  3. Implement Scale using freecad-source/src/Mod/Part/Gui/DlgScale.cpp, especially its apply/accept/reject paths and writeParametersToFeature near line 340. It writes Base, Uniform, UniformScale, XScale, YScale, ZScale to a native scale feature. TaskScale.cpp does not exist; do not repeat that guessed path.
  4. Implement Section Cut's dock workflow from freecad-source/src/Mod/Part/Gui/SectionCutting.cpp (makeDockWidget near 1455). SectionCut.cpp does not exist. Command activation only opens a singleton dock; a generic section result is not sufficient for its workflow.
  5. Shape Info's CmdShapeInfo::activated in Command.cpp:2154 is empty. Its enabled state requires a document containing Part features and a non-editing 3D view. Preserve this distinction when implementing its cases.

The bounded source reader reached 48 windows / 144000 bytes. All source already read is retained in the turn; this is a read-budget boundary, not absent source. No full-parity/API gates, deployment, pushes, external messages, IFC reruns, contract edits, or manual acceptance status edits were performed.