Files
FreeCADWasmDev/docs/current/PART_SELECTED_COMMANDS_PROGRESS.md

87 lines
4.8 KiB
Markdown

# Part Selected Commands Checkpoint
Batch: `703925e8a0a32a52bb21cf17`.
Checkpoint date: 2026-09-17 (Asia/Shanghai).
Selected IDs: `Part:desktop:Part_PickCurveNet`, `Part:desktop:Part_Primitives`,
`Part:desktop:Part_ProjectionOnSurface`, `Part:desktop:Part_Revolve`.
## Completed This Continuation
`Part_PickCurveNet` now follows the supplied desktop command source:
`freecad-source/src/Mod/Part/Gui/Command.cpp:95` has an empty
`CmdPartPickCurveNet::activated(int)` body. The existing Part adapter returns
an explicit no-op receipt without calling a kernel or a selection callback.
It also works without an active document. This is source parity for this
specific empty command, not an implemented curve-network modeling tool.
The existing `DesktopCommandDispatcher` invokes this adapter before the generic
geometry route. No shared dispatcher change was required. The old low-level
`PartDesktopCommands.cpp:1436` PickCurveNet branch still constructs a compound;
the desktop application path now bypasses it. Direct geometry-endpoint parity
is outside the evidence from this continuation and remains an explicit boundary.
Executable cases were added directly to `tools/part-business-cases.mjs`, wired
into its selected-ID dispatcher, and excluded from its unimplemented fallback.
They compile the adapter, exercise native document snapshots around the action,
preserve a populated redo branch, compare a second document, use the actual
browser dispatcher and Worker-owned document, and click the mounted desktop
and mobile run buttons with no BREP input. Assertion failures remain failures.
Volume assertions use a 1e-9 absolute tolerance for the small fixture solids.
## Attributable Verification
Command:
```sh
python3 tools/run_business_acceptance.py --module Part --ids Part:desktop:Part_PickCurveNet --reuse
```
The final invocation returned `status: passed`, `passed: 1`, `remaining: []`,
`executedCount: 1`, `totalSeconds: 5.391`.
Evidence: `docs/current/business-evidence/0a519b3c830d4fa109b4d216-20260916T235444483442.json`.
Screenshots and timed case report:
`docs/current/part-pick-curve-net-business/2026-09-16T23-54-39-358Z/`.
The mobile screenshot was visually inspected. The browser origin already
available during the run was `http://127.0.0.1:5180`.
The earlier run failed on exact equality of native volume
23.999999999999996 versus 24; evidence remains at
`docs/current/business-evidence/0a519b3c830d4fa109b4d216-20260916T235408429144.json`.
Only the fixture's numerical comparison was corrected before rerunning.
No acceptance contract, verifier, proof requirement, or acceptance machinery
was changed. No coverage tags were added. No WASM rebuild was needed.
## Remaining Selected Work
- `Part_Primitives`: the mounted `PartPrimitivesTask` and document adapter exist.
The adapter currently accepts Cylinder, Cone, Sphere and Torus through
`setPrimitive`, with accept/edit/read/cancel actions. Inspect the actual
desktop TaskPrimitives options before claiming full command scope; Box and
other primitive types are not accepted by this adapter. No selected-command
native/browser acceptance case has been supplied in this continuation.
- `Part_Revolve`: the mounted `PartRevolveTask`, adapter and native document
actions exist. The adapter accepts one whole profile, preserves the source
dependency, and expects a valid `Part::Revolution`. Native entry points are
`createRevolution` and `editRevolution` in `DocumentProbe.cpp`, using
`PartRevolveDocument.h`. Add focused geometry, dependency/recompute, history,
persistence, rejection/cancel and mounted UI assertions before acceptance.
- `Part_ProjectionOnSurface`: desktop source at `Command.cpp:2450` opens
`TaskProjectOnSurface` and requires an active document and no active dialog.
The current geometry fallback at `PartDesktopCommands.cpp:1506` shares
`BRepAlgoAPI_Section` with Section; intersection is not proof of surface
projection. No dedicated Part adapter or mounted projection task was found
in the inspected call sites. Read the supplied task/feature implementation,
reuse the provided OCCT backend, and implement persistent document semantics
plus actual projection assertions. Do not certify this via section output.
Recommended next action: reuse the PickCurveNet evidence, then add the first
isolated Revolve native/browser case against the existing document runtime.
Fix its first concrete failure before broadening to the remaining selected
work. Do not resume unrelated Join work from the older recovery note.
Preserve all original and supplemental requirements, including the unchanged
IFC semantic export contract. No IFC work or regression was run here. No
full-parity/API gate, deployment, push, or external message was performed.
Files under this workspace include pre-existing untracked implementation;
do not treat a blank git diff as evidence of no changes or revert that work.