Files
FreeCADWasmDev/docs/business-acceptance/Part.json

57 lines
15 KiB
JSON

{
"command": ["node", "tools/part-business-cases.mjs"],
"caseDependencies": ["tools/part-check-geometry-business-cases.mjs","web/src/part-check-geometry-task.tsx","freecad-source/src/WebAssembly/FreeCADCoreProbe/PartCheckGeometry.h","freecad-source/src/Mod/Part/App/TopoShape.cpp","freecad-source/src/Mod/Part/Gui/TaskCheckGeometry.cpp","tools/part-view-business-cases.mjs","web/src/part-view-facade.ts","web/src/document-view-routes.json","web/src/web-window-contract.ts","web/src/web-group-contract.ts","web/src/web-open-contract.ts","web/src/web-structure-contract.ts","web/src/web-link-contract.ts","web/src/web-commanddoc-contract.ts","web/src/web-std-workflow-contract.ts","web/src/web-standard-command-contract.ts","web/package.json","tools/part-box-selection-adapter-cases.mjs","tools/part-box-selection-business-cases.mjs","tools/part-box-selection-browser-cases.mjs","web/src/web-view-task.tsx","web/src/web-desktop-adapter.ts","freecad-source/src/WebAssembly/FreeCADCoreProbe/WebViewCommands.h","freecad-source/src/WebAssembly/FreeCADCoreProbe/NativeDocumentView.h","freecad-source/src/Mod/Part/Gui/BoxSelection.cpp","tools/part-chamfer-business-cases.mjs","web/src/part-chamfer-task.tsx","freecad-source/src/WebAssembly/FreeCADCoreProbe/PartChamferDocument.h","freecad-source/src/Mod/Part/App/FeatureChamfer.cpp","freecad-source/src/Mod/Part/Gui/DlgFilletEdges.cpp","tools/part-builder-business-cases.mjs","web/src/part-builder-task.tsx","web/src/openscad-desktop-view.tsx","web/src/scene-command-host.ts","freecad-source/src/WebAssembly/FreeCADCoreProbe/PartBuilderDocument.h","freecad-source/src/Mod/Part/Gui/TaskShapeBuilder.cpp","tools/part-make-face-business-cases.mjs","web/src/part-make-face-task.tsx","freecad-source/src/Mod/Part/App/FeatureFace.cpp","freecad-source/src/Mod/Part/Gui/Command.cpp","tools/part-new-document-business-cases.mjs","tools/part-cross-sections-business-cases.mjs","web/src/part-cross-sections-task.tsx","freecad-source/src/WebAssembly/FreeCADCoreProbe/PartCrossSectionsDocument.h","freecad-source/src/Mod/Part/Gui/CrossSections.cpp","freecad-source/src/Mod/Part/App/CrossSection.cpp","freecad-source/src/Mod/Part/Gui/CrossSections.ui","tools/part-color-io-business-cases.mjs","tools/part-import-business-cases.mjs","web/src/part-import-task.tsx","web/src/part-export-task.tsx","freecad-source/src/WebAssembly/FreeCADCoreProbe/PartColoredIO.h","freecad-source/src/WebAssembly/FreeCADCoreProbe/CMakeLists.txt","freecad-source/src/Mod/Import/App/ImportOCAF2.cpp","freecad-source/src/Mod/Import/App/ImportOCAF.cpp","freecad-source/src/Mod/Import/App/ExportOCAF2.cpp","freecad-source/src/Mod/Import/App/ReaderStep.cpp","freecad-source/src/Mod/Import/App/ReaderIges.cpp","freecad-source/src/Mod/Import/App/WriterStep.cpp","freecad-source/src/Mod/Import/App/WriterIges.cpp","tools/part-ruled-surface-business-cases.mjs","web/src/part-ruled-surface-task.tsx","freecad-source/src/WebAssembly/FreeCADCoreProbe/PartRuledSurfaceDocument.h","freecad-source/src/Mod/Part/App/PartFeatures.cpp","freecad-source/src/Mod/Part/App/PartFeatures.h","tools/part-cleanup-business-cases.mjs","web/src/part-cleanup-task.tsx","freecad-source/src/WebAssembly/FreeCADCoreProbe/PartCleanupDocument.h","freecad-source/src/WebAssembly/FreeCADCoreProbe/PartDesktopCommands.cpp","freecad-source/src/Mod/Part/Gui/CommandSimple.cpp","tools/part-copy-business-cases.mjs","web/src/part-copy-task.tsx","freecad-source/src/WebAssembly/FreeCADCoreProbe/PartCopyDocument.h","freecad-source/src/App/GeoFeature.cpp","freecad-source/src/App/DocumentObject.cpp","tools/part-mesh-conversion-business-cases.mjs","web/src/part-mesh-conversion-task.tsx","freecad-source/src/WebAssembly/FreeCADCoreProbe/PartMeshConversionDocument.h","freecad-source/src/Mod/Part/Gui/ShapeFromMesh.cpp","freecad-source/src/Mod/Part/App/TopoShapePyImp.cpp","freecad-source/src/Mod/Mesh/App/Mesh.cpp","tools/part-sample-points-business-cases.mjs","web/src/part-sample-points-task.tsx","freecad-source/src/WebAssembly/FreeCADCoreProbe/PartSamplePointsDocument.h","freecad-source/src/Mod/Part/BasicShapes/Utils.py","tools/part-simple-cylinder-business-cases.mjs","web/src/part-simple-cylinder-task.tsx","freecad-source/src/WebAssembly/FreeCADCoreProbe/PartSimpleCylinderDocument.h","freecad-source/src/Mod/Part/Gui/DlgPartCylinderImp.cpp","freecad-source/src/Mod/Part/Gui/DlgPartCylinder.ui","freecad-source/src/Mod/Part/App/AppPartPy.cpp","tools/part-tube-business-cases.mjs","web/src/part-tube-task.tsx","freecad-source/src/WebAssembly/FreeCADCoreProbe/PartTubeDocument.h","freecad-source/src/Mod/Part/BasicShapes/Shapes.py","freecad-source/src/Mod/Part/BasicShapes/CommandShapes.py","freecad-source/src/Mod/Part/BasicShapes/ViewProviderShapes.py","tools/part-tolerance-business-cases.mjs","web/src/part-tolerance-task.tsx","freecad-source/src/WebAssembly/FreeCADCoreProbe/PartToleranceDocument.h","freecad-source/src/Mod/Part/BOPTools/ToleranceFeatures.py","tools/part-attachment-business-cases.mjs","web/src/part-attachment-task.tsx","freecad-source/src/App/Document.cpp","freecad-source/src/App/Document.h","freecad-source/src/Mod/Part/AttachmentEditor/Commands.py","freecad-source/src/Mod/Part/AttachmentEditor/TaskAttachmentEditor.py","tools/part-datums-group-business-cases.mjs","web/src/part-datums-group.ts","web/src/part-datums-group-task.tsx","freecad-source/src/Gui/Command.cpp","tools/part-additional-primitive-business-cases.mjs","freecad-source/src/Mod/Part/App/PrismExtension.cpp","tools/part-helix-spiral-business-cases.mjs","tools/part-primitive-placement-business-cases.mjs","tools/part-cylinder-skew-business-cases.mjs"],
"build": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebPartBoxProbe"},
"buildOverrides": {
"Part:desktop:Part_Primitives": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_Datums": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_EditAttachment": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_ToleranceSet": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_Tube": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_SimpleCylinder": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_PointsFromMesh": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_ShapeFromMesh": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_SimpleCopy": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_TransformedCopy": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_ElementCopy": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_RefineShape": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_Defeaturing": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_RuledSurface": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_Import": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_Export": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_CrossSections": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_NewDoc": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_DatumPoint": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_MakeFace": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:desktop:Part_CheckGeometry": {"tree":"freecad-source/build-web/configure","target":"FreeCADWebDocumentProbe"},
"Part:part.documentViewCommand": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
"Part:part.viewCommand": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebPartBoxProbe"},
"Part:desktop:Part_BoxSelection": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
"Part:desktop:Part_Chamfer": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
"Part:desktop:Part_Builder": {"tree": "freecad-source/build-web/configure", "target": "FreeCADWebDocumentProbe"},
"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_DatumPoint","Part:desktop:Part_CheckGeometry","Part:part.documentViewCommand","Part:part.viewCommand","Part:desktop:Part_BoxSelection","Part:desktop:Part_Chamfer","Part:desktop:Part_Builder","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","Part:desktop:Part_MakeFace","Part:desktop:Part_NewDoc","Part:desktop:Part_CrossSections","Part:desktop:Part_Import","Part:desktop:Part_Export","Part:desktop:Part_RuledSurface","Part:desktop:Part_RefineShape","Part:desktop:Part_Defeaturing","Part:desktop:Part_SimpleCopy","Part:desktop:Part_TransformedCopy","Part:desktop:Part_ElementCopy","Part:desktop:Part_ShapeFromMesh","Part:desktop:Part_PointsFromMesh","Part:desktop:Part_SimpleCylinder","Part:desktop:Part_Tube","Part:desktop:Part_ToleranceSet","Part:desktop:Part_EditAttachment","Part:desktop:Part_Datums"],
"dependencies": ["tools/part-datum-business-cases.mjs", "web/src/part-datum-task.tsx", "freecad-source/src/WebAssembly/FreeCADCoreProbe/PartDatumDocument.h", "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": "Current Part cases cover native parameterized geometry, declared file conversions, persistent document and task workflows, two document-view services, and multi-object BREP/BOP inspection. coveredIds declares executable cases only; current source/artifact/result evidence determines acceptance. The older fixedBoxScope note is historical and superseded by coveredIds and the current evidence ledger. No claim of all Part commands, desktop GUI parity, or all formats.",
"remainingBoundaries": [
"Uncovered requirements remain pending, including Compound Tools explode/filter, persistent Join Connect/Embed/Cutout, 3D/2D Offset, split-feature child operations, CoordinateSystem attachment and CrossSections. Registered routes and native descriptors do not establish those workflows.",
"Builder, Chamfer, Boolean, Compound, fixed boxes, face box selection and Check Geometry have executable native/browser cases. Geometry inspection reports BREP/BOP faults without repairing them. Passing view-service cases do not certify every desktop command reachable through a service.",
"OBJ coverage concerns mesh export using native OCCT/FreeCAD Mesh, with supplied geometry volume/facets and file reopening; it is not a lossless BREP round trip or proof of arbitrary external mesh topology, materials or textures.",
"Document/save cases cover the declared multi-object FCStd and React/OPFS workflows only. Keep all original requirements; acceptance is based on current fingerprinted execution evidence, never these progress notes.",
"Historical implementation and boundary notes are archived in docs/current/part-business-boundary-history.json. Reuse docs/current/PART_VIEW_SERVICE_PROGRESS.md and PART_CHECK_GEOMETRY_PROGRESS.md for the latest implementation and evidence; do not treat archived pending statements as current gaps."
]
}