Files
FreeCADWasmDev/docs/business-acceptance/PartDesign.json
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

98 lines
11 KiB
JSON

{
"selectedBatchef695c99f86c9ed83f3e44f7": {
"currentRepair": "Fixed mounted Hole adapter edit selection: after creation selects the Hole, subsequent edits with an explicit profile now retain that profile when the target Hole is selected. Foreign-document, unrelated-object and subelement selections remain rejected. Worker cases now exercise selected-Hole edits before and after FCStd reopen and invalid feature selections. Cases were not executed: outer pipeline owns build, sync and acceptance. Native source search reached SCHEDULER_SOURCE_BUDGET_REACHED; Draft, LinearPattern and Mirrored remain guarded and all four IDs remain pending. Retained desktop Command.cpp anchors 2226-2335 establish Mirrored profile V_Axis/body XY defaults and LinearPattern profile H_Axis/body X defaults for the next native integration step.",
"remainingIds": ["PartDesign:desktop:PartDesign_Draft", "PartDesign:desktop:PartDesign_Hole", "PartDesign:desktop:PartDesign_LinearPattern", "PartDesign:desktop:PartDesign_Mirrored"],
"repair": "Hole now routes from the mounted desktop adapter through partdesign.document to native PartDesign::Hole. The existing profile-based document owner supplies Body ownership, linked profile, transactions and recompute; diameter and dimension depth are editable and serialized in native snapshots. Worker cases were added for material removal, edit, undo/redo, failed native edit rollback, selection validation, FCStd reopen and continued editing. No build or business pass is claimed.",
"boundaries": "Hole implementation and new Worker cases await outer-pipeline build, sync and acceptance, plus mounted application coverage. The connected Hole controls are profile, diameter, dimension depth and reversed; threading, countersink and other task-panel controls are not connected. Draft, LinearPattern and Mirrored remain guarded as unsupported: Draft needs selected face links, neutral plane, pull direction and angle; LinearPattern needs Originals links, direction, length and occurrences; Mirrored needs Originals links and a native mirror-plane reference including desktop profile-axis/body-origin defaults. Source inspection reached SCHEDULER_SOURCE_BUDGET_REACHED after inspecting the existing document owner and Hole header; further source search was stopped. Remaining IDs stay pending until actual business validation."
},
"selectedBatch4fe21f2b12473fc634d0c70d": {
"pendingValidation": ["PartDesign:desktop:PartDesign_Line"],
"repair": "Native setDatum now updates an existing datum of the requested type, preserving Body ownership and using the native placement transaction and recompute path. Clone still requires a new object. Line cases retain creation and placement assertions and add edit undo/redo and invalid-edit rollback checks.",
"boundaries": "Build, sync and acceptance remain with the outer pipeline; no business pass is claimed. Datum attachment and rotation editing, Sketcher MapSketch/EditSketch group children, and browser persistence coverage remain unconnected or unverified. Other selected command behavior is unchanged."
},
"selectedBatch11696c2995234b138e772014": {
"pendingValidation": ["PartDesign:desktop:PartDesign_Line"],
"remainingIds": ["PartDesign:desktop:PartDesign_Draft", "PartDesign:desktop:PartDesign_Hole", "PartDesign:desktop:PartDesign_LinearPattern"],
"boundaries": "Line uses the existing native setDatum document action; executable cases cover creation, placement update, Body ownership, selection and rejection without mutation. Attachment and rotation editing remain unconnected. Draft, Hole and LinearPattern now fail explicitly in the mounted desktop adapter instead of reaching legacy standalone shape operations. Remaining work: native Draft with selected faces, neutral plane and pull direction; native Hole with linked profile, diameter and depth; native LinearPattern with original feature links, direction, length and occurrences. Preserve Body tip, transactions, recompute, undo/redo and save/reopen semantics. Build, sync and acceptance are owned by the outer pipeline; no business pass is claimed."
},
"datumCloneWorkflowScope": "Pending outer-pipeline validation: native FeatureBase clone in a new Body, linked source recompute, unattached datum creation with supplied origin, and command-group default dispatch through the mounted workbench selector. Cases execute the real PartDesign Worker and adapter. Attached datum support, rotation editing, Sketcher MapSketch/EditSketch group children, clone visual properties and preference parity, and browser interaction/persistence coverage remain unverified or unconnected. coveredIds declares executable cases, not business acceptance.",
"command": [
"node",
"tools/partdesign-business-cases.mjs"
],
"build": {
"tree": "freecad-source/build-web/configure",
"target": "FreeCADWebPartDesignRuntimeProbe"
},
"coveredIds": [
"PartDesign:desktop:PartDesign_Line",
"PartDesign:desktop:PartDesign_Clone",
"PartDesign:desktop:PartDesign_CompDatums",
"PartDesign:desktop:PartDesign_CompSketches",
"PartDesign:desktop:PartDesign_CoordinateSystem",
"PartDesign:partdesign.createRecompute",
"PartDesign:partdesign.saveReopen",
"PartDesign:partdesign.document",
"PartDesign:desktop:PartDesign_Body",
"PartDesign:desktop:PartDesign_NewSketch",
"PartDesign:desktop:PartDesign_Pad",
"PartDesign:desktop:PartDesign_Pocket",
"PartDesign:desktop:PartDesign_Revolution",
"PartDesign:desktop:PartDesign_Groove",
"PartDesign:desktop:PartDesign_Fillet",
"PartDesign:desktop:PartDesign_Chamfer",
"PartDesign:desktop:PartDesign_AdditiveHelix",
"PartDesign:desktop:PartDesign_AdditiveLoft",
"PartDesign:desktop:PartDesign_AdditivePipe",
"PartDesign:desktop:PartDesign_SubtractiveLoft",
"PartDesign:desktop:PartDesign_SubtractivePipe",
"PartDesign:desktop:PartDesign_Boolean"
],
"fileWorkflowScope": "The existing PartDesign document Worker uses native Part::TopoShape and OCCT StlAPI_Reader for selected-object STEP, BREP, IGES and STL exchange. Actual placed-solid round trips check volume, mesh bounds, unchanged source history, imported-feature undo/redo, malformed-input rollback, file preservation and continued editing after FCStd reopen. Browser cases download and import actual bytes, preserve mixed native/imported models through OPFS reload, and check desktop/mobile toolbar layout. This does not certify arbitrary assemblies, metadata fidelity across neutral formats, curved STL volume equivalence or every desktop import/export option.",
"subtractiveWorkflowScope": "SubtractiveLoft and SubtractivePipe reuse native PartDesign classes, current Body/Profile/Sections/Spine and OCCT. Cases verify variable removed volume, dependent base/profile edits, native mesh, same-document links, invalid-input rollback, undo/redo, FCStd editing after full afterRestore, actual React controls, OPFS reload and desktop/mobile Three.js rendering. This covers straight rectangular lofts and a selected-edge circular pipe, not arbitrary multi-section/path options or every desktop task mode.",
"dependencies": [
"tools/partdesign-datum-clone-business-cases.mjs",
"tools/partdesign-subtractive-business-cases.mjs",
"tools/partdesign-additive-business-cases.mjs",
"freecad-source/src/Mod/PartDesign/App/FeatureHelix.h",
"freecad-source/src/Mod/PartDesign/App/FeatureLoft.h",
"freecad-source/src/Mod/PartDesign/App/FeaturePipe.h",
"freecad-source/src/Mod/PartDesign/App/FeatureBoolean.h",
"web/src/partdesign-desktop-adapter.ts",
"tools/wasm-probe-runtime.mjs",
"tools/partdesign-business-cases.mjs",
"tools/partdesign-profile-business-cases.mjs",
"tools/partdesign-file-business-cases.mjs",
"tools/part-primitive-business-cases.mjs",
"tools/generate_web_module_registry.py",
"web/src/module-registry.generated.ts",
"web/partdesign.html",
"web/src/partdesign-document-facade.ts",
"web/src/partdesign-workspace.tsx",
"web/src/partdesign-workspace.css",
"web/src/part-document-facade.ts",
"web/src/storage.ts",
"web/src/import-render-bridge.ts",
"web/src/scene-session-registry.ts",
"web/src/render-object-registry.ts",
"web/src/partdesign-facade.ts",
"web/src/partdesign-save-facade.ts",
"web/src/partdesign-geometry-family-facade.ts",
"web/src/facade-envelope.ts",
"web/src/partdesign.worker.ts",
"freecad-source/src/WebAssembly/FreeCADCoreProbe/PartDesignDocumentWorkflow.cpp",
"freecad-source/src/WebAssembly/FreeCADCoreProbe/PartDesignRuntimeProbe.cpp",
"freecad-source/src/Mod/PartDesign/App/FeaturePrimitive.cpp",
"tools/partdesign-finishing-business-cases.mjs",
"freecad-source/src/Mod/PartDesign/App/CMakeLists.txt",
"freecad-source/src/Mod/PartDesign/App/FeatureRevolution.cpp",
"freecad-source/src/Mod/PartDesign/App/FeatureGroove.cpp",
"freecad-source/src/Mod/PartDesign/App/FeatureFillet.cpp",
"freecad-source/src/Mod/PartDesign/App/FeatureChamfer.cpp",
"freecad-source/src/App/StringHasher.cpp"
],
"profileWorkflowScope": "The existing PartDesign runtime owns Body, fully constrained Rectangle/Circle SketchObject profiles, native Pad/Pocket, transactions and FCStd. Tests execute varying dimensions, native solver coordinates/DOF, linked recompute, multiple bodies, invalid-request rollback and save/close/reopen. The actual React /partdesign.html workspace and Worker load the existing WASM, display native OCCT meshes, save FCStd to OPFS, reload and continue editing. This does not certify arbitrary sketch editing, face attachment, all extrusion modes, every legacy desktop-command adapter, or shared native pointers across independent WASM instances.",
"scope": "Published native parameterized AdditiveBox creation/recompute and current-document FCStd save/reopen through the save Facade and shared dispatcher. Cases check multiple objects, supplied geometry before/after persistence, source edits and repeated saves, independent reopened documents, continued editing, invalid paths and handles through native and Facade entry points, recovery and cleanup. Both selected workflows share one public WASM initialization. The real PartDesign Worker message handler is exercised with that public WASM injected at the loader boundary for creation, save/reopen and continued editing; the generated save route must select that Worker. This contract does not claim browser loading, page integration, OPFS persistence or cross-worker document synchronization.",
"finishingWorkflowScope": "Current-document Revolution/Groove with native body-origin axes and angles. Fillet/Chamfer use actual selected native edges; tests cover varying sizes, multiple edges, failed-operation rollback, base length edits, unchanged native mapped edge identities, FCStd/OPFS reopen and subsequent edits. StringHasher no longer returns an invalid IndexedName numeric suffix for the first hash insertion. Native identity is preserved, not rebound to edge indices. Existing historical malformed files and arbitrary topology-changing edits are not certified by this scope."
}