5.3 KiB
PartDesign MoveTip continuation checkpoint
Batch: fa7b23bded1a4e56e7765844
Selected record: PartDesign:desktop:PartDesign_MoveTip
Date: 2026-09-17
Implemented
- Mounted desktop command routes through the existing PartDesign adapter and Worker document action. Shared dispatcher and workbench shell were not changed.
- Adapter requires one whole-object selection in the current document and rejects conflicting objects, active tasks and non-accept actions.
- Native
moveTipresolves the selected feature's Body, accepts a Body to clear Tip, rejects missing/nonfeature/unowned/nonsolid selections, and retains the desktop BaseFeature exception. - Tip changes use a native document transaction and the existing recompute/snapshot path. Selecting the current feature Tip creates no transaction. Body ownership, feature order, downstream objects and profile links remain intact. Successful responses publish the native selected object.
- Existing Body business harness now executes MoveTip both through the real Worker/adapter and through the mounted browser command selector and payload editor. Added executable coverage registration only; no passing statuses or acceptance machinery were manually changed.
Verification
cmake --build freecad-source/build-web/configure --target FreeCADWebPartDesignRuntimeProbe -j2: passed. Existing pthread/memory-growth and FS_readFile export warnings remain.- Copied the rebuilt
FreeCADWebPartDesignRuntimeProbe.jsand.wasmfrom the configured build bin toweb/public/kernel/. node web/node_modules/typescript/bin/tsc --noEmit -p web/tsconfig.json: passed. Initialnpx tsc --noEmitdid not resolve the repository compiler; the direct installed compiler invocation succeeded.python3 tools/run_business_acceptance.py --module PartDesign --ids PartDesign:desktop:PartDesign_MoveTip: passed, 1 selected record, 37 cases, including 18 mounted-browser cases, no failed assertions.- Evidence:
docs/current/business-evidence/f991424a1034c7ed18e49cce-20260917T041056148369.json. - Timings: WASM load 2.186 s; native workflow 2.907 s; mounted browser workflow 10.223 s; acceptance runner total 15.932 s.
- Cases assert native Body shape volumes, retained downstream Pad geometry, profile links, group order, selected objects, no-op history, undo/redo for setting and clearing Tip, rejection without mutation, FCStd persistence of both cleared and nonterminal Tip, and continued downstream parametric editing after reopening.
- Scoped
git diff --checkpassed.
Remaining boundaries
- Desktop
CmdPartDesignMoveTip::activatedexplicitly shows the selected feature. This patch changes native document Tip but does not add or prove renderer/view-provider visibility behavior. Existing snapshot geometry contains downstream meshes too. Inspect the application render bridge and current visibility ownership before claiming complete desktop visual parity; add actual rendered visibility assertions and screenshots as appropriate. - Native code retains the Body BaseFeature exception, but a dedicated external BaseFeature case was not added. Body discovery for an external base needs comparison with desktop
getBodyFor;Body::findBodyOfalone may not identify an external base reference. - Desktop filters selected objects by Part::Feature; the adapter currently requires exactly one whole selected object and rejects subelements. Mixed irrelevant selections and feature subelement selection parity remain unimplemented/unverified.
- Native rejection of an existing unowned Part::Feature and malformed direct Worker moveTip arrays needs dedicated cases. Current negative cases cover missing objects, sketches, datums, multiple/empty selections, foreign documents, conflicting names, subelements and active/cancelled tasks.
- Clearing an already empty Body Tip is implemented as a no-op. Desktop opens a transaction for Body selection even when Tip is already empty; whether this produces an observable history difference remains unverified.
- Browser proof exercises the mounted command selector and payload editor. Direct model-tree selection and visual highlighting were not asserted.
Source and continuation
The supplied desktop source at freecad-source/src/Mod/PartDesign/Gui/CommandBody.cpp:671 was read. Its semantics include one selected Part::Feature, Body lookup, PartDesign::Feature or BaseFeature eligibility, current-feature no-op, Body-to-null Tip, and explicit selected-feature visibility.
Source reader reached its 16-window/48000-byte batch cap. The requested necessary supplemental 60-line window at PartDesignDocumentWorkflow.cpp:1020 was also rejected by the reader. Existing retained excerpts and known anchors were sufficient for the implemented repair. Missing source is not being reported as absent functionality. Request a fresh bounded packet/window allowance on continuation for renderer and BaseFeature ownership anchors; do not bypass the reader limit.
Reuse the passing evidence above. Next work should address the explicit visibility and BaseFeature boundaries with isolated cases, then rebuild/sync only if native code changes and use the acceptance runner for new attributable proof. No full-parity/API gate, deployment, push, external message, IFC contract change or acceptance-verifier change was performed. The runner pass covers the implemented cases, not all remaining desktop parity requirements.