46 lines
20 KiB
JSON
46 lines
20 KiB
JSON
{
|
|
"command": ["node", "tools/part-business-cases.mjs"],
|
|
"build": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebPartBoxProbe"},
|
|
"buildOverrides": {
|
|
"Part:desktop:Part_Boolean": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
|
|
"Part:desktop:Part_Compound": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
|
|
"Part:desktop:Part_Box2": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
|
|
"Part:desktop:Part_Box3": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
|
|
"Part:desktop:Part_Box": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
|
|
"Part:desktop:Part_Fuse": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
|
|
"Part:desktop:Part_Cut": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
|
|
"Part:desktop:Part_Common": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
|
|
"Part:desktop:Part_Cylinder": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
|
|
"Part:desktop:Part_Cone": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
|
|
"Part:desktop:Part_Sphere": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
|
|
"Part:desktop:Part_Torus": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"}
|
|
},
|
|
"coveredIds": ["Part:desktop:Part_Compound", "Part:desktop:Part_Boolean", "Part:part.createRecompute", "Part:part.importExport", "Part:part.saveReopen", "Part:part.document", "Part:desktop:Part_Box", "Part:desktop:Part_Box2", "Part:desktop:Part_Box3", "Part:desktop:Part_Fuse", "Part:desktop:Part_Cut", "Part:desktop:Part_Common", "Part:desktop:Part_Cylinder", "Part:desktop:Part_Cone", "Part:desktop:Part_Sphere", "Part:desktop:Part_Torus", "business-format:Part:export:.brp", "business-format:Part:export:.igs", "business-format:Part:export:.obj", "business-format:Part:import:.brp", "business-format:Part:import:.iges", "business-format:Part:import:.igs", "business-format:Part:import:.stp"],
|
|
"dependencies": ["tools/part-compound-business-cases.mjs", "tools/part-fixed-box-business-cases.mjs", "web/src/workbench-shell.tsx", "web/src/part-desktop-adapter.ts", "tools/generate_feature_capability_registry.py", "tools/part-boolean-business-cases.mjs", "tools/part-primitive-business-cases.mjs", "tools/business-report.mjs", "tools/wasm-probe-runtime.mjs", "web/src/part-io-facade.ts", "web/src/part-facade.ts", "web/src/part-save-facade.ts", "web/src/part-document-facade.ts", "web/src/part-save.worker.ts", "web/src/facade-envelope.ts", "web/src/project-shell.tsx", "web/src/storage.ts", "web/src/import-render-bridge.ts", "web/src/scene-session-registry.ts", "web/src/render-object-registry.ts", "tools/web-business-cases.mjs", "freecad-source/src/WebAssembly/FreeCADCoreProbe/PartBoxProbe.cpp", "freecad-source/src/WebAssembly/FreeCADCoreProbe/DocumentProbe.cpp", "freecad-source/src/Mod/Mesh/App/Core/Functional.h", "freecad-source/src/Mod/Part/App/AttachExtension.cpp", "freecad-source/src/Mod/Part/App/FeaturePartBoolean.cpp", "freecad-source/src/Mod/Part/App/FCBRepAlgoAPI_BooleanOperation.cpp", "freecad-source/src/Mod/Part/App/PartFeature.cpp", "freecad-source/src/Mod/Part/App/CMakeLists.txt"],
|
|
"fixedBoxScope": "Part_Box, Part_Box2 and Part_Box3 use the existing DocumentProbe, part.document facade, part-save Worker and Part desktop adapter. Native Part::Box defaults follow CmdPartBox/CmdPartBox2/3: 10 mm Cube at the origin for Part_Box, or 100 mm dimensions at (0,0,0) and (50,50,50), one transaction and unique native names. Cases cover preserved existing objects, document isolation, invalid requests, edits, undo/redo, FCStd/OPFS restoration, actual primary React controls, browser desktop dispatcher and native mesh screenshots. Part_Boolean and Part_BoxSelection remain pending.",
|
|
"scope": "Parameterized native Part geometry and format conversions; current multi-object native documents with edited dimensions/labels and imported STEP shapes, real FCStd bytes, save/close/reopen, invalid input recovery and removal. Save/reopen additionally runs the primary React workspace through native WASM, OPFS save, page reload and restore of mixed parametric and imported objects. No claim of all Part operations or all file formats.",
|
|
"remainingBoundaries": [
|
|
"Batch 69fe39ac4430b2f5f2e1b255: the mounted Part adapter now rejects a matching native desktop record carrying an unresolved implementationBoundary, including records labeled exposed, before consuming geometry or applying selection. This aligns the direct BoxSelection/Builder/Chamfer route with the shared desktop response validator. This is a protocol repair, not completed native business behavior. Part_BoxSelection still needs viewport rectangle-to-native-face selection; Part_Builder needs native shape-builder modes and task lifecycle; Part_Chamfer needs persistent current-document features, transactions and task lifecycle. All three remain outside coveredIds and require executable business cases. Build, sync and acceptance are deferred to the outer pipeline; no runtime pass is claimed.",
|
|
"Current Part_Compound acceptance reuses native DocumentProbe Part::Compound and ordered deduplicated Links. The mounted React command and actual document Worker are tested, followed by OPFS save, page reload, native reopen, dependent source edits, undo/redo, unique creation and isolated-document checks. Primary workspace tree/volume and interactive Three.js mesh are verified on desktop/mobile. Document restore now completes afterRestore in the Worker, fixing unavailable transactions after reopening. Compound Tools tests cover only its compound child; explode/filter and other commands are not claimed complete. Earlier entries below describe historical states.",
|
|
"Batch d0d1f5ae6219171c1035aa15 coverage follow-up: Part_Boolean now has an executable selected-ID entry that runs all three existing native/React Boolean operation workflows and aggregates their actual assertions. Each operation invokes the mounted Part_Boolean adapter with explicit operands, invalid selections, Apply with swapped operands, Close, and independent undo/redo. The suite also checks native dependencies, rollback, editable FCStd restoration, primary React controls, OPFS restoration and rendered mesh interaction. The contract selects the existing DocumentProbe target. coveredIds declares executable coverage only; no cases were run in this edit and no acceptance is claimed. Resolution links are emitted only after every operation passes. Dedicated workbench-shell dialog interaction, additional desktop Boolean modes and selection-derived operands remain outside this coverage. BoxSelection still needs viewport rectangle-to-native-face selection; Builder needs native builder modes and persistent document/task semantics; Chamfer needs current-document shape resolution, all selected edges and persistent feature/task transactions. Those three IDs remain uncovered. Build, sync and acceptance belong to the outer pipeline. Earlier entries below describe historical states.",
|
|
"Batch 02dd5cfe22dc13caa14e07bf dropdown contract repair: the mounted Part desktop adapter now normalizes both mode and iMsg for Compound Tools, Join Features and Offset, including mode-only requests and default actions. Conflicting mode/index requests remain rejected. Compound Tools now requires current-document selection; standalone BREP inputs cannot bypass the desktop selection prerequisite. Existing compound creation continues through the native document adapter. This is input-contract repair only. Check Geometry still needs selected document-object task results and multi-shape processing; compound explode/filter need native child dispatch and persistent features; Join needs native Connect/Embed/Cutout features; Offset needs distinct native Offset/Offset2D features and edit accept/cancel. All four selected IDs remain outside coveredIds. Build, sync and acceptance are deferred to the outer pipeline; no runtime or business pass is claimed.",
|
|
"Batch d0d1f5ae6219171c1035aa15: repaired the mounted Part adapter route for BoxSelection, Builder and Chamfer. The previous part.desktopCommand request was not handled by part.worker.ts; these commands now use its existing part.pythonFamilyBatch desktop-command branch, which loads PartDesktopCommandProbe, and unwrap a matching native record before command-specific validation. No shared dispatcher changes or new runtime were introduced. This is routing repair only: BoxSelection still echoes supplied face references and needs viewport rectangle-to-native-face selection; Builder still needs native builder modes and persistent document/task semantics; Chamfer still needs selected current-document shape resolution, all selected edges, persistent native feature transactions and task lifecycle. Boolean retains its document-backed adapter and still needs complete task operation/apply/cancel coverage. All four selected IDs remain outside coveredIds. Build, sync and acceptance remain with the outer pipeline; no business pass or issue resolution is claimed.",
|
|
"Batch ab93c7c7bcdd824bcc5b046e evidence implementation: tools/part-compound-business-cases.mjs is now invoked by the existing selected-ID business runner. It exercises the mounted Compound adapter against native DocumentProbe for ordered deduplicated Links, volume, selection preservation, dependent edits, undo/redo, unique names, rejected-input rollback, document isolation and editable FCStd restoration. These cases have not been executed; build, sync and acceptance belong to the outer pipeline. Browser dispatcher/UI evidence remains outstanding. All four selected IDs remain outside coveredIds. CompSplitFeatures still needs its four persistent native child operations, CoordinateSystem needs LCS grouping and attachment task accept/cancel, and CrossSections needs native section features and task lifecycle.",
|
|
"Batch ab93c7c7bcdd824bcc5b046e isolation repair: the mounted Part_Compound adapter rejects a document override that differs from the selection document and rejects malformed native identifiers before issuing a Worker request. It also checks the returned native document, created Part::Compound identity and ordered deduplicated Links before reporting success. Native creation and selection preservation remain in the existing document route. This closes a path that could resolve selection names against another document. Build, sync and acceptance were not run and remain owned by the outer pipeline. All four selected IDs remain outside coveredIds. Compound still needs command-command evidence for dependent edits, undo/redo, document isolation, rollback and FCStd restoration; CompSplitFeatures needs four persistent child operations; CoordinateSystem needs native LCS grouping and attachment accept/cancel; CrossSections needs native section features and task lifecycle.",
|
|
"Batch 02dd5cfe22dc13caa14e07bf follow-up: the mounted Part adapter now allows nonempty multi-object Check Geometry selections, matching CmdCheckGeometry::isActive. All four selected commands reject mismatched explicit document references. Join and Offset validate mode-only requests, conflicting action indices and default action selection. These are input-contract repairs only: native Check Geometry still needs selected document-object task results and multi-shape processing; Join needs native Connect/Embed/Cutout features; Offset needs distinct Part::Offset/Part::Offset2D features and edit accept/cancel; compound explode/filter need faithful child-command dispatch and persistent features. Existing default/index-0 compound creation continues through the Part_Compound document adapter with native Links, transactions, recompute and preserved selection. All four IDs remain outside coveredIds. Build, sync and business acceptance belong to the outer pipeline; no runtime pass is claimed.",
|
|
"Batch 9fd6e34e3d231013cc29eb89 selection-validation repair: the mounted Boolean adapter now validates supplied selection references even when explicit base/tool task operands are authoritative. Empty selection remains valid with both operands, while malformed and cross-document references are rejected before snapshot or mutation. Existing tools/part-boolean-business-cases.mjs already asserts these invalid requests preserve the native document. No build, sync or acceptance was run; those stages belong to the outer pipeline. Part_Boolean still needs full task operation/operand/apply/cancel coverage; Part_BoxSelection needs viewport rectangle-to-native-face selection; Part_Builder needs native builder modes and task lifecycle; Part_Chamfer needs persistent native feature transactions and task lifecycle. All four selected IDs remain outside coveredIds; this repair is not business acceptance.",
|
|
"Batch ab93c7c7bcdd824bcc5b046e: Part_Compound now uses the mounted Part desktop adapter and part.document Worker route to create a native Part::Compound with ordered deduplicated Links, native unique naming, recompute, transaction rollback and mesh serialization. The facade validates the returned feature identity and Links. Desktop selection is preserved. Build/sync and acceptance are owned by the outer pipeline and were not run. All four selected IDs remain outside coveredIds: Compound still needs real command-command cases covering dependent edits, undo/redo, document isolation, invalid-input rollback and FCStd restoration. Part_CompSplitFeatures still needs all four desktop child operations and persistent native features; Part_CoordinateSystem needs native LCS creation, grouping and attachment task accept/cancel; Part_CrossSections needs desktop task parameters, section features and transaction/task lifecycle. Generic geometry probe results do not establish these document workflows. No business completion is claimed.",
|
|
"Batch 109a3680388f8d6f8ec44cfe: extended the mounted Part adapter input and result checks to Part_CompJoinFeatures and Part_CompOffset. Offset requires one current-document selection and no active task; explicit iMsg values follow the desktop dropdown ranges (Join: 0..2, Offset: 0..1). Both reject descriptor-only responses without native geometry and document-operation evidence. This is integration-contract repair only. Child-command dispatch and native document feature semantics for Connect/Embed/Cutout and 3D/2D Offset remain unverified and incomplete; Builder modes and task lifecycle, Chamfer native feature transactions and apply/cancel also remain outstanding. All four selected IDs remain outside coveredIds. No build, sync, runtime checks or business acceptance were run; the outer pipeline owns these steps.",
|
|
"Batch 9fd6e34e3d231013cc29eb89 follow-up: removed a duplicate nextNudge declaration in the mounted workbench desktop-command handler that blocked TypeScript compilation. The earlier functional payload update remains in place. This is a shared application compile repair encountered on the selected Part route, not new command acceptance. Part_Boolean still requires complete task operation/operand/apply/cancel coverage; Part_BoxSelection requires viewport rectangle-to-native-face selection; Part_Builder requires native shape-builder modes and task lifecycle; Part_Chamfer requires native document feature transactions and task lifecycle. All four remain outside coveredIds. Build, sync and acceptance are deferred to the outer pipeline; no runtime pass is claimed.",
|
|
"Batch 4558a768337f549b15910717: repaired the mounted desktop invocation contract for Part_CheckGeometry and Part_Chamfer. Check Geometry now requires exactly one current-document selection, matching CmdCheckGeometry::isActive and the native one-shape operation. Chamfer now requires one current-document object with native EdgeN subelements and rejects an explicit edgeIndex that disagrees with the selected edge. This prevents empty or non-edge desktop invocations from reaching the native family route. This is input-contract repair only, not business acceptance. Part_Builder still needs its native shape-builder modes and task lifecycle; Part_Chamfer still needs native document feature transactions and apply/cancel; Part_CheckGeometry still needs the native task result model for document objects; Part_CompCompoundTools still needs faithful Compound/ExplodeCompound/CompoundFilter dropdown dispatch. All four remain outside coveredIds. Build, sync and acceptance belong to the outer pipeline; no passing runtime evidence is claimed.",
|
|
"Batch 9fd6e34e3d231013cc29eb89: corrected the mounted Part adapter activation guard against Command.cpp: Boolean, Builder and Chamfer reject an active task; BoxSelection requires a document but is not disabled by an active task. Selected commands now reject malformed and cross-document selection references before native dispatch. This is input-contract repair only, not business acceptance. Part_Boolean still needs the complete operation/operand/apply/cancel task workflow; Part_BoxSelection needs viewport rectangle-to-native-face selection; Part_Builder needs the native shape-builder modes and task lifecycle; Part_Chamfer needs current-document edge references, native feature transactions and its task lifecycle. All four remain outside coveredIds. Build, sync and acceptance belong to the outer pipeline; no passing runtime evidence is claimed.",
|
|
"Batch c398e2ee6c0a29aefada33aa: create/recompute success reports now explicitly associate runtime:441b272e22a56e4c5c78, runtime:201e0521da22523235ef, runtime:2fdaf656f4e3dc6776d4 and runtime:92ca06ea8e3bbf6987ab and their failure keys with the existing native parameterized geometry, invalid-input rejection and recovery cases. These are superseding business-evidence links for the corrected configure build root and shared Node WASM loader, not assertions that historical build/preflight commands were rerun. Failure reports do not emit resolution links. Outer pipeline owns build, sync, actual case execution and fingerprint-aware issue closure; no new passing runtime evidence is claimed by this edit.",
|
|
"Historical batch aff7351a5bd70a9bc935d16c follow-up: the legacy PartBoxProbe fallback was corrected to reject Part_Boolean, Part_Box2, Part_Box3 and Part_BoxSelection without native current-document handlers. The current DocumentProbe path covers Part_Box, Part_Box2 and Part_Box3 with fingerprinted business evidence; Part_Boolean and Part_BoxSelection remain outside this contract.",
|
|
"Historical protocol correction: the mounted Part adapter rejects malformed native selection results and preserves subelement references through the dispatcher callback. This did not itself constitute command acceptance; current acceptance is determined only by executable cases and evidence. Boolean dialog modes and viewport rectangle-to-native-face selection remain pending.",
|
|
"Current-document Fuse/Cut/Common use native Part::Boolean operand links and the supplied OCCT libraries. Cases cover placement, dependent recompute, native transactions, cycle and invalid-input rollback, empty Common, and editable FCStd/OPFS restore in the primary React workspace. This is not acceptance of every Boolean dialog mode or every workbench route. Web empty materials inherit the base material without requiring the desktop default-material catalog; desktop behavior is unchanged.",
|
|
"OBJ is a mesh export, not a lossless TopoShape BREP round trip. Current cases cover varying box dimensions, native exported mesh volume, facets, reopening and missing-input rejection; arbitrary external mesh topology, materials and textures are not covered.",
|
|
"The existing OBJ path uses OCCT STL output and native FreeCAD Mesh loading/writing. MeshCore::parallel_sort uses serial standard sorting under Emscripten to avoid recursive std::async exhausting the prestarted pthread pool. Desktop sorting is unchanged. Native stage timing is opt-in via FREECAD_PART_TRACE=1; historical timeout reports remain in periodic-optimization/optimization-000044.md.",
|
|
"Document and save/reopen cases cover the declared native and React/OPFS workflows only, not all Part workbench commands. Effective completion remains determined by current fingerprinted execution evidence, not this contract text."
|
|
]
|
|
}
|