39 lines
5.0 KiB
Markdown
39 lines
5.0 KiB
Markdown
# 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 headless `Part::Box` editor. 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 `FreeCADWebPartBoxProbe` and `FreeCADWebDocumentProbe` builds completed; `npm --prefix web run sync-kernel` synchronized the new outputs; final `web/node_modules/.bin/vite build web` completed.
|
|
- `npm --prefix web run check:geometry-boundary`, `web/node_modules/.bin/tsc --noEmit -p web/tsconfig.json`, and `node --check tools/web-business-cases.mjs` passed. 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
|
|
|
|
1. Implement `Std_Transform` and `Std_TransformManip` with executable native/browser cases. Neither has new passing evidence. Their names are present in native commanddoc membership, but there is no transform-specific handler in `WebViewCommands.h`, no dedicated mounted transform controls, and no transform case in `tools/web-business-cases.mjs`.
|
|
2. Current adapter routes both through `statefulCommandDoc` to `part.pythonFamilyBatch`, and the fallback rewrites operation names to `transform`/`transform-manip`. Inspect and repair that path in `web/src/web-desktop-adapter.ts`; keep module-specific routing out of the shared dispatcher.
|
|
3. Source decisions retained: `CommandDoc.cpp:1714` opens `TaskTransform` and disallows an already-active task; `:1799` resets current editing then enters native ViewProvider Transform mode; `:1816` requires exactly one unfrozen GeoFeature; `:1915` toggles 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.
|
|
4. 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.
|
|
5. 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.
|