Files
FreeCADWasmDev/docs/current/PART_SELECTED_COMMANDS_PROGRESS.md

4.8 KiB

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:

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.