Files
FreeCADWasmDev/docs/current/partdesign-fa7b23bd-checkpoint.md

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 moveTip resolves 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.js and .wasm from the configured build bin to web/public/kernel/.
  • node web/node_modules/typescript/bin/tsc --noEmit -p web/tsconfig.json: passed. Initial npx tsc --noEmit did 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 --check passed.

Remaining boundaries

  1. Desktop CmdPartDesignMoveTip::activated explicitly 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.
  2. 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::findBodyOf alone may not identify an external base reference.
  3. 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.
  4. 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.
  5. 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.
  6. 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.