5.0 KiB
Edit and transform business checkpoint
Batch: 7ed63c875d6fa074ba322b8b.
Selected: Web:desktop:Std_Edit, Web:desktop:Std_Transform, Web:desktop:Std_TransformManip.
Attributable result
python3 tools/run_business_acceptance.py --module Web --ids Web:desktop:Std_Edit --reuse
passed one selected record in 11.432 seconds. Evidence:
docs/current/business-evidence/6097a992e376ebeaa624bd90-20260916T153819180454.json.
This is a bounded PartBox browser workflow for native Part::Box editing, not proof of all ViewProvider editors or transform commands.
The original batch run is retained at
docs/current/business-evidence/4b22f9043f0277e18ad190db-20260916T153106588126.json.
Its first actual error was No module named 'FreeCADGui' for Edit; both transform records reported business route not implemented.
An intermediate edit run reached all original selection/lifecycle assertions but exposed a new case-helper wait bug:
docs/current/business-evidence/6097a992e376ebeaa624bd90-20260916T153743828334.json.
The helper now waits for a non-null response with a new request ID. No acceptance statuses were edited.
Implementation and verification
freecad-source/src/WebAssembly/FreeCADCoreProbe/WebViewCommands.h: retains the GUI edit path and adds a headlessPart::Boxeditor. Begin/read identify the native object; preview changes native dimensions and recomputes OCCT geometry in one open transaction; finish commits; cancel aborts and recomputes. Invalid dimensions, driven/read-only dimensions, wrong-document selection and unsupported object editors return errors. Session state belongs to the native App runtime and retains its owning document reference.web/src/web-commanddoc-task.tsx: mounted Length/Width/Height inputs, Preview Edit, Finish Editing and Cancel Editing; displays command errors. Existing shell/adapter routing already reaches this task and native owner, so no shared dispatcher changes were needed.web/src/web-commanddoc-contract.ts: adds optional typed edit properties to the application response shape. Acceptance contracts and IFC contract/verifiers were not modified.tools/web-business-cases.mjs: selected Edit case checks mounted begin and preview controls, native object identity, valid OCCT volume, other-document isolation, exact BREP restoration on cancel, one committed undo transaction, exact BREP undo/redo restoration, and rejection of invalid selections/dimensions without geometry/history changes.- Focused
FreeCADWebPartBoxProbeandFreeCADWebDocumentProbebuilds completed;npm --prefix web run sync-kernelsynchronized the new outputs; finalweb/node_modules/.bin/vite build webcompleted. npm --prefix web run check:geometry-boundary,web/node_modules/.bin/tsc --noEmit -p web/tsconfig.json, andnode --check tools/web-business-cases.mjspassed. Static geometry auditing does not certify a single native runtime.- Existing application server responded at
http://127.0.0.1:5180/workbench.html. No new persistent server was started. All build and acceptance command sessions completed.
Remaining work and next action
- Implement
Std_TransformandStd_TransformManipwith executable native/browser cases. Neither has new passing evidence. Their names are present in native commanddoc membership, but there is no transform-specific handler inWebViewCommands.h, no dedicated mounted transform controls, and no transform case intools/web-business-cases.mjs. - Current adapter routes both through
statefulCommandDoctopart.pythonFamilyBatch, and the fallback rewrites operation names totransform/transform-manip. Inspect and repair that path inweb/src/web-desktop-adapter.ts; keep module-specific routing out of the shared dispatcher. - Source decisions retained:
CommandDoc.cpp:1714opensTaskTransformand disallows an already-active task;:1799resets current editing then enters native ViewProvider Transform mode;:1816requires exactly one unfrozen GeoFeature;:1915toggles edit and can finish with no selection. TransformManip needs actual interactive transform behavior and native placement/transaction assertions, not a success envelope or proxy geometry. - Edit remains limited to
Part::Box; other headless object types explicitly require their specialized native editor. DocumentProbe was rebuilt because the native header is shared, but this browser case exercised PartBox only. GUI-host behavior, cross-command task conflicts, document closure during preview, responsive screenshots, and broader specialized editors have not been certified by this case. - Reuse the successful Edit evidence whenever inputs are unchanged. Run affected selected cases through
tools/run_business_acceptance.py --module Web --ids ... --reuse; do not replay unchanged failures or unrelated IFC work. Preserve all original/supplemental requirements, semantic IFC contract, proof-area requirements, and acceptance machinery.
No deployment, pushes, external messages, full-parity/API gates, coverage-label additions, or manual status changes were performed.