5.9 KiB
PartDesign Batch 66407f2d33953fef7de6e863
Implemented This Continuation
Connected PartDesign_SubShapeBinder through the mounted desktop adapter and
existing partdesign.document Worker to native PartDesign::SubShapeBinder.
The native document owner uses desktop setLinks(..., true) for support
replacement, actual XLink support snapshots and native BindMode properties.
It preserves Body ownership, source Body tips, transactions, native recompute,
undo/redo and FCStd persistence. Native geometry remains in the supplied OCCT
WASM path. The common desktop dispatcher and acceptance runner were not edited.
Added shared Worker and mounted workbench cases in
tools/partdesign-datum-clone-business-cases.mjs for multiple solids, multiple
selected faces, editable supports, source recompute, Synchronized/Frozen/Detached
modes, detach undo, reattachment, invalid-input preservation, FCStd reopen and
continued source/support editing. Coverage metadata was added only with these
semantic assertions; acceptance statuses are solely runner-owned.
Execution And Evidence
Focused incremental build:
python3 tools/web_build_lock.py -- cmake --build freecad-source/build-web/configure --target FreeCADWebPartDesignRuntimeProbe -j8
Artifact synchronization: node tools/sync-assets.mjs.
Existing browser server: http://localhost:5180/workbench.html?module=PartDesign.
The first acceptance run exposed an incorrect new test assumption: OCCT volume
integration over two open faces returned 18 despite there being no solid.
The implementation now reports actual native solid count; the face assertion
checks two faces, zero solids and exact area 63. Historical failed evidence is
retained at
docs/current/business-evidence/e28ca3151080263638f6f290-20260916T202024201284.json.
The next run passed 40 cases, including 19 mounted-browser cases, in 15.573 s:
docs/current/business-evidence/e28ca3151080263638f6f290-20260916T202255125447.json.
After that run, native reattachment was corrected to leave Detached mode before
assigning support, and an explicit reattachment case was added. The updated case
suite contains 42 cases (20 mounted-browser cases), but that count is not an
execution claim. Native rejection of unsupported TraceSupport on SubShapeBinder
was also tightened to match the facade. The final focused build and asset sync
both completed successfully.
Final validation was blocked by the scheduler before execution:
python3 tools/run_business_acceptance.py --module PartDesign --ids PartDesign:desktop:PartDesign_SubShapeBinder PartDesign:desktop:PartDesign_ShapeBinder --reuse
A narrowed SubShapeBinder-only invocation was also rejected. Both returned
exit 78, previous_validation_deferred, executedCount 0, with reason
"User paused repeat validation; select only newly completed gaps. Historical
proof is not promoted to current acceptance." The current user prompt permits
focused testing, but the command guard still applies that repeat-validation
restriction. No guard, verifier, runner or status was edited or bypassed.
The earlier 40-case pass is therefore historical proof for the pre-reattachment
revision, not current acceptance for the final files. The affected ShapeBinder
regression also remains unexecuted against this revision.
Next continuation: retain the completed build/sync; when the outer scheduler
allows the focused runner, execute the selected SubShapeBinder case against
these unchanged artifacts and then the affected ShapeBinder regression. Do not
repeat blocked invocations without an applicable execution-policy change.
Syntax (node --check) and scoped diff whitespace checks passed on the final
implementation; they are not substitutes for native validation.
Remaining Work And Boundaries
PartDesign:desktop:PartDesign_MultiTransformremains guarded in the adapter.PartDesign:desktop:Sketcher_MapSketchstill needs native attachment behavior, mounted command integration and Worker/browser semantic cases.- SubShapeBinder currently accepts Body-owned local supports with whole shapes or Face/Edge/Vertex names. Cross-document/external links, hierarchical relative supports, standalone binders, offset and copy-on-change controls remain outside this continuation's implementation and proof. Dedicated graphical task-panel controls and desktop/mobile canvas coverage are also not certified here.
- Preserve all original requirements, IFC semantic export contract, verifier and proof requirements. No full-parity/API gate, deployment, push or message was performed. No acceptance status was manually edited.
Retained Source Decisions
freecad-source/src/Mod/PartDesign/Gui/Command.cpp:399 creates the actual
SubShapeBinder and calls setLinks; its definition is in
freecad-source/src/Mod/PartDesign/App/ShapeBinder.h, not FeatureSubShapeBinder.h.
ShapeBinder.cpp:1174 defines setLinks, and 1096 onward handles BindMode changes.
For MultiTransform, Command.cpp:2459 selects an existing transformed feature, excludes nested MultiTransforms and moves the insertion point back. Command.cpp:2519 transfers Originals, TransformMode and BaseFeature to a native MultiTransform, assigns Transformations=[existing transform], clears the child Originals and retains the child in the Body. The alternative branch invokes prepareTransformed and temporarily copies the previous solid shape only while the task has no transformations. Do not use that preview as the final behavior.
The supplied MapSketch anchor at Command.cpp:2690 only registers the sketch
command group. The actual Sketcher mapping command still needs a bounded source
anchor from freecad-source/src/Mod/Sketcher/Gui/Command.cpp; a search there was
rejected by SCHEDULER_SOURCE_BUDGET_REACHED, not by absence of supplied source.
Two bounded reader calls were used this turn: packet metadata and the retained
MultiTransform 2519-2578 window. Stop ordinary source searches after the budget
rejection; any further required windows must obey the user policy.