148 lines
8.3 KiB
Markdown
148 lines
8.3 KiB
Markdown
# PartDesign Batch e7e203467bd0cc3ce3fd8685
|
|
|
|
## Implemented Scope
|
|
|
|
Selected commands are PartDesign_DuplicateSelection, PartDesign_Migrate,
|
|
PartDesign_MoveFeature and PartDesign_MoveFeatureInTree.
|
|
|
|
The mounted workbench dispatcher already calls the PartDesign desktop adapter.
|
|
The adapter now normalizes whole-object selections, checks current-document
|
|
selection, rejects conflicting explicit objects and unfinished/cancelled tasks,
|
|
and publishes native result selection for these four commands. The document
|
|
facade admits the four actions and validates their request fields. No shared
|
|
dispatcher, workbench shell, alternate Worker or geometry backend was added.
|
|
|
|
PartDesignDocumentWorkflow.cpp now implements:
|
|
|
|
- duplicateSelection: App::Document::copyObject with optional recursive copying,
|
|
adding allowed copies without a Body to the supplied active Body. Native
|
|
naming, object types, properties and dependency remapping are retained.
|
|
- migrate: scan orphan native PartDesign solid features, form independent linear
|
|
chains, transfer their orphan profiles, and create a Body per chain. Branches,
|
|
external bases, cycles and profiles already owned by a Body reject explicitly.
|
|
- moveFeature: require one source Body and another destination Body; include
|
|
sketch dependencies and reject other dependencies remaining in the source or
|
|
source features depending on the moved objects. Transfer in original Body
|
|
order using native removeObject/addObjects.
|
|
- moveFeatureInTree: remove/reinsert ordered selections after a same-Body target
|
|
or at the beginning. Reject foreign/base selections, selected insertion targets
|
|
and orders that put features before their dependencies.
|
|
|
|
All operations use existing native transactions, recompute, error handling,
|
|
undo/redo and FCStd persistence. Snapshots now expose Body Group order and these
|
|
actions return selectedObjects. Desktop source decisions are from CommandBody.cpp
|
|
at 400, 460, 560, 767, 836, 866 and 1033.
|
|
|
|
## Executable Cases
|
|
|
|
New tools/partdesign-body-business-cases.mjs is imported by the existing
|
|
partdesign-business-cases.mjs entry point. It is registered as an acceptance
|
|
dependency so edits invalidate its evidence. The four coveredIds were registered
|
|
only after their semantic assertions existed. No proof requirement, verifier,
|
|
runner or passing status was edited.
|
|
|
|
The cases run the real PartDesign Worker with published WASM and the mounted
|
|
workbench command buttons through Playwright. They assert native Pad and sketch
|
|
types, independent copied profile links, solved sketch DOF, Body ownership/order/
|
|
tip, analytic volume and mesh, one transaction, undo restoring original objects,
|
|
redo, invalid-input/history preservation, FCStd save/close/open and continued
|
|
source/copied feature parameter edits. Mounted browser cases use the same
|
|
assertions and the actual command/payload controls. Native selection publication
|
|
is also checked.
|
|
|
|
## Build And Evidence
|
|
|
|
The focused build completed:
|
|
|
|
`python3 tools/web_build_lock.py -- cmake --build freecad-source/build-web/configure --target FreeCADWebPartDesignRuntimeProbe -j8`
|
|
|
|
Ninja also rebuilt existing Sketcher SketchGeometry.cpp and SketchObjectExternal.cpp
|
|
changes present in the workspace. They were not edited in this turn. Existing
|
|
compiler/linker warnings concerned PTHREAD_POOL_SIZE during compilation,
|
|
USE_PTHREADS with ALLOW_MEMORY_GROWTH, and exported FS_readFile.
|
|
|
|
`node tools/sync-assets.mjs` completed, copying three runtime artifacts.
|
|
`node web/node_modules/typescript/bin/tsc --noEmit -p web/tsconfig.json` passed.
|
|
JavaScript syntax and scoped diff whitespace checks passed.
|
|
Existing browser URL: http://localhost:5180/workbench.html?module=PartDesign.
|
|
|
|
Initial four-ID acceptance took 10.937 seconds. All native workflows reached
|
|
their final assertions; browser cases stopped on an ambiguous button.run
|
|
selector. Evidence, preserved unchanged:
|
|
docs/current/business-evidence/46c7c94b4f4bb100bb3ce940-20260917T021934917325.json
|
|
|
|
After narrowing the Run button selector, an isolated retry initially returned
|
|
unchanged_failure_preserved because this new imported case file had not yet been
|
|
registered in dependencies. Adding that real dependency made the correction
|
|
attributable; no status, fingerprint or evidence was manually changed.
|
|
|
|
Successful DuplicateSelection run: 21 cases, including 10 browser cases,
|
|
10.018 seconds:
|
|
docs/current/business-evidence/3774f7cdab28b6155c63b6b8-20260917T022024325315.json
|
|
|
|
Next three-ID run: Migrate passed 17 cases (8 browser); MoveFeatureInTree passed
|
|
21 (10 browser). MoveFeature completed native assertions but browser selection
|
|
matched both MoveFeature and MoveFeatureInTree. Run took 20.563 seconds:
|
|
docs/current/business-evidence/72714590dfc7acce7716ec53-20260917T022057991833.json
|
|
|
|
The final case change selects buttons by an exact command-name descendant.
|
|
MoveFeature then passed 21 cases (10 browser), 8.968 seconds:
|
|
docs/current/business-evidence/84398a23ec503f67a143e795-20260917T022148916910.json
|
|
|
|
There are 80 successful cases across those individual reports, 38 browser cases.
|
|
This is not a claim that a final combined run passed: DuplicateSelection,
|
|
Migrate and MoveFeatureInTree were executed before the final shared-selector
|
|
change, while MoveFeature was executed after it. No native or adapter changes
|
|
were made after the successful build or first runner invocation.
|
|
|
|
## Next Continuation
|
|
|
|
Final combined freshness invocation:
|
|
|
|
`python3 tools/run_business_acceptance.py --module PartDesign --ids PartDesign:desktop:PartDesign_DuplicateSelection PartDesign:desktop:PartDesign_Migrate PartDesign:desktop:PartDesign_MoveFeature PartDesign:desktop:PartDesign_MoveFeatureInTree --reuse`
|
|
|
|
The scheduler rejected it with exit 78, previous_validation_deferred,
|
|
executedCount 0, reason: "User paused repeat validation; select only newly
|
|
completed gaps. Historical proof is not promoted to current acceptance."
|
|
|
|
Do not bypass the guard or repeatedly issue the unchanged rejected invocation.
|
|
Reuse this build/sync and the original reports. When permitted by the outer
|
|
pipeline, refresh the three results predating the exact command selector and
|
|
reuse MoveFeature if its fingerprints remain valid.
|
|
|
|
## Remaining Behavior Boundaries
|
|
|
|
These successful cases certify the explicit workflows above, not every desktop
|
|
option. Preserve all of the following as remaining work:
|
|
|
|
- Migration does not create/reuse the desktop active App::Part, set GUI workflow
|
|
preferences, migrate branched/external-base chains, fix historical sketch
|
|
support, or relink external references to new Bodies. Empty modern-document
|
|
migration currently returns an error. The fixture is a real orphan recursively
|
|
copied Pad/profile, not an imported historical legacy FCStd fixture.
|
|
- MoveFeature currently requires an owned source Body and only automatically
|
|
collects sketch dependencies. It does not reproduce the full GUI movable-
|
|
dependency collector, detached source objects, origin/datum dependency moves,
|
|
all nonempty-target combinations or arbitrary multi-feature moves in tests.
|
|
- Reordering tests cover moving a datum after a sketch while preserving Pad tip,
|
|
and rejecting an invalid sketch-after-Pad order. Beginning insertion, multiple
|
|
selections, moving solid tips and Body base edge cases still need cases.
|
|
Dependency-order rejection is stricter than the desktop command's TODO warning.
|
|
- DuplicateSelection delegates native copying but has no dependency-selection
|
|
dialog or desktop visibility/property-preference parity. Whole-Body copying,
|
|
nonrecursive copies, mixed object types and no-active-Body user workflows need
|
|
dedicated cases. No mutation is represented by proxy geometry.
|
|
- The mounted command/payload flow is tested. Specialized graphical task panels,
|
|
mobile/canvas layout and browser OPFS reload are not certified by this suite.
|
|
|
|
Earlier checkpoints and all original/supplemental requirements remain in force,
|
|
including docs/current/partdesign-98e219d6-checkpoint.md and prior SubShapeBinder
|
|
boundaries. Preserve the IFC semantic export contract, semantic assertions,
|
|
verifier, proof areas, acceptance machinery and historical evidence. No full
|
|
parity/API gate, deployment, push or external message was performed.
|
|
|
|
The initial unscoped git status was rejected with SCHEDULER_GIT_SCOPE_REJECTED
|
|
(exit 64). This was a diagnostic scope rejection, not a CAD failure. Later scoped
|
|
diff whitespace checks succeeded. All command sessions started in this turn
|
|
completed before checkpointing.
|