# Part Builder Document Workflow Subsequent completion: `PART_CHAMFER_DOCUMENT_PROGRESS.md` records the now accepted native Chamfer workflow. Its pending status below is historical; BoxSelection remains separate work. 2026-09-16. `Part:desktop:Part_Builder` now has passing executable native and browser business evidence. This adds one previously missing workflow; it is not another IFC regression or a metadata-only routing receipt. ## Implementation `PartBuilderDocument.h` uses the Part constructors from the supplied desktop `src/Mod/Part/Gui/TaskShapeBuilder.cpp`: edge from vertices, wire from edges, face from vertices, face from edges, shell from faces and solid from shell. Planar/filled-face, selected/all-faces and refine options are supported. For filled faces from existing edges, constructing a native wire first normalizes edge orientation; feeding those wire edges to the existing filling API avoids an invalid unorientable surface. Validity checks remain mandatory. All topology references resolve against the current DocumentProbe document. Each Create adds a real Part::Feature under one transaction, with unique names, recompute, undo/redo and FCStd persistence. Invalid/cross-document selections, wrong topology, out-of-range subelements, overwrite attempts and active native transactions reject without partially changing the document. Closing the task does not create or discard previously committed shapes. Created shapes retain desktop independent-shape behavior after subsequent source edits. The mounted React panel provides all six modes, object/subelement selection, native geometry metrics, undo/redo, task close/reopen, OPFS saving and local FCStd opening. It reuses the existing Three.js view for actual native meshes and OCCT-discretized edge curves. No frontend geometry algorithm or additional WASM runtime was introduced. File selection does not overwrite an open native document; opening into a new document name preserves the existing one. ## Native Recovery Defect An out-of-range `Shape.getElement` call previously threw a C++ exception through CPython, after which the next request trapped in `PyEval_GetBuiltins`. The relevant Part Python binding units lacked Emscripten exception-catching compile flags despite containing Python exception translation handlers. Enabled `-fexceptions` for the six binding units used by the builder. This was an incremental Part-library rebuild and DocumentProbe relink; OCCT was reused. Other existing module binaries were not rebuilt merely to refresh fingerprints. The case explicitly calls the binding with Vertex999, catches IndexError and then creates another native line. Additional malformed geometry and selection cases exercise recovery without destroying the interpreter or undo history. An imported object legitimately clears the redo branch when it is added; the pending-import test compares against that native transaction state, then aborts the import and checks original objects and undo history are preserved. ## Validation Final evidence: `business-evidence/5b7b9a3f77245805e36fd975-20260916T042630336518.json`. Builder has 24 passing scenarios including six modes, filled-face variants, selected-face shells, invalid inputs, transaction recovery, native FCStd and mounted browser operations. The same run also passed existing Part_Box, Part_Compound and Part save/reopen workflows, and closed the attributable Builder issue `runtime:e885d331cbe01e94b1dd` through the acceptance runner. Screenshots and geometry-pixel checks are attached by hash in the evidence. The desktop viewport is 1440x900 and mobile layout 390x844. Native geometry is nonblank in both, and orbiting changes the rendered image. Node cases share one DocumentProbe, while browser cases exercise actual Worker loading and a page reload for persistence. The complete four-requirement run took 58.194 seconds. Repeating Builder with `--reuse` took 0.146 seconds, read one report, executed zero cases and retained its original evidence timestamp. TypeScript, geometry ownership check, production Vite build, 47 business automation tests and 12 scheduler-context tests passed. Incremental public asset sync took 4.197 seconds during the 29.23-second Vite build. Diagnostic history remains in `part-builder-business/`, `part-builder-filling-diagnostic.json` and `part-builder-recovery-diagnostic.json`. Intermediate failed evidence remains in `business-evidence/`; final acceptance supersedes the observed defects. ## Continue Continue remaining uncovered requirements; do not repeat unchanged Builder or IFC workflows. BoxSelection and Chamfer remain separate incomplete workflows. Rectangle viewport picking belongs to BoxSelection; this Builder panel selects explicit native object/subelement references. The scope remains 1508 total.